PowerBI的聚合与Calculate函数
学习DAX的确比 可视化 和 获取数据 要多花一些气力,不过有了上个章节的对DAX原理的铺垫,第四章的内容可谓 温故而知新。 把 原理和新公式 相结合 , 就好像你刚开始学Excel公式 Sum,If,Vlookup... ,掌握其实并不难,一个新公式+一次实践练习就可以解锁一个新技能。当你完成整个第四章 24个公式的学习时,你就好比掌握了 太极拳的24个精髓招式 ,组合起来运用自如可 以不变应万变 。
1 最常用的公式
DAX函数部分是与Excel函数是相通的,对于基本的
时间日期、信息、逻辑、数学、统计、和文本函数
用法大致相同,这部分基础类函数我假设大家有一定的认识,百度也能够搜到Excel公式海量的解释和案例,你可以按需补充,现学现卖,在这里不多讲。
我想把时间专注在DAX的核心类系, 聚合、筛选、时间智能、关系、迭代等等 ,为了更好地把这些技术一个个解锁,我选取了 24个最常用的函数 ,并把这些函数的学习细分成了3个阶段。 第一阶 是最常用最核心的部分,攻克了它便可以胜任一些小的数据分析模型; 第二阶 较为容易,与Excel的函数很像,可以说是 Excel版的扩展 ; 第三阶 相对前两个阶段来讲属于高阶函数,然而我们有了前两阶的学习基础,它不过是另一个小山头。掌握了这24个公式,我相信它们至少可以覆盖到 80%的数据分析需求 ,对于另外的20%我们可以现用现查。
2 聚合函数
在度量值
公式栏
里,无论你输入
'
还是
[
,智能提示的
都不会是列
,而是其他已创建好的度量值,所以
度量值是不可以直接引用列
的。比方
'咖啡数据表'
中的
[数量
]列, 该表有近3万行,把这3万行的数据放入度量值中是没有任何意义的。
度量值
输出的是
一个计算结果
,所以我们只有用聚合函数求计算列的聚合值才有效。
聚合函数与Excel的基本计算函数是非常相像的,区别是Excel引用的是单元格,而DAX引用的是列。我们
仍在咖啡数据表
的基础上来完成:
<公式1>
求咖啡卖的杯数
[销售量]=Sum('咖啡数据'[数量])
;
<公式2>
求[
平均杯数]=Average('咖啡数据'[数量])
;注意公式栏里的解释也是非常有用的提示。
<公式3>
如果每一行数据视为一位顾客购买的订单,求订单中最大的杯数
[最大杯数]=Max('咖啡数据'[数量]);
<公式4>
求订单的数量
[订单数]=Countrows('咖啡数据')
,这里你发现,聚合函数不仅可以
引用列
还可以
引用表
,Countrows即计算表或列的行数。
<公式5>
求我们在全国有多少个城市分店
[城市数量]=distinctcount('咖啡数据'[城市])
, Distinctcount是计算
列中不重复值的数量
。
上面5个函数的计算结果如下表。同理,计算最小值用Min,计算空白项个数Countblank,还有Count,CountA(计算列中不为空的数目)等等。这些道理是一模一样,大家自行挖掘,也可以随用随查。
3 Calculate 最强大的函数
从Calculate的语法结构我们可以看出它能够把计算表达式和筛选条件整合起来。我们前面把
度量值比作带着漏斗的计算器,
那么
<公式6>
Calculate就是漏斗与计算器之间的启动键,
它能够赋予漏斗按指定的条件来执行过滤筛选,同时让计算器执行运算。
我们按上面制作一个矩阵表,行为'原材料'[咖啡种类],列为'杯型'[体积],值为[销售量]。现在我们再做一个
试验
,再创建一个
[销售量2]=Calculate([销售量], '原材料'[咖啡种类]="拿铁", '杯型'[体积]="480ml")
,把矩阵表中的值替换为[销售量2]。你会得到下面这个表,是不是有些惊讶!难道是出Bug了?所有的值都为在
拿铁咖啡
和
杯型体积=480ml
限定条件下的销售量。
这个输出的结果是 完全没有问题的 ,我们做这个例子是为了说明Calculate工作原理,从这个结果中可以得出一点关于Calculate函数重要的结论 ,Calculate可对初始筛选增删改 ,即生成新的筛选上下文
可以说掌握了Calculate就好比掌握了 自定义 功能,比方说标准的拿铁咖啡是由浓缩、牛奶、奶泡按一定比例构成,现在你可以自定义修改配方,加入香草和焦糖变成香草焦糖拿铁。
Calculate可以应用在多个表 。注意到[销售量2]公式引用的是 '原材料 ' 表 和' 杯型'表 ,两个都是 Lookup表 。按照我们在3.2《表与表关系》的原理,启动Calculate仿佛是开启了漏斗过滤器的一个 阀门 ,使数据像水一样顺流而下,执行对数据表的筛选。
筛选条件拿铁和体积=480ml两者同时满足,是AND关系。 在DAX中,如果想表达 或 的关系,运算符为“ || ”。但是在本例中如果直接写=Calculate([销售量], '原材料'[咖啡种类]="拿铁"||'杯型'[体积]="480ml" ) 这个是无效的。记住在Calculate中使用||时,必须是引用同一列, 比方 =Calculate([销售量], '杯型'[体积]="360ml"||'杯型'[体积]="480ml" ) 这个是可以的。
有人称Calculate为超级版Sumif,但它的能力远比Excel中的Sumif强大多了。我们这个例子用的销售量是Sum求和,然而Calculate可以与各种聚合函数 搭配组合 Average, Count, Max...可以说是没有限制。要知道Excel中是没有Maxif/Minif这种公式的。
Calculate的强大还不止于此,它可以与各种筛选器函数搭配组合如All,Values,Filter来发挥更强大的功能,后面的几节我们分别介绍。
PowerBI教程之PowerPivot建模和DAX - 网易云课堂
____________________________________