学习 CALCULATE 函数(五)

file
哈喽,小伙伴们,头几次白茶分享了单条件聚合、多条件聚合、各类占比、以点带面聚合,本期呢,咱们继续研究CALCULATE函数。
file

白茶最近思考了一下,就是CALCULATE函数,为什么它是最灵活的,也是使用频率最高的函数?因为在实际情况中,我们经常能遇到不同要求的聚合模式,这就导致了很难在短期内将CALCULATE学的透彻,微软一共200多个DAX函数,这就代表了有无数种可能。

白茶的理解是,打基础有两个很重要的点,一是记住各个函数的用途,别用微软的言语去理解,要用我们的中文概念去理解,去吃透;二是记住几个我们使用频度高的函数,并且记住各个参数要求,这样的话时间久了,遇到问题脑海中就会自然而然的想到相关函数,所欠缺的就是如何衔接公式,这个可以靠不断的试验去慢慢尝试,只要这样记得才会深刻。

看别人做,知识永远都是别人的,只有自己动手做,并且形成了自己的思维模式,知识才是自己的。

这是白茶对于学习的理解,好了,闲话不多说,开始今天的案例。

file
file
这是白茶做的一份示例文件,什么意思呢?每个客户每天持有的货物数量、金额都是变动的,我现在想知道每个客户的月末结余库存。可能有的小伙伴会说了,这个简单啊!可是仔细看,这个示例文件能够引申出来很多的概念词语。
file

一、累计度量值:

这个就是我们使用频率最高的度量值,就是可以无限聚合的数值类型。

比如说销售额,我昨天卖了15元,今天16元,那么求我的总营业额就是无限的累计。

二、不可累计度量值:

这个度量值类型有点类似于文本,就是文字大部分时候(不是全部)是不可以累计的,就是为了区分作用。

比如说省份,辽宁、黑龙江、哈尔滨,一般情况下我们不需要对它进行聚合,这类是不可累计。

三、半累计度量值:

半累计是啥意思,就是有时候能累计,有时候不能累计。这是啥意思?看我们的示例文件就知道了,比如我想知道所有客户1月份的库存余额汇总,那么将一月份最后一天三个客户的库存余额相加就可以了,这个之前提到过,CALCULATE+FILTER+MAX就可以搞定了。

但是,我要显示每个客户每个月的库存余额,这个就是不能完全累加,因为我们需要呈现的是每个客户对应月份里面最后一天的数值。

这个我们需要咋处理呢?来,跟着白茶学习的思路走。
file

将数据导入PowerBI中,进行常规操作,建立日期表、建立模型关系。

file
file
这样我们的前期准备工作完成,将数据放在矩阵中呈现如下:
file

编写最基础的聚合代码如下:

DAX =
SUM ( '表'[求和项] )

放在矩阵中对比。
file

可能白茶之前说的太啰嗦了,小伙伴们这回明白没?我要显示的是月末库存,而不是将这些数据聚合到一块,这样是没有意义、错误的。

编写代码如下:

月末库存余额 =
CALCULATE ( SUM ( '表'[求和项] ), LASTDATE ( '表'[DATE] ) )
//这里要替换成自己的数据

如图:
file

这个怎么说呢,LASTDATE的判定是返回最后一个非空白日期,从矩阵中看没啥大问题,但是在表中看有很明显的漏洞。

优化我们的代码,让CALCULATE重新判定一下:

优化 =
CALCULATE (
    SUM ( '表'[求和项] ),
    FILTER ( ALL ( '日期表' ), '日期表'[DATE] = MAX ( '事实表'[DATE] ) )
)
//替换成自己的数据

结果如下:
file

相对于上一个代码,虽然在矩阵中没有任何变化,但是在表中体现的很直接,判定范围为有数据的最大日期,这样是不是更稳妥一点呢?

(白茶现在没想出来二者别的区别,有的话请各位小伙伴告诉我一声。)

小伙伴们❤GET了么?

白茶会不定期的分享一些函数卡片

(文件在知识星球[PowerBI丨需求圈])

这里是白茶,一个PowerBI的初学者。

下面这个知识星球是针对有实际需求的小伙伴,有需要的请加入下面的知识星球。

请在PC端查看,有部分图片无法在移动端显示。
PowerBI丨白茶