GroupBy 和 Ungroup 函式
適用於: 畫布應用 模型驅動應用 Power Pages
Description
GroupBy 函式會傳回資料表,當中包含根據一個或多個 欄位 中的值群組在一起的記錄。 相同群組中的記錄會放入單一記錄,並新增含有其餘欄位之巢狀資料表的欄位。
Ungroup 函式會反轉 GroupBy 流程。 此函式會傳回資料表,將任何群組在一起的記錄分成個別的記錄。
您可以使用 GroupBy 來群組記錄、修改它所傳回之資料表,然後使用 Ungroup 取消群組已修改資料表中的記錄。 例如,您可以依照這種方法移除一組記錄︰
- 使用 GroupBy 函式。
- 使用 Filter 函式以移除整個記錄的群組。
- 使用 Ungroup 函式。
您也可以根據群組彙總結果︰
- 使用 GroupBy 函式。
- 搭配使用 AddColumns 函式與 Sum,Average 和其他彙總函式來新增新的欄位,也就是群組資料表的彙總。
- 使用 DropColumns 函式來卸除資料表群組。
Ungroup 嘗試保留饋 送到 GroupBy 的記錄的原始順序。 並非永遠可能 (例如,如果原始資料表包含 空白 記錄)。
資料表是 Power Apps 中的值,如同字串或數字。 您可以將資料表指定為函式的引數,而函式可傳回資料表。 GroupBy 和 Ungroup 不會修改表;而是將表作為參數並返回不同的表。 請參閱 使用資料表 以取得詳細資料。
注意
在 Power Apps 版本 3.24042 之前,欄名稱是透過使用雙引號的文字字串指定的,如果連接到資料來源,它們也需要是邏輯名稱。 例如,使用雙引號的邏輯名稱 "cr43e_name",而不是不含引號的顯示名稱 Name。 對於包含帶有空格的欄名稱的 SharePoint 和 Excel 資料來源,每個空格均以「_x0020_」指定,例如「欄名稱」為「Column_x0020_Name」。 在此版本之後,所有應用程式都會自動更新為本文中所述的新語法。
語法
GroupBy( Table,ColumnName1 [, ColumnName2,... ], GroupColumnName)
- Table - 必需。 要群組的資料表。
- ColumnNames - 必需。 用來群組記錄之 資料表 中的欄位名稱。 這些欄位在結果資料表中會成為欄位。
- GroupColumnName - 必需。 不在 ColumnName(s) 的記錄資料儲存體的欄位名稱。
取消分組( Table,GroupColumnName )
- Table - 必需。 要取消群組的資料表。
- GroupColumnName - 必需。 包含使用 GroupBy 函式設定的記錄資料之欄位。
範例
建立集合
ClearCollect( CityPopulations,
{ City: "London", Country: "United Kingdom", Population: 8615000},
{ City: "Berlin", Country: "Germany", Population: 3562000},
{ City: "Madrid", Country: "Spain", Population: 3165000},
{ City: "Rome", Country: "Italy", Population: 2874000},
{ City: "Paris", Country: "France", Population: 2273000},
{ City: "Hamburg", Country: "Germany", Population: 1760000},
{ City: "Barcelona", Country: "Spain", Population: 1602000},
{ City: "Munich", Country: "Germany", Population: 1494000},
{ City: "Milan", Country: "Italy", Population: 1344000}
)
按住 Alt 鍵並選取 Original 按鈕。
您剛剛建立 集合物件,命名為 CityPopulations,其中包含此資料︰
若要顯示此集合,請選取 File 功能表上的 Collections,然後選取 CityPopulations 集合物件。 隨即顯示集合中的前五筆記錄︰
群組記錄
新增另一個按鈕,並將其 Text 屬性設為 Group。
將此按鈕的 OnSelect 屬性設為下列公式:
ClearCollect (CitiesByCountry,GroupBy(CityPopulations,Country,Cities))
按住 Alt 鍵並選取 Group 按鈕。
您剛剛建立了集合,命名為 CitiesByCountry,其中前一個集合的記錄會由 Country 欄位群組。
若要顯示此集合中的前五筆記錄,請選取 File 功能表上的 Collections。
若要顯示國家/地區的城市人口,在 Cities 欄位中選取該國家/地區 (例如,德國) 的資料表圖示:
篩選和取消群組記錄
新增另一個按鈕,並設定其 Text 屬性,讓按鈕顯示 Filter。
將此按鈕的 OnSelect 屬性設為下列公式:
ClearCollect (CitiesByCountryFiltered,Filter(CitiesByCountry,“e”in Country))
按住 Alt 鍵時,選取您新增的按鈕。
您剛剛建立了第三個集合,命名為 CitiesByCountryFiltered,只包含名稱中具有 "e" 的國家/地區 (也就不是西班牙或義大利)。
再新增一個按鈕,並設定其 Text 屬性,讓按鈕顯示 Ungroup。
將此按鈕的 OnSelect 屬性設為下列公式:
ClearCollect (CityPopulationsUngrouped,Ungroup(CitiesByCountryFiltered,城市))
這可能會導致︰
彙總結果
我們可以對分組表執行的另一個動作是編譯結果。 在此範例中,我們會加總每個國家/地區中主要城市的人口。
新增另一個按鈕,並設定其 Text 屬性,讓按鈕顯示 "Sum"。
將 "Sum" 按鈕的 OnSelect 屬性設為下列公式:
ClearCollect (CityPopulationsSum,AddColumns(CitiesByCountry,'城市人口總和',Sum(Cities,Population)))
這可能會導致︰
AddColumns 從基本 CitiesByCountry 集合開始,並添加新列 Sum of City Populations 。 此欄位的值是根據公式 Sum( Cities, Population ) 逐列計算。 AddColumns 為每行提供 Cities 列 (表) 的值 , 而 Sum 則為此子表的每一行的 Population 求和 。
既然我們擁有我們想要的總和,我們可以使用 DropColumns 來移除子資料表。
新增另一個按鈕,並設定其 Text 屬性,讓按鈕顯示 SumOnly。
將 "SumOnly" 按鈕的 OnSelect 屬性設定為下列公式:
ClearCollect (CityPopulationsSumOnly,DropColumns(CityPopulationsSum,城市)))
這可能會導致︰
請注意,我們不需要取消此資料表群組。