活动
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 聚合函数的完整列表,请参阅下面的“使用 CURRENTGROUP”部分。 |
具有groupBy_columnName参数的选定列和名称参数指定的扩展列的表。
GROUPBY 函数执行以下操作:
从指定的表(以及“to-one”方向的所有相关表)开始。
使用所有 GroupBy 列创建分组(步骤 1 中表需要存在这些列)。
每个组是结果中的一行,但表示原始表中的一组行。
对于每个组,评估要添加的扩展列。 与 SUMMARIZE 函数不同,不会执行隐式 CALCULATE,并且不会将组放入筛选器上下文中。
定义名称的每个列必须具有相应的表达式;否则,将返回错误。 第一个参数名称定义结果中列的名称。 第二个参数表达式定义为获取该列中每一行的值而执行的计算。
groupBy_columnName
必须位于表或相关表中。每个名称都必须用双引号引起来。
该函数按一个或多个groupBy_columnName列的值将所选行集分组到一组摘要行中。 为每个组返回一行。
GROUPBY 主要用于对 DAX 表表达式的中间结果执行聚合。 若要在模型中对物理表进行高效聚合,请考虑使用 SUMMARIZECOLUMNS 或 SUMMARIZE 函数。
在计算列或行级别安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。
CURRENTGROUP 只能在定义 GROUPBY 函数中的扩展列的表达式中使用。 实际上,CURRENTGROUP 从属于 GROUPBY 结果的当前行的 GROUPBY 表参数中返回一组行。
以下示例首先使用 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])
)