Sort 和 SortByColumns 函数

适用于: 画布应用 桌面流 模型驱动应用 Power Pages Power Platform CLI

进行排序。

备注

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

描述

Sort 函数根据公式对表进行排序。

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

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

若要先按一列进行排序,然后再按另一列进行排序,请在 Sort 公式中嵌入另一个此公式。 例如,可以使用以下公式先按 LastName 列对 Contacts 表进行排序,然后再按 FirstName 列进行排序:Sort( Sort( Contacts, LastName ), FirstName )

还可以使用 SortByColumns 函数根据一列或多列对表进行排序。

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

可以将 SortByColumnsDrop downList box 控件结合使用,以便用户能够选择作为排序依据的列。

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

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

代理

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

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

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

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

语法

排序(表,公式[,排序顺序 ])

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

SortByColumns(表,ColumnName1[, SortOrder1,ColumnName2,SortOrder2 ,... ])

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

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

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

    备注

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

SortByColumns列名称SortOrderTable

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

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

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

    备注

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

示例

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

IceCream 示例。

公式 描述 结果
排序(IceCream,风味)

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

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

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

SortByColumns(IceCream,“OnOrder”,SortOrder.Ascending,“数量”,SortOrder.Ascending)
先按 OnOrder 列对 IceCream 进行排序,然后再按 Quantity 列进行排序。 请注意,在按 OnOrder 进行第一次排序时,“Pistachio”的排序高于“Vanilla”,然后再按 Quantity 进行排序时,它们一同移到相应的位置上。 使用 Vanilla 上面的 Pistachio 排序。
SortByColumns(IceCream,“风味”,[“开心果”,“草莓”]) 根据包含“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,Flavor))

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

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

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

  4. 重复最后三步,不同之处在于更改要创建的集合的名称,然后将 Sort 公式替换为本部分前面示例表中的另一 Sort 公式。

SortByColumns

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

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

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

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

  4. 重复最后三步,不同之处在于更改要创建的集合的名称,然后将 SortByColumns 公式替换为本部分前面示例表中的另一 SortByColumns 公式。