Filter、 Search和 LookUp 函数

适用于: 画布应用 Copilot Studio Desktop 流 模型驱动应用 Power Platform CLI Dataverse 函数 Power Pages

查找中的一个或多个记录

观看此视频,了解如何使用FilterSearchLookUp函数:

备注

PAC CLI pac power-fx 命令 不支持该 Search 函数。

描述

Filter 函数在满足公式的表中查找记录。 用于 Filter 查找一组与一个或多个条件匹配的记录,并丢弃那些不匹配的记录。

LookUp 函数查找满足公式的表中的第一条记录。 用于 LookUp 查找与一个或多个条件匹配的单个记录。

对于这两者,系统都会针对表的每条记录计算公式。 结果为 true 的记录将包含在结果中。 除常规公式运算符外,还可对子字符串匹配项使用 inexactin 运算符。

当前正在处理的记录的字段在公式中可用。 可以使用 ThisRecord 运算符,也可以只按名称引用字段,就像引用任何其他值一样。 As 运算符也可用于为正在处理的记录命名,从而使您的公式更易于理解,并且使嵌套记录可以被访问。 有关详细信息,请参阅以下示例和使用记录范围

Search 函数查找表中包含其中一列中的字符串的记录。 字符串可能出现在列中的任何位置;例如,搜索“rob”或“bert”会在包含“Robert”的列中找到匹配项。 搜索不区分大小写。 与它不同 FilterLookUpSearch 函数使用单个字符串来匹配而不是公式。

FilterSearch 返回一个表,其中包含与原始表相同的列和与条件匹配的记录。 LookUp 仅返回找到的第一条记录,在应用公式以将记录减少到单个值之后。 如果未找到任何记录, FilterSearch 返回 表,则 LookUp 返回 空白

表格 是一个值, Power Apps就像字符串或数字一样。 可以向函数传递表,也可以从函数返回表。 FilterSearchLookUp 不修改表。 相反,它们将表作为参数,并从中返回表、记录或单个值。 请参阅使用表,了解更多详细信息。

代理

如果可能,Power Apps 会将筛选和排序操作委派给数据源,并根据需要在结果中翻页。 例如,当您启动一个应用程序来显示填充了数据的控件时,最初只会将第一组记录导入到设备中。 当用户滚动时,会将数据源中的其他数据转入下页。 这样,应用程序的启动时间更短,并且可以访问非常大的数据集。

但是,可能并非总是可以进行委派。 各数据源对委派支持的函数和运算符可能有所不同。 如果无法进行完全公式委派,则创作环境将用一条警告来标记无法委派的部分。 如果可能,请考虑更改公式以避免出现无法委派的函数和运算符。 委派列表详细说明了可以委派的数据源和操作。

如果无法进行委派,则 Power Apps 将仅拉取一小部分记录以在本地进行处理。 Filter 和排序函数将对一组减少的记录进行作。 中提供的内容可能不是整个过程,这可能会使用户感到困惑。

有关详细信息,请参阅委派概述

语法

Filter(表*, Formula1 [, *Formula2*, ... ] )

  • Table - 必需。 要搜索的表。
  • 公式 - 必需。 计算表的每个记录时所依据的公式。 此函数返回计算结果为 true 的所有记录。 可以引用表中的列。 如果提供多个公式,则通过 And 函数将所有公式的结果合并。

Search(Table*, SearchStringColumn1 [, *Column2*, ... ] )

  • Table - 必需。 要搜索的表。
  • SearchString - 必需。 要搜索的字符串。 如果为空白或者是空字符串,将返回所有记录。
  • Columns - 必需。 要在中搜索的列的名称。 如果在任意这些列的数据中找到了作为部分匹配项的 SearchString ,将返回完整记录。

备注

