GROUPBY
注意
不建议在视觉对象计算中使用此函数,因为它可能会返回无意义的结果。
GROUPBY 函数与 SUMMARIZE 函数类似。 但是,GROUPBY 不会对它添加的任何扩展列执行隐式计算。 GROUPBY 允许在其添加的扩展列中的聚合函数内使用新函数 CURRENTGROUP。 GROUPBY 用于在单个表扫描中执行多个聚合。
语法
GROUPBY (<table> [, <groupBy_columnName> [, <groupBy_columnName> [, …]]] [, <name>, <expression> [, <name>, <expression> [, …]]])
parameters
术语 | 定义 |
---|---|
表 | 返回数据表的任何 DAX 表达式。 |
groupBy_columnName | 表中(或相关表中)的某个现有列的名称,数据是按该列进行分组。 此参数不能是表达式。 |
name | 为要添加到 GroupBy 列列表中的新列提供的名称,用双引号括起来。 |
表达式 | X 聚合函数之一,其第一个参数为 CURRENTGROUP()。 有关受支持的 X 聚合函数的完整列表,请参阅下面的“使用 CURRENTGROUP”部分。 |
返回值
一个表,其中包含 groupBy_columnName 参数的选定列和由 name 参数指定的扩展列。
备注
GROUPBY 函数执行以下操作:
从指定的表(以及“to-one”方向上的所有相关表)开始。
使用所有 GroupBy 列(需在步骤 #1 的表中存在)创建分组。
每个组在结果中占一行,但它表示原始表中的一系列行。
对于每个组,计算要添加的扩展列。 与 SUMMARIZE 函数不同,它不会执行隐含 CALCULATE,并且该组不会置于筛选器上下文中。
为其定义名称的每个列都必须具有一个对应的表达式;否则,将返回错误。 第一个参数 name 定义结果中列的名称。 第二个参数 expression 定义为获取该列中每一行的值进行的计算。
groupBy_columnName 必须在表或相关表中。
每个名称都必须用双引号引起来。
函数根据一个或多个 groupBy_columnName 列的值将一组选定的行归组为一组摘要行。 为每个组返回一行。
GROUPBY 主要用于对来自 DAX 表表达式的中间结果执行聚合。 要对模型中的物理表进行高效聚合,请考虑使用 SUMMARIZECOLUMNS 或 SUMMARIZE 函数。
在已计算的列或行级安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。
使用 CURRENTGROUP
CURRENTGROUP 只能在定义 GROUPBY 函数内的扩展列的表达式中使用。 实际上,CURRENTGROUP 从 GROUPBY 的“table”参数中返回一组行,该组行属于 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])
)