今天,又是元气满满的一天(好古老的梗)
开门见山,今天我们研究三个筛选函数:CALCULATE、SUMX和FILTER。学过一段时间DAX函数的坊友们应该有这种体会,用的较多的筛选函数就是CALCULATE,从微软官网上download下来的函数定义:在指定筛选器修改的上下文中计算表达式。
语法是:CALCULATE(,,…)。
举个例子,比如有这样的一个数据集,
我们想展示实际数的话,那么度量值应该这样写:
营业收入实际数 = CALCULATE(SUM('营业收入表'[营业收入]),'营业收入表'[分组]="实际数")
我们按年去展示数据的话出来的条形图长这样 :
该条形图按照每年去计算实际数,因为2018年及之后没有实际数,所以横轴年份只到2017年,本例虽简单,却也包含了筛选上下文的概念。
假设如果我们想在CALCULATE函数表达式中直接筛选年<=2017来控制横轴年份以达到同样的效果,那么我们的度量值应该这样写:
营业收入实际数 = CALCULATE(SUM('营业收入表'[营业收入]),'营业收入表'[年]<=2017)
出来的图长这样:
一脸黑人问号。。。为啥这个图变成了这样??莫不是筛选函数失灵了?仔细看了下数值,每一年展示的数都是2017年之前的数据的汇总,仔细想想函数的筛选上下文的逻辑,对横轴的每个年份计算2017年之前的营业收入,确实是这样。
那么应该怎么样通过度量值的方式直接筛选年份呢?我们先试试CALCULATE的兄弟SUMX函数。
度量值应该这样写:
营业收入实际数 = SUMX(FILTER('营业收入表','营业收入表'[年]<=2017),'营业收入表'[营业收入])
再瞅一眼图表:
嗯,达到了我们预期的效果,那么这个表达式跟我们用CALCULATE函数写的表达式差别在哪里呢?我们发现用SUMX函数往往配合filter函数使用,我们也给CALCULATE函数加一个FILTER试试。
营业收入实际数 = CALCULATE(SUM('营业收入表'[营业收入]),FILTER('营业收入表','营业收入表'[年]<=2017))
再瞅一眼图表:
原来加一个筛选函数FILTER就可以解决这个问题了。
去官网上看一下FILTER函数的描述,注意到FILTER函数的返回值:只包含筛选行的表。恍然大悟,果然官方文档还是要多看看的。
DAX函数微软官方参考文件:https://msdn.microsoft.com/zh-cn/library/ee634396(v=sql.110).aspx
今天的文章水完了,坊友们,我滚啦~
*Power Pivot工坊原创文章,转载请注明出处。
延伸阅读:
工坊实验室之R脚本视觉对象
工坊实验室之数据标签的位置
工坊实验室之桑基图排序
工坊实验室之流向图展现
工坊实验室之使用瀑布图
一张图看懂微软PowerBI系列组件
一张图看懂Power BI 架构
当Power BI 遇上洪灾
当Power BI 遇上欧冠决赛
当Power BI遇上条形码
当Power BI遇上Visio
如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”
长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯。欢迎小伙伴儿们转发分享~