徒然なるままにデータサイエンス

データアナリストの実務で得た知識を書いていきます

【powerapps講座】#2 テーブルと複数検索ボックスを設置する

テーブルと複数検索ボックスを設置する

前回の記事でSharePoint Listのインポートをしました。

funi-ds.hatenablog.com

今回はリストの中身を表示するテーブルと検索ボックスを設置します。

データテーブルを挿入する

「挿入」タブから「データテーブル」を選択します。
f:id:funi_ds:20210914075851p:plain
データソースの選択で対象のリストを選択します。
f:id:funi_ds:20210914080024p:plain
データが反映されました!
SharePoint Listでタイトルに設定している列は列名がTitleと表記されるため、列名を変更します。
f:id:funi_ds:20210914080256p:plain
対象の列を選択し、右端に出てくる編集画面の「ヘッダーテキスト」を正しい列名に変更します。
f:id:funi_ds:20210914080548p:plain
f:id:funi_ds:20210914080639p:plain

検索ボックスを挿入する

続いて検索ボックスを設置します。
今回は「分類」列と「商品名」列の2つで検索ボックスを設置します。
検索ボックスはSharePoint Listでの列の設定によってコードの書き方が変わります。

f:id:funi_ds:20210914081450p:plain
「挿入」タブ→「入力」→「ドロップダウン」を選択します。
f:id:funi_ds:20210914082405p:plain
同じ要領で検索ボックスを2つ設置します。
f:id:funi_ds:20210914082627p:plain

検索ボックスの選択肢を設定する

「ツリービュー」→「App」→「OnStart」に検索ボックスの選択肢の設定をしていきます。
f:id:funi_ds:20210914082801p:plain
入力するコードは以下の通りです。

//1.分類の選択肢設定
ClearCollect(category, {Result:"-"});
Collect(category, Distinct(在庫管理リスト, 分類.Value));

//2.商品名の選択肢設定
ClearCollect(name, {Result:"-"});
Collect(name, Distinct(在庫管理リスト, 商品名))

「分類」のコードで1行ずつ説明します。

f:id:funi_ds:20210914085015p:plain
まずCollect関数を使って、「category」のコレクションを作成しています。
コレクションの中身としては、Distinct関数でリストで回答されている項目とするように設定しています。
SharePoint Listで選択肢の設定をしている場合は列名の後ろに「.Value」を追加します。
ここでは「分類」列は選択肢、「商品名」列は1行テキストで設定しているため、分類のみ.Valueをつけています。

f:id:funi_ds:20210914085125p:plain
ClearCollect関数で「category」コレクションの中身を削除し、「-」を追加する設定をしています。
「-」は検索ボックスで無選択のときに使うため追加しています。

「ツリービュー」→「App」の「・・・」をクリックし、「OnStartを実行します」をクリックします。
f:id:funi_ds:20210914085526p:plain
データにコレクションが追加されました。
f:id:funi_ds:20210914162227p:plain

コレクションの内容は「ファイル」→「コレクション」から確認することができます。
f:id:funi_ds:20210914091147p:plain
f:id:funi_ds:20210914091212p:plain

検索ボックスそれぞれにさきほど設定したコレクションの設定をしていきます。
検索ボックスの「Items」にコレクション名を入力します。
f:id:funi_ds:20210914091404p:plain
検索ボックスに選択肢が表示されるようになりました!
f:id:funi_ds:20210914091532p:plain

検索ボックスとテーブルを連携させる

続いて検索ボックスとテーブルの連携設定をしていきます。
検索ボックスの選択は全部で4通り考えられるため、4通りのコードを設定していきます。
f:id:funi_ds:20210914093029p:plain

4通りのコードは以下の通りです。

If(
    //すべて選択されない
    Dropdown_name.Selected.Result = "-" And Dropdown_category.Selected.Result = "-",
    在庫管理リスト,

    //どれか1つが選択
    Dropdown_name.Selected.Result <> "-" And Dropdown_category.Selected.Result = "-",
    Filter(在庫管理リスト, 商品名 = Dropdown_name.Selected.Result),

    Dropdown_name.Selected.Result = "-" And Dropdown_category.Selected.Result <> "-",
    Filter(在庫管理リスト, 分類.Value = Dropdown_category.Selected.Result),

    //2つとも選択される
    Dropdown_name.Selected.Result <> "-" And Dropdown_category.Selected.Result <> "-",
    Filter(在庫管理リスト, 商品名 =Dropdown_name.Selected.Result, 分類.Value = Dropdown_category.Selected.Result))


f:id:funi_ds:20210914172921p:plain
検索ボックスがすべて選択されないとき、つまり検索ボックスの表示が「-」のときは在庫管理リストの一覧を表示します。

f:id:funi_ds:20210914155058p:plain
検索ボックスのうちどれか1つが選択されたとき、つまり検索ボックスの表示が片方が「-」でもう片方が「-」以外のものが表示されたときは「-」以外の指定されたワードで列の絞り込みをします。
コードの<>は≠を意味します。

f:id:funi_ds:20210914173017p:plain
検索ボックスが2つとも選択されたとき、つまり検索ボックスの表示が2つとも「-」以外の場合は、「-」以外の指定されたワードで2列の絞り込みをします。
このコードはテーブルの「Items」に入力します。
f:id:funi_ds:20220318182249p:plain

実際に検索ボックスを操作してみます。
<検索ボックスの指定なし>
f:id:funi_ds:20210914155645p:plain
<片方の検索ボックスのみ選択>
f:id:funi_ds:20210914155555p:plain
<両方の検索ボックスを選択>
f:id:funi_ds:20210914155618p:plain
それぞれの条件でうまくテーブルに絞り込みデータを出すことができました!