GROUPBY
注意
不建議將此函式用於 視覺計算 ,因為它可能會傳回毫無意義的結果。
GROUPBY 函式類似於 SUMMARIZE 函式。 不過,GROUPBY 不會對其所新增的任何擴充資料行執行隱含 CALCULATE。 GROUPBY 允許在其所新增擴充資料行中彙總函式內部使用新的函式 CURRENTGROUP。 GROUPBY 是用來在單一資料表掃描中執行多個彙總。
語法
GROUPBY (<table> [, <groupBy_columnName> [, <groupBy_columnName> [, …]]] [, <name>, <expression> [, <name>, <expression> [, …]]])
參數
詞彙 | [定義] |
---|---|
table | 傳回資料表的所有 DAX 運算式。 |
groupBy_columnName | 資料表 (或相關資料表) 中現有資料行的名稱,資料會依此名稱分組。 此參數不能是運算式。 |
NAME | 針對 GroupBy 資料行清單中所新增資料行指定的名稱,以雙引號括住。 |
expression | 其中一個 X 彙總函式具有要進行 CURRENTGROUP() 的第一個引數。 如需支援 X 彙總函式的完整清單,請參閱以下的 With CURRENTGROUP 區段。 |
傳回值
資料表,其中包含針對 groupBy_columnName 引數選取的資料行,以及 name 引數所指定的延伸資料行。
備註
GROUPBY 函式會執行下列作業:
從所指定資料表 (以及方向「對一」的所有相關資料表) 開始。
使用所有 GroupBy 資料行來建立群組 (這些資料行必須存在於步驟 #1 的資料表中)。
在結果中,每個群組會是一個資料列,但代表原始資料表中的一組資料列。
針對每個群組評估所新增的擴充資料行。 不同於 SUMMARIZE 函式,其不會執行隱含 CALCULATE,且不會將群組放入篩選內容。
您定義名稱的每個資料行都必須有相對應運算式;否則會傳回錯誤。 第一個引數 name 會定義結果中的資料行名稱。 第二個引數 expression 會定義為了取得該資料行中每個資料列值而執行的計算。
groupBy_columnName 必須在資料表或相關資料表中。
每個名稱都必須以雙引號括住。
此函式會依一或多個 groupBy_columnName 資料行的值,將一組選取的資料列分組為一組摘要資料列。 每個群組會傳回一個資料列。
GROUPBY 主要是用來對 DAX 資料表運算式的中繼結果執行彙總。 如果要對模型中的實體資料表進行有效率的彙總,請考量使用 SUMMARIZECOLUMNS 或 SUMMARIZE 函式。
在計算結果欄或資料列層級安全性 (RLS) 規則中使用時,不支援在 DirectQuery 模式中使用此函式。
使用 CURRENTGROUP
CURRENTGROUP 只能用於定義 GROUPBY 函式內延伸資料行的運算式。 實際上,CURRENTGROUP 會從 GROUPBY 的資料表引數,傳回屬於 GROUPBY 結果目前資料列的一組資料列。 CURRENTGROUP 函式不接受引數,且僅支援作為下列其中一個彙總函式的第一個引數:AVERAGEX、COUNTAX、COUNTX、GEOMEANX、MAXX、MINX、PRODUCTX、STDEVX.S、STDEVX.P、SUMX、VARX.S、VARX.P。
範例
下列範例會先使用 SUMMARIZECOLUMNS 函式,計算實體資料表上依國家/地區和產品類別分組的總銷售額。 接著,會使用 GROUPBY 函式來掃描第一個步驟的中繼結果,以尋找每個國家/地區中產品類別之間的最大銷售額。
DEFINE
VAR SalesByCountryAndCategory =
SUMMARIZECOLUMNS(
Geography[Country],
Product[Category],
"Total Sales", SUMX(Sales, Sales[Price] * Sales[Qty])
)
EVALUATE
GROUPBY(
SalesByCountryAndCategory,
Geography[Country],
"Max Sales", MAXX(CURRENTGROUP(), [Total Sales])
)