Sort 與 SortByColumns 函數

適用於: 畫布應用程式 桌面流程 模型導向應用程式 Power Platform CLI

排序 資料表

注意

PAC CLI pac power-fx 命令不支援 SortByColumns 函式。

Description

Sort 函數會根據公式排序資料表。

系統會針對資料表的 記錄 評估公式,並使用結果來排序資料表。 公式必須產生數字、字串或布林值,但不會產生資料表或記錄。

目前處理中的記錄其各個欄位可供您在公式內使用。 使用 ThisRecord 運算子,,或只需依名稱參照欄位,就像任何其他的值一樣。 As 運算子也可以用來命名所處理的記錄,這有助於讓您的公式更易於了解並讓嵌套記錄可以存取。 如需更多資訊,請參閱下列範例以及 處理記錄範圍

若要先依欄位排序,再依另一欄位排序,請在另一欄位中內嵌 Sort 公式。 例如,您可以使用此公式來排序 Contacts 資料表,方式為先依 LastName 欄位排序,再依 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

    Note

    如果 SharePoint 和 Excel 資料來源包含有空格的欄位名稱,請將每個空格指定為 "_x0020_"。 例如,將 "Column Name" 指定為 "Column_x0020_Name"

SortByColumns( Table, ColumnName, SortOrderTable )

  • Table – 必要。 要排序的資料表。

  • ColumnName - 必要項目。 排序依據的欄位名稱,作為字串。

  • SortOrderTable - 必要項目。 排序所依據包含值的單一欄位資料表。

    Note

    如果 SharePoint 和 Excel 資料來源包含有空格的欄位名稱,請將每個空格指定為 "_x0020_"。 例如,將 "Column Name" 指定為 "Column_x0020_Name"

範例

在接下來的幾個範例中,我們將使用 IceCream資料來源,其中包含此資料表中的資料:

IceCream 範例。

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

SortByColumns( IceCream, "Flavor" )
IceCream 依其 Flavor 欄位排序。 Flavor 欄位包含字串,因此資料表會依字母順序排序。 根據預設,排序順序為遞增。 依字母順序排序。
Sort( IceCream, Quantity )

SortByColumns( IceCream, "Quantity" )
IceCream 依其 Quantity 欄位排序。 Quantity 欄位包含數字,因此資料表會依數字大小排序。 根據預設,排序順序為遞增。 依數值排序。
Sort( IceCream, Quantity, SortOrder.Descending )

SortByColumns( IceCream, "Quantity", SortOrder.Descending )
IceCream 依其 Quantity 欄位排序。 Quantity 欄位包含數字,因此會依數字大小進行排序。 已指定排序順序為遞減。 依數值和遞減排序。
Sort( IceCream, Quantity + OnOrder ) IceCream 分別依據其每筆記錄的 QuantityOnOrder 欄位總和排序。 總和為數字,因此資料表會依照數字大小排序。 根據預設,排序順序為遞增。 由於我們是依公式排序,而不是原始欄位值,因此不等同使用 SortByColumns 依數值和遞增排序。
Sort( Sort( IceCream, OnOrder ), Quantity )

SortByColumns( IceCream, "OnOrder", SortOrder.Ascending, "Quantity", SortOrder.Ascending )
IceCream 先依其 OnOrder 欄位,再依其 Quantity 欄位排序。 請注意,"Pistachio" 在第一次排序時會根據 OnOrder 排在 "Vanilla" 上方,然後兩者再一起根據 Quantity 移至其適當的位置。 Pistachio 排序高於 Vanilla。
SortByColumns( IceCream, "Flavor", [ "Pistachio", "Strawberry" ] ) IceCream 根據包含 "Pistachio" 與 "Strawberry" 的單一欄位資料表來依 Flavor 欄位排序。 Flavor 為 "Pistachio" 的記錄會在結果中第一個出現,接下來是包含 "Strawberry" 的記錄。 至於 Flavor 欄位中不符合的值,例如 "Vanilla",會顯示在符合的項目之後。 Pistachio 排序高於 Strawberry。

按步就班

您若要自行執行這些範例,請將 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 返回預設工作區。

排序

  1. 新增另一個按鈕,並將其 OnSelect 屬性設為以下公式:
    ClearCollect( SortByFlavor, Sort( IceCream, Flavor ) )

    上述的公式會建立第二個集合,名為 SortByFlavor,其中包含的資料與 Ice Cream 相同。 不過,新集合中的資料會依據 Flavor 欄位的字母順序遞增排序。

  2. 按下 F5、選取新的按鈕,然後按下 Esc。

  3. 選取 File 功能表中的 Collections,以顯示這兩個集合,然後按下 Esc 返回預設工作區。

  4. 重複最後三個步驟,但變更您想要建立的集合名稱,然後使用本節中稍早所述範例資料表中其他使用 Sort 的公式來取代 Sort 公式。

SortByColumns

  1. 新增另一個按鈕,並將其 OnSelect 屬性設為以下公式:
    ClearCollect( SortByQuantity, SortByColumns( IceCream, "Quantity", SortOrder.Ascending, "Flavor", SortOrder.Descending ) )

    上述的公式會建立第三個集合,名為 SortByQuantity,其中包含的資料與 Ice Cream 相同。 不過,新集合中的資料會依據 Quantity 的數字大小排序,再依據 Flavor 欄位以遞減順序排序。

  2. 按下 F5、選取新的按鈕,然後按下 Esc。

  3. 選取 檔案 功能表中的 集合,以顯示這三個集合,然後按下 Esc 返回預設工作區。

  4. 重複最後三個步驟,但變更您想要建立的集合名稱,然後使用本節中稍早所述範例資料表中其他使用 SortByColumns 的公式來取代 SortByColumns 公式。