Sort 和 SortByColumns 函数

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

进行排序。

备注

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

描述

Sort 函数基于公式对表进行排序。

系统会针对表的每条记录计算公式,然后根据结果对表进行排序。 公式的计算结果必须是数字、字符串或布尔值;不得是表或记录。

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

若要先按一列排序,然后再按另一列进行排序,请在另一 Sort 列内嵌入公式。 例如,可以使用此公式先按 LastName 列对联系人表进行排序,然后按 FirstName 列排序:Sort(Sort联系人、姓氏)、名字)

SortByColumns 函数还可用于基于一个或多个列对表进行排序。

用于提供要排序的列的名称以及每个列的排序方向的参数列表 SortByColumns 。 系统按参数顺序执行排序(先按第一列排序,然后按第二列排序,依此类推)。 将列名称指定为字符串,如果直接在参数列表中添加列名称,必须用双引号括起来。 例如 SortByColumns,(CustomerTable、“LastName”)

可以将下拉列表或列表框控件组合SortByColumns在一起,使用户能够选择要排序依据的列。

除了按升序或降序排序外, SortByColumns 还可以根据单个列值表进行排序。 例如,可以提供 [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ] 作为排序顺序,从而根据星期几的名称对记录进行排序。 所有包含 Monday" 的记录会先显示,随后显示包含 Tuesday 的记录,依此类推。 与排序顺序表不匹配的记录被置于列表末尾显示。

表格 是一个值, Power Apps就像字符串或数字一样。 可以向函数传递表,也可以从函数返回表。 SortSortByColumn 不修改表;而是将表作为参数,并返回已排序的新表。 请参阅使用表,了解更多详细信息。

代理

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

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

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

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

语法

Sort公式 [, SortOrder ] )

  • Table - 必需。 要排序的表。
  • 公式 - 必需。 系统会针对表的每条记录计算此公式,然后根据结果对表进行排序。 可以引用表中的列。
  • SortOrder - 可选。 指定 SortOrder.Descending 可对表进行降序排序。 SortOrder.Ascending 是默认值。

SortByColumnsTableColumnName1 [, SortOrder1ColumnName2SortOrder2, ... ] ]

  • Table - 必需。 要排序的表。

  • ColumnNames - 必需。 要排序的列名称(以字符串形式)。

  • SortOrders - 可选。 SortOrder.AscendingSortOrder.DescendingSortOrder.Ascending 是默认值。 如果提供了多个 ColumnNames,则最后一列必须包括 SortOrder

    备注

    对于列名称带空格的 SharePoint 和 Excel 数据源,请将每个空格指定为 "_x0020_"。 例如,将 "Column Name" 指定为 "Column_x0020_Name"

SortByColumnsColumnNameSortOrderTable

  • Table - 必需。 要排序的表。

  • ColumnName - 必需。 要排序的列名称(以字符串形式)。

  • SortOrderTable - 必需。 作为排序依据的单列表值。

    备注

    对于列名称带空格的 SharePoint 和 Excel 数据源,请将每个空格指定为 "_x0020_"。 例如,将 "Column Name" 指定为 "Column_x0020_Name"

示例

在下面的示例中,我们将使用 IceCream数据源,其中包含下表中的数据:

IceCream 示例。

公式 描述 结果
Sort(冰,味道)

SortByColumns(IceCream, “味道” )
Flavor 列对 IceCream 进行排序。 由于 Flavor 列包含字符串,因此该表按字母顺序进行排序。 默认情况下,排序顺序为升序。 按字母顺序排序。
Sort(IceCream,数量)

SortByColumns(IceCream, “Quantity” )
Quantity 列对 IceCream 进行排序。 由于 Quantity 列包含数字,因此该表按数值大小进行排序。 默认情况下,排序顺序为升序。 按数字排序。
Sort(IceCream,Quantity,SortOrder.Descending)

