Power Fx 式を含む Dataverse 選択列のフィルター処理
Dataverse テーブルに選択肢列が含まれているとき、選択肢列を使用したデータのフィルター処理が必要になる場合があります。 最も一般的なフィルター処理のシナリオを次に示します。
テーブルの行をフィルター処理してギャラリーに表示する。
ドロップダウン メニュー コントロールやコンボ ボックス コントロールに選択値の一覧を表示して、ユーザーに 1 つ以上の値を選択させる。 その選択された値を使用して、テーブルの行をフィルター処理してギャラリーに表示する。
たとえば、Accounts テーブルに Category 選択フィールドがある場合、次のロジックを使用して優先顧客のみをフィルター処理することができます。
Filter(
Accounts,
Category = 'Category (Accounts)'.'Preferred Customer'
)
無効な比較となるため、下の画像のような列文字列 "Preferred Customer" だけでなく、"table.column" という形式の完全な文字列を使用してください。 文字列にテーブルを追加するのを忘れた場合は、"型に互換性がないため比較できません" というエラーが表示されます。 "Category (Accounts)" 自体がテーブル (またはオプション セット) であるため、テーブル値をテキスト値と比較することはできません。 したがって、完全修飾参照 'Category (Accounts)'.'Preferred Customer' を使用する必要があります (次のようにも表示される: [@Category].'Preferred Customer')。
多くの場合、表示される項目のカテゴリをユーザーが確認できるように、ドロップダウン メニューやコンボ ボックスを使用してギャラリーをフィルター処理することになります。 次の例では、コンボ ボックスを使用することで、ユーザーは取引先企業のカテゴリを複数選択し、ギャラリーに表示することが可能になります。
まず、画面にコンボ ボックスを追加し、Choices 関数を使用して Items プロパティを設定します。
この Choices() 関数は、選択肢列の Accounts.Category のメタデータを使用して、ユーザーが選択する値の一覧を表示します。
次に、コンボ ボックスの SelectedItems プロパティを使用して、ギャラリーに表示するための Items 式を変更します。
Filter(Accounts, Category in ComboBoxCategory.SelectedItems)
この式では、in 演算子を使用することで、選択されたカテゴリをフィルター処理できます。
この式では、少なくとも 1 つのカテゴリが選択されている場合にのみ、ギャラリーに行が表示されます。 カテゴリが選択されていない場合にすべての行を表示するには、式に IsEmpty によるチェックを追加します。
Filter(
Accounts, Category in ComboBoxCategory.SelectedItems
|| IsEmpty(ComboBoxCategory.SelectedItems)
)
複数選択肢列のフィルター処理
テーブルの複数選択肢列の行のフィルター処理は、そのデータをコンマ区切りリストとして Dataverse にどのように格納するかによって複雑になります。 そのため、複数選択肢列を含むフィルターでは、次に示すような委任の警告が表示されます。
委任の問題を回避する方法の 1 つとして、選択肢の値をフィルター処理する Dataverse テーブル ビューを作成し、そのビューを Filter() 関数の条件で使用する方法があります。 この方法は、委任の警告を回避するために役立ちます。ただし、アプリのユーザーがフィルター条件の値を指定することはできません。 次のスクリーンショットは、優先配送複数選択肢列の Dataverse のビューのフィルターの例を示しています。
この月曜配送という Dataverse のビューは、次の Filter() 関数を使用して使用できます。
Filter(
Accounts,
'Accounts (Views)'.'Monday Delivery'
)
また、Category 以外の列に対しては、ユーザーが入力した条件を含めることもできます。 たとえば、次の Filter() 関数は、ユーザーがドロップダウン リストから選択した値でフィルター処理した Category 選択肢列の追加を示しています。
Filter(
Accounts,
'Accounts (Views)'.'Monday Delivery',
Category = Dropdown1.Selected.Value
)
値の一覧が標準化されていることにより、選択肢列と複数選択肢列は、テーブル行を一貫した方法でフィルター処理するために役立ちます。