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
)

値の一覧が標準化されていることにより、選択肢列と複数選択肢列は、テーブル行を一貫した方法でフィルター処理するために役立ちます。