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" )。
可以将 SortByColumns 与 Drop down 或 List box 控件结合使用,以便用户能够选择作为排序依据的列。
除了进行升序或降序排序之外,SortByColumns 还可以根据单列表值进行排序。 例如,可以提供 [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ] 作为排序顺序,从而根据星期几的名称对记录进行排序。 所有包含 Monday" 的记录会先显示,随后显示包含 Tuesday 的记录,依此类推。 与排序顺序表不匹配的记录被置于列表末尾显示。
表格 是一个值, Power Apps就像字符串或数字一样。 可以向函数传递表,也可以从函数返回表。 Sort 和 SortByColumn 不会修改表;而是将表作为参数,并返回已排序的新表。 请参阅使用表,了解更多详细信息。
代理
如果可能,Power Apps 会将筛选和排序操作委派给数据源,并根据需要在结果中翻页。 例如,当您启动一个应用程序来显示填充了数据的库控件时,最初只会将第一组记录导入到设备中。 当用户滚动时,会将数据源中的其他数据转入下页。 这样,应用程序的启动时间更短,并且可以访问非常大的数据集。
但是,可能并非总是可以进行委派。 各数据源对委派支持的函数和运算符可能有所不同。 如果无法进行完全公式委派,则创作环境将用一条警告来标记无法委派的部分。 如果可能,请考虑更改公式以避免出现无法委派的函数和运算符。 委派列表详细说明了可以委派的数据源和操作。
如果无法进行委派,则 Power Apps 将仅拉取一小部分记录以在本地进行处理。 筛选和排序函数将对少数一部分记录进行操作。 库中提供的内容可能不是整个过程,这可能会使用户感到困惑。
有关详细信息,请参阅委派概述。
语法
排序(表,公式[,排序顺序 ])
- Table - 必需。 要排序的表。
- 公式 - 必需。 系统会针对表的每条记录计算此公式,然后根据结果对表进行排序。 可以引用表中的列。
- SortOrder - 可选。 指定 SortOrder.Descending 可对表进行降序排序。 SortOrder.Ascending 是默认值。
SortByColumns(表,ColumnName1[, SortOrder1,ColumnName2,SortOrder2 ,... ])
Table - 必需。 要排序的表。
ColumnNames - 必需。 要排序的列名称(以字符串形式)。
SortOrders - 可选。 SortOrder.Ascending 或 SortOrder.Descending。 SortOrder.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,风味) SortByColumns(IceCream,“风味”) |
按 Flavor 列对 IceCream 进行排序。 由于 Flavor 列包含字符串,因此该表按字母顺序进行排序。 默认情况下,排序顺序为升序。 | |
排序(IceCream,数量) SortByColumns(IceCream,“数量”) |
按 Quantity 列对 IceCream 进行排序。 由于 Quantity 列包含数字,因此该表按数值大小进行排序。 默认情况下,排序顺序为升序。 | |
Sort(IceCream,数量,SortOrder.降序) SortByColumns(IceCream,“数量”,SortOrder.Descending) |
按 Quantity 列对 IceCream 进行排序。 由于 Quantity 列包含数字,因此按数值大小进行排序。 排序顺序已指定为降序。 | |
排序(IceCream,数量 + OnOrder) | 分别对每条记录按 Quantity 和 OnOrder 列的总和对 IceCream 进行排序。 由于总和是数字,因此该表按数值大小进行排序。 默认情况下,排序顺序为升序。 由于我们按公式(而不是原始列值)进行排序,因此没有对等的 SortByColumns 排序。 | |
sort(sort(IceCream,OnOrder),数量) SortByColumns(IceCream,“OnOrder”,SortOrder.Ascending,“数量”,SortOrder.Ascending) |
先按 OnOrder 列对 IceCream 进行排序,然后再按 Quantity 列进行排序。 请注意,在按 OnOrder 进行第一次排序时,“Pistachio”的排序高于“Vanilla”,然后再按 Quantity 进行排序时,它们一同移到相应的位置上。 | |
SortByColumns(IceCream,“风味”,[“开心果”,“草莓”]) | 根据包含“Pistachio”和“Strawberry”的单列表,按 Flavor 列对 IceCream 进行排序。 结果中先显示包含“Pistachio”这种 Flavor 的记录,然后显示包含“Strawberry”的记录。 Flavor 列中不匹配的值(如“Vanilla”)将显示在匹配项的后面。 |
分步操作
若要自行运行这些示例,请将 IceCream 数据源创建为集合:
- 添加一个按钮,然后将其 OnSelect 属性设置为以下公式:
ClearCollect(冰淇淋, { 口味:巧克力,数量:100,OnOrder:150 }, { 口味:香草,数量:200,OnOrder:20 }, { 口味:草莓“,数量:300,OnOrder:0 }, { 口味:薄荷巧克力”,数量:60,OnOrder:100 }, { 口味:开心果,数量:200,OnOrder:10 } ) - 预览应用,选择按钮,然后按 Esc 返回到默认工作区。
- 选择文件菜单上的集合,调出刚刚创建的集合,然后按 Esc 返回到默认工作区。
Sort
添加另一个按钮,然后将其 OnSelect 属性设置为以下公式:
ClearCollect(SortByFlavor,Sort(IceCream,Flavor))上一公式创建第二个集合(名为 SortByFlavor),其中包含与冰淇淋相同的数据。 不过,新集合中包含的是按 Flavor 列进行字母顺序升序排序的数据。
按 F5,选择两个新按钮,然后按 Esc。
选择文件菜单上的集合,调出这两个集合,然后按 Esc 返回到默认工作区。
重复最后三步,不同之处在于更改要创建的集合的名称,然后将 Sort 公式替换为本部分前面示例表中的另一 Sort 公式。
SortByColumns
添加另一个按钮,然后将其 OnSelect 属性设置为以下公式:
ClearCollect(SortByQuantity,SortByColumns(IceCream,“数量”,SortOrder.Ascending,“口味”,SortOrder.Descending))上一公式创建第三个集合(名为 SortByQuantity),其中包含与冰淇淋相同的数据。 不过,新集合包含的是按 Quantity 列进行数值大小升序排序,然后按 Flavor 列进行降序排序的数据。
按 F5,选择两个新按钮,然后按 Esc。
选择文件菜单上的集合,调出所有三个集合,然后按 Esc 返回到默认工作区。
重复最后三步,不同之处在于更改要创建的集合的名称,然后将 SortByColumns 公式替换为本部分前面示例表中的另一 SortByColumns 公式。