DAX:GROUPBY 嵌套聚合
原文:Nested grouping using GROUPBY vs SUMMARIZE
GROUPBY函數的作用是根據輸入的表進行數據聚合,輸入的表可以是表表達式,也就是說,GRUOPBY的參數可以是一個動態查詢返回的表,也就是說GROUPBY函數可以用于嵌套聚合的情況。但是,GROUPBY 不會對其添加的任何擴展列執行隱式 CALCULATE,也不允許在GROUPBY函數中執行CALCULATE函數。
GROUPBY 函數在其添加的擴展列中使用 CURRENTGROUP,表達式當前的分組,這使得GROUPBY 通常用于在單個表掃描中執行多個聚合。
GROUPBY (<table> [, <groupBy_columnName> [, <groupBy_columnName> [, …]]] [, <name>, <expression> [, <name>, <expression> [, …]]])
GROUPBY函數引入一個新的函數CURRENTGROUP,且它只能用于在 GROUPBY 函數中定義擴展列的表達式中。實際上,CURRENTGROUP 從 GROUPBY 的表參數中返回一組屬于 GROUPBY 結果的當前分組。
舉個例子:
[Average Price]是內層GROUPBY函數中定義的一個Measure,外層的GROUPBY函數直接引用,并使用CURRENTGROUP()函數把Measure的計算限制在當前的分組。
EVALUATEGROUPBY ( GROUPBY ( Product, 'Product Category'[Category], 'Product Subcategory'[Subcategory], "Average Price", AVERAGEX ( CURRENTGROUP() , Product[Unit Price] ) ), 'Product Category'[Category], "Max SubCat Avg Price", MAXX ( CURRENTGROUP (), [Average Price] ))GROUPBY函數主要用于嵌套分組操作,可以在最里面的分組(group)中使用 SUMMARIZE,但必須使用 GROUPBY 才能訪問內層分組(inner group)中定義的計算列。
有兩點需要注意:
- 不能在GROUPBY函數中使用CALCULATE函數。 這就以為著,只能使用當前分組的數據進行計算,不能引用已經定義過的Measure。
- 如果某一行,當參數<expression>計算的結果為空時,GROUPBY 輸出的結果會自動刪除改行。
GROUPBY 函數運行的原理:
- 第一步:從指定的表(以及關系中“一”這一端的所有相關表)開始。
- 第二步:使用所有 GroupBy_ColumnName 列(這些列必須存在于步驟 #1 中的表中)創建分組。groupBy_columnName 必須位于表中或相關表中。
- 第三步:每個組在結果中占一行,但代表原始表中的一組行。
- 第四步:對于每個組,計算要添加的擴展列。與 SUMMARIZE 函數不同,GROUPBY 函數不會執行隱式 CALCULATE,并且不會將組放入篩選上下文中。
該函數根據一個或多個 groupBy_columnName 列的值將選定的一組行分組為一組摘要行,每個組返回一行。
GROUPBY 主要用于對 DAX 表表達式的中間結果執行聚合。為了對模型中的物理表進行高效聚合,請考慮使用 SUMMARIZECOLUMNS 或 SUMMARIZE 函數。
參考穩定:

浙公網安備 33010602011771號