使用 Power Fx 公式筛选 Dataverse 选项列

已完成

当 Dataverse 表具有选项列时,您通常需要使用选项列来筛选数据。 最常见的筛选方案包括:

  • 筛选表行以显示在库中。

  • 提供带选项值列表的 dropdown menu 或 combo box 控件,然后允许用户选择一个或多个选项值。 然后,可以使用选定值筛选表行以显示在库中。

例如,如果您的“客户”表提供类别选项字段,则可以使用以下逻辑仅筛选首选客户:

Filter(
  Accounts,
  Category = 'Category (Accounts)'.'Preferred Customer'
)

切记不要只使用字符串 'Preferred Customer'(如下图),因为它是无效比较, 否则会显示错误消息“比较的类型不兼容”。 由于“类别”本身就是一个表(或选项集),您无法将表值与文本值进行比较。 因此,您需要使用完全限定的引用:'Category (Accounts)'.'Preferred Customer' (也显示为 [@Category].'Preferred Customer')

无效 Power Fx 公式:Filter ( Accounts, Category =

通常,您需要使用下拉菜单或组合框,以便用户可以确定库的筛选值。 以下示例中使用 combo box 来支持显示多个客户类别选项。

部分客户信息窗体的屏幕截图,其中显示的下拉列表中已选定多个类别:标准客户和首选客户。

首先,将组合框添加到屏幕,然后通过使用 Choices 函数设置 Items 属性。

用作 Items 属性公式的 Choices(Accounts.Category) 表达式的屏幕截图。

Choices() 函数借助 Accounts.Category 选项列的元数据为用户准备可供选择的值列表。

接下来,使用组合框 SelectedItems 属性修改要包含在库中的 Items 公式。

Filter(Accounts, Category in ComboBoxCategory.SelectedItems)

使用 in 运算符允许公式对任何选定类别进行筛选。

至少选定一个类别时,本公式才会在库中显示行。 如果要在未选择任何类别时显示所有行,可以将 IsEmpty 检查添加到公式中。

Filter(
  Accounts, Category in ComboBoxCategory.SelectedItems
  || IsEmpty(ComboBoxCategory.SelectedItems)
)

筛选选项列

由于 Dataverse 采用逗号分隔的列表形式存储数据,根据选项列筛选表行会十分复杂。 因此,您撰写的任何涉及选项列的筛选器都会收到委派警告,如以下示例中所示。

Filter(Accounts,Text(Dropdown1.Selected.Value in 'Preferred Delivery') 公式的屏幕截图。

一种应对方式是,创建一个可筛选选项值的 Dataverse 表视图,然后在 Filter() 函数条件中使用该视图。 本方法将帮助您避免委派问题,但它不支持应用用户提供筛选条件值。 以下屏幕截图显示了首选交货日期选项列的 Dataverse 视图筛选器示例。

Dataverse 视图编辑筛选器条件的屏幕截图,其中显示对“首选交货日期”选项列的筛选。

您可以使用以下 Filter() 函数来使用名为星期一交货的 Dataverse 视图:

Filter(
  Accounts,
  'Accounts (Views)'.'Monday Delivery'
)

此外,仍然可以为视图以外的其他列加入用户输入的条件。 例如,以下 Filter() 函数显示额外添加了类别选项列,该列根据用户从下拉列表中选择的值进行筛选。

Filter(
  Accounts,
  'Accounts (Views)'.'Monday Delivery',
  Category = Dropdown1.Selected.Value
)

值列表经过标准化处理,因此选项列有助于提供一致的方式来筛选表行。