GROUPBY

适用于:计算列计算表度量值视觉计算

备注

不建议将此函数用于 视觉计算,因为它可能会返回毫无意义的结果。

GROUPBY 函数类似于 SUMMARIZE 函数。 但是,GROUPBY 不会为它添加的任何扩展列执行隐式 CALCULATE。 GROUPBY 允许新函数(CURRENTGROUP)在它添加的扩展列中的聚合函数内使用。 GROUPBY 用于在单个表扫描中执行多个聚合。

语法

DAX
GROUPBY (<table> [, <groupBy_columnName> [, <groupBy_columnName> [, …]]] [, <name>, <expression> [, <name>, <expression> [, …]]])

参数

术语 定义
table 返回数据表的任何 DAX 表达式。
groupBy_columnName 表中现有列(或相关表)中要分组的数据的名称。 此参数不能是表达式。
name 分配给要添加到 GroupBy 列列表中的新列的名称,括在双引号中。
expression X 聚合函数之一,第一个参数为 CURRENTGROUP()。 有关支持的 X 聚合函数的完整列表,请参阅下面的“使用 CURRENTGROUP”部分。

返回值

具有groupBy_columnName参数的选定列和名称参数指定的扩展列的表。

言论

  • GROUPBY 函数执行以下操作:

    1. 从指定的表(以及“to-one”方向的所有相关表)开始。

    2. 使用所有 GroupBy 列创建分组(步骤 1 中表需要存在这些列)。

    3. 每个组是结果中的一行,但表示原始表中的一组行。

    4. 对于每个组,评估要添加的扩展列。 与 SUMMARIZE 函数不同,不会执行隐式 CALCULATE,并且不会将组放入筛选器上下文中。

  • 定义名称的每个列必须具有相应的表达式;否则,将返回错误。 第一个参数名称定义结果中列的名称。 第二个参数表达式定义为获取该列中每一行的值而执行的计算。

  • groupBy_columnName 必须位于表或相关表中。

  • 每个名称都必须用双引号引起来。

  • 该函数按一个或多个groupBy_columnName列的值将所选行集分组到一组摘要行中。 为每个组返回一行。

  • GROUPBY 主要用于对 DAX 表表达式的中间结果执行聚合。 若要在模型中对物理表进行高效聚合,请考虑使用 SUMMARIZECOLUMNSSUMMARIZE 函数。

  • 在计算列或行级别安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。

使用 CURRENTGROUP

CURRENTGROUP 只能在定义 GROUPBY 函数中的扩展列的表达式中使用。 实际上,CURRENTGROUP 从属于 GROUPBY 结果的当前行的 GROUPBY 表参数中返回一组行。 CURRENTGROUP 函数不采用任何参数,并且仅支持以下聚合函数之一的第一个参数:AVERAGEXCOUNTAXCOUNTX GEOMEANXMAXXMINXPRODUCTXSTDEVX。SSTDEVX。PSUMXVARX。SVARX。P

以下示例首先使用 SUMMARIZECOLUMNS 函数计算按国家/地区和产品类别分组的总销售额。 然后,它使用 GROUPBY 函数扫描第一步的中间结果,以查找产品类别中每个国家/地区的最大销售额。

DAX
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])  
)  

SUMMARIZE 函数
SUMMARIZECOLUMNS 函数