DAX有三个用于生成分组聚合数据的函数,这三个函数有两个共同的特征:分组列和扩展列。
- 分组列是用于分组的列,只能来源于基础表中已存的列,分组列可以来源于同一个表,也可以来源于相关的列。
- 扩展列是由name和expression对构成的,name是字符串,expression是包含聚合函数的表达式。
在分组列和扩展列上,这三个函数有各自独特的处理方式。
一,SUMMARIZE
SUMMARIZE函数对相互关联的Table按照特定的一个字段(分组列)或多个字段,进行分组聚合。由于分组列是唯一的,通过SUMMARIZE函数,可以获得多列的唯一值构成的二维表:
SUMMARIZE(<table>, <groupBy_columnName>[, <groupBy_columnName>]…[, <name>, <expression>]…)
参数注释:
- table:必需参数,表示主表,可以是任何返回表的表达式。
- groupBy_columnName:可选参数,表示分组列,该列必须是table参数中的列,或者相关联表中的列。分组列必须使用列的完全限定名,格式是table[column],分组列可以有0个,1个或多个。
- name、expression:可选参数,表示自定义的汇总列/扩展列,该参数对总是成对出现的,name是expression计算结果的名称,expression用于计算列的聚合值。
该函数的返回值是一个汇总表,汇总表包含分组列和自定义的扩展列。
1,获得多列的唯一值
分组列是唯一的,可以不返回汇总列,而只返回分组列,这样得到的表是多列的唯一值。
SUMMARIZE(ResellerSales
, DateTime[CalendarYear]
, ProductCategory[ProductCategoryName]
)
2,获得汇总数据
例如,对数据表 ResellerSales ,按照字段 DateTime[CalendarYear] 和 ProductCategory[ProductCategoryName]分组,计算 ResellerSales[SalesAmount]和 ResellerSales[DiscountAmount]的加和 。
SUMMARIZE(ResellerSales , DateTime[CalendarYear] , ProductCategory[ProductCategoryName] , "Sales Amount", SUM(ResellerSales[SalesAmount]) , "Discount Amount", SUM(ResellerSales[DiscountAmount]) )
该函数利用ResellerSales和DateTime、ProductCategory之间的关系,得到关联表数据(是一个中间临时表),按照DateTime[CalendarYear] 和 Prod