SortByColumns(IceCream, “Quantity”, SortOrder.Descending)
Quantity 列对 IceCream 进行排序。 由于 Quantity 列包含数字,因此按数值大小进行排序。 排序顺序已指定为降序。 按数字以降序顺序排序。
Sort(IceCream,Quantity + OnOrder) 分别对每条记录按 QuantityOnOrder 列的总和对 IceCream 进行排序。 由于总和是数字,因此该表按数值大小进行排序。 默认情况下,排序顺序为升序。 由于我们按公式而不是原始列值进行排序,因此没有等效用法 SortByColumns 按数字以升序顺序排序。
Sort( SortIceCream,OnOrder),数量)

SortByColumns(IceCream、“OnOrder”、SortOrder.Ascending、“Quantity”、SortOrder.Ascending)
先按 OnOrder 列对 IceCream 进行排序,然后再按 Quantity 列进行排序。 请注意,在按 OnOrder 进行第一次排序时,“Pistachio”的排序高于“Vanilla”,然后再按 Quantity 进行排序时,它们一同移到相应的位置上。 使用 Vanilla 上面的 Pistachio 排序。
SortByColumns(IceCream, “Flavor”, [ “Pistachio”, “草莓” ] ) 根据包含“Pistachio”和“Strawberry”的单列表,按 Flavor 列对 IceCream 进行排序。 结果中先显示包含“Pistachio”这种 Flavor 的记录,然后显示包含“Strawberry”的记录。 Flavor 列中不匹配的值(如“Vanilla”)将显示在匹配项的后面。 使用 Strawberry 上面的 Pistachio 排序。

分步操作

若要自行运行这些示例,请将 IceCream 数据源创建为集合

  1. 添加一个按钮,然后将其 OnSelect 属性设置为以下公式:
    ClearCollect(冰淇淋, { 口味:巧克力,数量:100,OnOrder:150 }, { 口味:香草,数量:200,OnOrder:20 }, { 口味:草莓“,数量:300,OnOrder:0 }, { 口味:薄荷巧克力”,数量:60,OnOrder:100 }, { 口味:开心果,数量:200,OnOrder:10 } )
  2. 预览应用,选择按钮,然后按 Esc 返回到默认工作区。
  3. 选择文件菜单上的集合,调出刚刚创建的集合,然后按 Esc 返回到默认工作区。

Sort

  1. 添加另一个按钮,然后将其 OnSelect 属性设置为以下公式:
    ClearCollect(SortByFlavor, Sort(IceCream,味道)

    上一公式创建第二个集合(名为 SortByFlavor),其中包含与冰淇淋相同的数据。 不过,新集合中包含的是按 Flavor 列进行字母顺序升序排序的数据。

  2. 按 F5,选择两个新按钮,然后按 Esc。

  3. 选择文件菜单上的集合,调出这两个集合,然后按 Esc 返回到默认工作区。

  4. 重复最后三个步骤,但更改要创建的集合的名称,并将 Sort 公式替换为本部分 Sort前面使用的示例表中的一个不同的公式。

SortByColumns

  1. 添加另一个按钮,然后将其 OnSelect 属性设置为以下公式:
    ClearCollect(SortByQuantity、(IceCream、 SortByColumns“Quantity”、SortOrder.Ascending、“Flavor”、SortOrder.Descending)

    上一公式创建第三个集合(名为 SortByQuantity),其中包含与冰淇淋相同的数据。 不过,新集合包含的是按 Quantity 列进行数值大小升序排序,然后按 Flavor 列进行降序排序的数据。

  2. 按 F5,选择两个新按钮,然后按 Esc。

  3. 选择文件菜单上的集合,调出所有三个集合,然后按 Esc 返回到默认工作区。

  4. 重复最后三个步骤,但更改要创建的集合的名称,并将 SortByColumns 公式替换为本部分 SortByColumns前面使用的示例表中的一个不同的公式。