在版本 3.24042 之前的 Power Apps 中,使用双引号使用文本字符串指定函数的 Search 列名,如果连接到数据源,则它们也需要是逻辑名称。 例如,使用带双引号的逻辑名称 "cr43e_name",而不是不带引号的显示名称 Name。 对于列名称带空格的 SharePoint 和 Excel 数据源,每个空格都用 "_x0020_" 指定,例如 "Column Name""Column_x0020_Name"。 在此版本之后,所有应用程序都自动更新到本文描述的新语法。

LookUp(表*, 公式 [, *ReductionFormula* ] ]

  • Table - 必需。 要搜索的表。 在 UI 中,此语法显示为函数框上方的
  • 公式 - 必需。 计算表的每个记录时所依据的公式。 此函数返回计算结果为 true 的第一条记录。 可以引用表中的列。 在 UI 中,此语法显示为函数框上方的条件
  • ReductionFormula - 可选。 此公式会对找到的记录进行计算,然后将记录缩减为一个值。 可以引用表中的列。 如果没有使用这个参数,此函数将返回表中的完整记录。 在 UI 中,此语法显示为函数框上方的结果

示例

以下示例使用 IceCream数据源

Ice Cream 数据源。

公式 描述 结果
Filter(IceCream, OnOrder > 0) 返回 OnOrder 大于零的记录。 Filter 按顺序排列。
Filter(IceCream, Quantity + OnOrder > 225) 返回 QuantityOnOrder 列的总和大于 225 的记录。 Filter 数量和订单。
Filter(冰冰,低(味道)中的“巧克力” 返回其 Flavor 名称中出现单词“chocolate”(不区分字母大小写)的记录。 Filter 下限。
Filter(IceCream, Quantity < 10 && OnOrder < 20) 返回 Quantity 小于 10 且 OnOrder 小于 20 的记录。 没有符合这些条件的记录,因此将返回空表。 Filter on quantity.
Search(IceCream, “choc”, Flavor) 返回其 Flavor 名称中出现字符串“choc”(不区分字母大小写)的记录。 Search 项目。
Search(IceCream,“”,味道) 因为搜索词为空,所以将返回所有记录。 Search 所有项。
LookUp(IceCream, Flavor = “Chocolate”, Quantity) 搜索 Flavor 等于“Chocolate”的记录,其中有一个此类记录。 对于找到的第一个记录,将返回该记录的 Quantity 100
LookUp(IceCream,Quantity > 150,Quantity + OnOrder) 搜索 Quantity 大于 150 的记录,其中有多个此类记录。 对于找到的第一个 Flavor 为“Vanilla”的记录,将返回 QuantityOnOrder 列的总和。 250
LookUp(IceCream, Flavor = “Pistachio”, OnOrder) 搜索 Flavor 等于“Pistachio”的记录,其中不存在此类记录。 由于未找到匹配项,Lookup 将返回空白 空白
LookUp(IceCream, Flavor = “Vanilla”) 搜索 Flavor 等于“Vanilla”的记录,其中有一个此类记录。 由于未提供归约公式,因此将返回完整记录。 { 风格: “Vanilla”, Quantity: 200, OnOrder: 75 }

使用选择列筛选

以下示例使用 Microsoft Dataverse 中的客户表作为数据源。 此示例演示如何 Filter 基于所选组合框控件值列出帐户:

分步操作

  1. 打开一个空白应用。

  2. 通过选择新建屏幕选项来添加新屏幕。

  3. 插入选项卡上,选择 Gallery,然后选择垂直

  4. 在右侧窗格的属性选项卡上,打开数据源,然后选择客户

  5. (可选)在布局列表中,选择不同的选项。

  6. 插入选项卡上,选择输入,然后选择 Combo box。 重复此步骤以再添加两个 Combo box 控件。

  7. 对于每个 Combo box 控件,在右侧窗格的属性选项卡上,打开数据源,然后选择客户。 选择字段选项旁边的编辑,然后选择主要文本SearchField 值。 主要文本应该是要添加到组合框的选项列。 对其他两个 Combo box 控件重复此步骤。

    设置组合框值。

  8. 现在,选择 Gallery 控件,并将 Items 属性设置为以下公式:

    Filter(Accounts,
     'Industry' = ComboBox3.Selected.Industry Or IsBlank(ComboBox3.Selected.Industry),
     'Relationship Type' = ComboBox2.Selected.'Relationship Type' Or
       IsBlank(ComboBox2.Selected.'Relationship Type'),
     'Preferred Method of Contact' = ComboBox1.Selected.'Preferred Method of Contact' Or
       IsBlank(ComboBox1.Selected.'Preferred Method of Contact'))
    

    客户数据源。

Search 用户体验

以下示例使用 IceCream数据源

在许多应用中,您可在搜索框中键入一个或多个字符来对较大数据集中的记录列表进行筛选。 键入时,列表中仅显示与搜索条件匹配的记录。

本文其余部分中的示例演示了搜索包含此数据的列表(名为客户)的结果:

Search 客户。

若要将此数据源创建为集合,请创建一个 Button 控件,并将其 OnSelect 属性设置为以下公式:

ClearCollect(客户,表({ 名称:“Fred Garcia”,公司:“Northwind Traders” }, { 名称:“Cole Miller”,公司:“Contoso” }, { 名称:“Glenda Johnson”,公司:“Contoso” }, { 名称:“Mike Collins”,公司:“Adventure Works” }, { 名称:“Colleen Jones”,公司:“Adventure Works”) }

如此示例中所示,可在屏幕底部的 Gallery 控件中显示记录列表。 在靠近屏幕顶部的位置,可添加名为 SearchInputText input 控件,以便用户能够指定对哪些记录感兴趣。

Search 使用搜索输入。

当用户在 SearchInput 中键入字符时,系统将自动筛选库中的结果。 在本例中,库被配置为显示客户名称(不是公司名称)以 SearchInput 中的字符序列开头的记录。 如果用户在搜索框中键入 co,库将显示以下结果:

Search 以开头。

若要基于 Name 列进行筛选,需将 Gallery 控件的 Items 属性设置为以下公式之一:

公式 描述 结果
Filter(Customers, StartsWith(Name, SearchInput.Text) 筛选 Customers 数据源,查找搜索字符串出现在 Name 列开头的记录。 测试不区分大小写。 如果用户在搜索框中键入 co,库将显示 Colleen JonesCole Miller。 库不会显示 Mike Collins,因为该记录的 Name 列不以搜索字符串开头。 Filter 以开头。
Filter(客户,名称中的 SearchInput.Text) 筛选 Customers 数据源,查找搜索字符串出现在 Name 列中任意位置的记录。 测试不区分大小写。 如果用户在搜索框中键入 co,库将显示 Colleen JonesCole MillerMike Collins,因为搜索字符串都出现在所有这些记录的 Name 列中的某个位置。 Filter 使用搜索输入。
Search(Customers, SearchInput.Text, Name) 与使用 in 运算符类似,该 Search 函数在每条记录的 Name 列中的任意位置搜索匹配项。 您必须将列名称括在双引号内。 Search 客户。

可以扩展搜索,使其包括 Company 列以及 Name 列:

公式 描述 结果
Filter(Customers, StartsWith(Name, SearchInput.Text) ||StartsWith(Company, SearchInput.Text) 筛选 Customers 数据源,查找 Name 列或 Company 列以搜索字符串(例如 co)开头的记录。 如果任一 || 函数为 true,则 运算符true Filter 客户从头开始。
Filter(客户,名称中的 SearchInput.Text ||SearchInput。公司中的文本) 筛选 Customers 数据源,查找 Name 列或 Company 列任意位置包含搜索字符串(例如 co)的记录。 Filter 客户搜索输入。
Search(客户,SearchInput.Text,名称,公司) 与使用 in 运算符类似,该 Search 函数在 “客户 ”数据源中搜索“ 名称 ”列或 “公司 ”列包含搜索字符串(例如 co)的任何位置的记录。 函数 Search 更易于读取和写入,而不是 Filter 想要在运算符 指定多个列和多个列。 Search 具有搜索输入的客户。