Power Fx 式を含む Dataverse 選択列のフィルター処理
Dataverse テーブルに選択肢列がある場合は、選択肢列を使用してデータをフィルター処理することをお勧めします。 最もよくあるフィルター処理のシナリオは次のとおりです。
テーブルの行をフィルター処理してギャラリーに表示する。
ドロップダウン メニュー コントロールやコンボ ボックス コントロールに選択値の一覧を表示して、ユーザーに 1 つ以上の値を選択させる。 その選択された値を使用して、テーブルの行をフィルター処理してギャラリーに表示する。
たとえば、Accounts テーブルにカテゴリ選択フィールドがある場合、次のロジックを使用して優先顧客のみをフィルター処理することができます。
Filter(
Accounts,
Category = 'Category (Accounts)'.'Preferred Customer'
)
無効な比較であるため、(以下の図のように) 文字列 "Preferred Customer" のみを使用するのは避けてください。 "型に互換性がないため比較できません" というエラーが表示されます。 "カテゴリ" はテーブル (またはオプション セット) 自体を指すため、テーブル値とテキスト値を比較することはできません。 したがって、完全修飾参照 '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'
)
また、ビュー以外の列に対しては、ユーザーが入力した条件を含めることもできます。 たとえば、次の Filter() 関数は、ユーザーがボックスの一覧から選択した値でフィルター処理したカテゴリ選択肢列の追加を示しています。
Filter(
Accounts,
'Accounts (Views)'.'Monday Delivery',
Category = Dropdown1.Selected.Value
)
値の一覧が標準化されていることにより、選択肢列と複数選択肢列は、テーブル行を一貫した方法でフィルター処理するために役立ちます。