本节中我们来认识DAX中最常用的一些聚合函数。什么叫聚合呢?其实就是按照给定的条件给数据降维的过程。譬如我们的销售表中可能有几万行数据,但做统计时,每天的销售额就只是一个汇总求和后的数字,这一步就是按照日期维度来做聚合。
经常使用透视表的同学可能会对这个概念接受得比较快,事实上在使用Power BI的过程中,多多运用透视表的思维是非常有效的。Power BI与excel最大的不同就在于,这里的数据是按列存储和使用的,在视觉对象中的每个条/柱、每个数据点都是在当前维度下聚合而来的结果,因此我们写的各类度量值时,不会像在excel中一样需要给行标列标,都是只给出涉及的字段和需要的聚合方式。当度量值被放入视觉对象中时,才会按照当前所处的上下文条件进行运算,并返回计算结果。
Sum/Average/Max/Min
sum无疑是最常用的聚合函数,毕竟日常的大部分指标在汇总时都是求和的关系,也因此不论是PBI还是excel透视表,甚至tableau等其它BI软件中,数值类字段的默认聚合都是sum。
这部分我们在前文(DAX语言基础-度量值与上下文)中已经有过涉及,未来在其它函数的学习中,也会不断地用到sum。
其余如average,max,min等都与excel中的用法相同,分别用于求均值和极值(max和min不但对数值有效,对日期型也有效)。
Countrows/Counta/CountBlank/DistinctCount
count开头的这一组函数,很显然都是用于计数的,我们针对之前示例数据的国家表,编写如下度量值:
CountRows = COUNTROWS('国家表') // 行计数 CountA = counta('国家表'[国家名称]) // 非空项计数 CountBlank = countblank('国家表'[国家名称]) // 空值计数 DistinctCount = DISTINCTCOUNT('国家表'[国家名称]) // 非重复项计数 DistinctCountNoblank = DISTINCTCOUNTNOBLANK('国家表'[国家名称]) // 非空非重复项计数
将上述度量值放入多行卡,得到以下结果:
可以看出,该表共有266行,按“国家名称”字段计数,非空值有264个,空值2个,求和正好是266无误,
非重复值计数结果是265,对非空值去重计数是264,说明那个重复值是2个重复的空行。
在数据视图中观察该表,果然一点不差:
这一组公式很好记忆,除了countrows是输入是表外,其余的都是对字段计数。而且如果数据比较规范的话,最多用的就只有countrows和distinctcount。