複数選択可能なコンボボックスでギャラリーをフィルターする方法を聞かれたので、メモ。
事前準備
以下のSharePointリストと、
以下のDataverseテーブルで、
複数選択可能なコンボボックスで上記2つをフィルターするときの式を考える。
※未選択時は全アイテム表示
※未選択時は全アイテム表示
このとき委任がきいているかを確認するため、データ行の制限を3にしておく。
委任がきいている場合→「ddd」「eee」のアイテムがフィルター後も表示される
委任がきいている場合→「ddd」「eee」のアイテムがフィルター後も表示される
委任とデータ行の制限についてはこちら
Power Apps 委任とデータ行の制限(500件~2000件)の関係を図にまとめてみた
これまで委任とデータ行の制限(既定は500件)が絡まると、いまいち理解がこんがらがってしまっていたけど、改めて図にしてみるとわかりやすかったのでメモ。前提前提として今回はこんなリストがあって、このリストを、わかりやすいようにデータ行の制限を...
SharePointリストの場合
最もシンプルな式は下図のようになると思うけど、残念ながらSharePointリストがデータソースだと委任の制限に引っかかってしまう。
委任を守りつつ複数の値でフィルターをかけたい場合、どうしても以下の図のような式になってしまうため、注意書きとして「先頭N個の選択までフィルタ可能」と書いておくしかないかなと。
※下図の例だと先頭3個まではフィルタ可能
※下図の例だと先頭3個まではフィルタ可能
Filter(SampleList As item, IsBlank(ComboBox1.SelectedItems) || IsEmpty(ComboBox1.SelectedItems) || (CountRows(ComboBox1.SelectedItems) > 0 && item.Title = Index(ComboBox1.SelectedItems,1).Value) || (CountRows(ComboBox1.SelectedItems) > 1 && item.Title = Index(ComboBox1.SelectedItems,2).Value) || (CountRows(ComboBox1.SelectedItems) > 2 && item.Title = Index(ComboBox1.SelectedItems,3).Value) )
※ちなみに以下の式だとギャラリー自体が動作しない。
これは、SelectedItemsが0個とかのときにIndex関数でアイテムにアクセスして内部でエラーが発生しているため(だと思われる)。
これは、SelectedItemsが0個とかのときにIndex関数でアイテムにアクセスして内部でエラーが発生しているため(だと思われる)。
Dataverseの場合
Dataverseの場合は以下の図のシンプルな式で委任機能も問題なく動作する。
Filter(SampleTable, IsBlank(ComboBox1_1.SelectedItems) || IsEmpty(ComboBox1_1.SelectedItems) || Name in ComboBox1_1.SelectedItems.タイトル )
やっぱりDataverseはとても楽。
おまけ:コンボボックスの選択肢がマスタテーブルを参照する場合
以下のように選択肢をマスタとして定義する場合は、
SharePointリストのギャラリーはこんな式になって、
Dataverseの式はこんな感じになる。
コメント