Sort 和 SortByColumns 函数

适用于:画布应用桌面流模型驱动应用 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 将仅拉取一小部分记录以在本地进行处理。 筛选和排序函数将对少数一部分记录进行操作。 中提供的内容可能不是整个过程,这可能会使用户感到困惑。

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

语法

Sort( Table, Formula [, SortOrder ] )

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

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

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

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

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

    备注

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

SortByColumns( Table, ColumnName, SortOrderTable )

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

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

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

    备注

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

示例

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

IceCream 示例。

公式 描述 结果
Sort( IceCream, Flavor )

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

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( Sort( IceCream, OnOrder ), Quantity )

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

分步操作

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

  1. 添加一个按钮,然后将其 OnSelect 属性设置为以下公式:
    ClearCollect( IceCream, { Flavor: "Chocolate", Quantity: 100, OnOrder: 150 }, { Flavor: "Vanilla", Quantity: 200, OnOrder: 20 }, { Flavor: "Strawberry", Quantity: 300, OnOrder: 0 }, { Flavor: "Mint Chocolate", Quantity: 60, OnOrder: 100 }, { Flavor: "Pistachio", Quantity: 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, "Quantity", SortOrder.Ascending, "Flavor", SortOrder.Descending ) )

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

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

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

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