哈喽,小伙伴们,头几次白茶分享了单条件聚合、多条件聚合、各类占比、以点带面聚合,本期呢,咱们继续研究CALCULATE函数。
白茶最近思考了一下,就是CALCULATE函数,为什么它是最灵活的,也是使用频率最高的函数?
因为在实际情况中,我们经常能遇到不同要求的聚合模式,这就导致了很难在短期内将CALCULATE学的透彻,微软一共200多个DAX函数,这就代表了有无数种可能。
白茶的理解是,打基础有两个很重要的点,一是记住各个函数的用途,别用微软的言语去理解,要用我们的中文概念去理解,去吃透;二是记住几个我们使用频度高的函数,并且记住各个参数要求,这样的话时间久了,遇到问题脑海中就会自然而然的想到相关函数,所欠缺的就是如何衔接公式,这个可以靠不断的试验去慢慢尝试,只要这样记得才会深刻。
看别人做,知识永远都是别人的,只有自己动手做,并且形成了自己的思维模式,知识才是自己的。
这是白茶对于学习的理解,好了,闲话不多说,开始今天的案例。
这是白茶做的一份示例文件,什么意思呢?每个客户每天持有的货物数量、金额都是变动的,我现在想知道每个客户的月末结余库存。可能有的小伙伴会说了,这个简单啊!可是仔细看,这个示例文件能够引申出来很多的概念词语。
一、累计度量值:
这个就是我们使用频率最高的度量值,就是可以无限聚合的数值类型。
比如说销售额,我昨天卖了15元,今天16元,那么求我的总营业额就是无限的累计。
二、不可累计度量值:
这个度量值类型有点类似于文本,就是文字大部分时候(不是全部)是不可以累计的,就是为了区分作用。
比如说省份,辽宁、黑龙江、哈尔滨,一般情况下我们不需要对它进行聚合,这类是不可累计。
三、半累计度量值:
半累计是啥意思,就是有时候能累计,有时候不能累计。这是啥意思?看我们的示例文件就知道了,比如我想知道所有客户1月份的库存余额汇总,那么将一月份最后一天三个客户的库存余额相加就可以了,这个之前提到过,CALCULATE+FILTER+MAX就可以搞定了。
但是,我要显示每个客户每个月的库存余额,这个就是不能完全累加,因为我们需要呈现的是每个客户对应月份里面最后一天的数值。
这个我们需要咋处理呢?来,跟着白茶学习的思路走。
将数据导入PowerBI中,进行常规操作,建立日期表、建模定关系。
这样我们的前期准备工作完成,将数据放在矩阵中呈现如下:
编写最基础的聚合代码如下:
DAX=
SUM('表'[求和项])
放在矩阵中对比。
可能白茶之前说的太啰嗦了,小伙伴们这回明白没?我要显示的是月末库存,而不是将这些数据聚合到一块,这样是没有意义、错误的。
编写代码如下:
月末库存余额=
CALCULATE(SUM('表'[求和项]),LASTDATE('表'[DATE])//这里要替换成自己的数据
如图:
这个怎么说呢,LASTDATE的判定是返回最后一个非空白日期,从矩阵中看没啥大问题,但是在表中看有很明显的漏洞。
优化我们的代码,让CALCULATE重新判定一下:
优化=
CALCULATE(SUM('表'[求和项]),FILTER(ALL('日期表'),'日期表'[DATE]=MAX('事实表'[DATE])//替换成自己的数据
结果如下:
相对于上一个代码,虽然在矩阵中没有任何变化,但是在表中体现的很直接,判定范围为有数据的最大日期,这样是不是更稳妥一点呢?
(白茶现在没想出来二者别的区别,有的话请各位小伙伴告诉我一声。)
小伙伴们❤GET了么?
白茶会不定期的分享一些函数卡片
(文件在知识星球[PowerBI丨需求圈])
这里是白茶,一个PowerBI的初学者。
下面这个知识星球是针对有实际需求的小伙伴,有需要的请加入下面的知识星球。