使用 Power Fx 公式筛选 Dataverse 选项列
当 Dataverse 表具有选项列时,您通常需要使用选项列来筛选数据。 最常见的筛选应用场景如下:
筛选表行以显示在库中。
提供带选项值列表的 dropdown menu 或 combo box 控件,然后允许用户选择一个或多个选项值。 然后,可以使用选定值筛选表行以显示在库中。
例如,如果您的“Accounts”表提供 Category 选项字段,您可以使用以下逻辑仅筛选首选客户:
Filter(
Accounts,
Category = 'Category (Accounts)'.'Preferred Customer'
)
请确保使用完整的 table.column 字符串,而不仅仅是列字符串“Preferred Customer”(如下图),因为这是无效的比较。 如果您忘记将表添加到字符串,您将看到“比较的类型不兼容”错误。 由于“Category (Accounts)”本身就是一个表(或选项集),因此您无法将表值与文本值进行比较。 因此,您需要使用完全限定的引用:'Category (Accounts)'.'Preferred Customer'
(也显示为 [@Category].'Preferred Customer')
。
通常,您需要使用下拉菜单或组合框来筛选库,以便用户可以确定要显示的项目的类别。 在以下示例中,您将使用组合框来允许用户对客户类别进行多选以显示在库中。
首先,将组合框添加到屏幕,然后通过使用 Choices 函数设置 Items 属性。
Choices() 函数借助 Accounts.Category 选项列的元数据为用户准备可供选择的值列表。
接下来,使用组合框 SelectedItems 属性修改要包含在库中的 Items 公式。
Filter(Accounts, Category in ComboBoxCategory.SelectedItems)
使用 in 运算符允许公式对任何选定类别进行筛选。
至少选定一个类别时,本公式才会在库中显示行。 如果要在未选择任何类别时显示所有行,可以将 IsEmpty 检查添加到公式中。
Filter(
Accounts, Category in ComboBoxCategory.SelectedItems
|| IsEmpty(ComboBoxCategory.SelectedItems)
)
筛选选项列
由于 Dataverse 采用逗号分隔的列表形式存储数据,根据选项列筛选表行会十分复杂。 因此,您撰写的任何涉及选项列的筛选器都会收到委派警告,如以下示例中所示。
一种为避免委派问题而使用的方法是,创建一个可筛选选项值的 Dataverse 表视图,然后在 Filter() 函数条件中使用该视图。 本方法将帮助您避免委派警告,但它不支持应用用户提供筛选条件值。 以下屏幕截图显示了首选交货日期选项列的 Dataverse 视图筛选器示例。
您可以使用以下 Filter() 函数来使用名为星期一交货的 Dataverse 视图:
Filter(
Accounts,
'Accounts (Views)'.'Monday Delivery'
)
此外,您仍然可以为“Category”以外的列添加用户输入的条件。 例如,以下 Filter() 函数显示额外添加了 Category 选项列,该列根据用户从下拉列表中选择的值进行筛选。
Filter(
Accounts,
'Accounts (Views)'.'Monday Delivery',
Category = Dropdown1.Selected.Value
)
值列表经过标准化处理,因此选项列有助于提供一致的方式来筛选表行。