GROUPBY

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

备注

不建议在视觉对象计算中使用此函数,因为它可能会返回无意义的结果。

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

语法

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

parameters

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

返回值

一个表,其中包含 groupBy_columnName 参数的选定列和由 name 参数指定的扩展列。

备注

  • GROUPBY 函数执行以下操作:

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

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

    3. 每个组在结果中占一行,但它表示原始表中的一系列行。

    4. 对于每个组,计算要添加的扩展列。 与 SUMMARIZE 函数不同,它不会执行隐含 CALCULATE,并且该组不会置于筛选器上下文中。

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

  • groupBy_columnName 必须在表或相关表中。

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

  • 函数根据一个或多个 groupBy_columnName 列的值将一组选定的行归组为一组摘要行。 为每个组返回一行。

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

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

使用 CURRENTGROUP

CURRENTGROUP 只能在定义 GROUPBY 函数内的扩展列的表达式中使用。 实际上,CURRENTGROUP 从 GROUPBY 的“table”参数中返回一组行,该组行属于 GROUPBY 结果的当前行。 CURRENTGROUP 函数不接受任何参数,并且仅作为以下聚合函数之一的第一个参数时受支持:AVERAGEXCOUNTAXCOUNTXGEOMEANXMAXXMINXPRODUCTXSTDEVX.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 function