工坊实验室 | CALCULATE 的嵌套使用
前言:
研究DAX函数不能抱着轻视它的心态,DAX简约而不简单,它的设计使得用户上手速度很快,但是要深入掌握一种函数的原理还是需要一定的耐心,投入相当的精力。
课 题 背 景
有时在表达式中我们会嵌套使用多个Calculate函数,多层条件之间的相互作用让很多小伙伴感到困惑,多层条件的叠加结果是取交集呢还是取并集呢,今天我们就来研究一下
01数据准备
为了方便理解和解读实验结果,我们准备了非常简单的数据。一种商品系列的销售额,该商品系列有三种颜色——Red、Yellow、Blue,三种颜色分别对应一个销售额。
02尝试建模
我们构造如下几个度量值:
红色系列的销售额:
Sales of Red =
CALCULATE ( SUM( Sales[Sales] ), 'Sales'[Color]= "Red" )
红黄系列的销售合计:
Sales of Red andYellow =
CALCULATE (
SUM ( Sales[Sales] ),
'Sales'[Color] = "Red"
||'Sales'[Color] = "Yellow"
)
红蓝系列的销售合计:
Sales of Red and Blue =
CALCULATE (
SUM ( Sales[Sales] ),
'Sales'[Color] = "Red"
||'Sales'[Color] = "Blue"
)
以上三个表达式的形式是我们在平时的建模工作中经常用到的形式。三个表达式在可视化界面的结果如下所示:
03深化建模
我们构造两种嵌套的场景:
两个Calculate条件嵌套使用,内层选择红黄系列,外层选择红蓝系列
Sales of Red andYellow ?? =
CALCULATE (
CALCULATE (
SUM( Sales[Sales] ),
'Sales'[Color]= "Red"
|| 'Sales'[Color]= "Yellow"
),
'Sales'[Color] = "Red"
||'Sales'[Color] = "Blue"
)
内层表达式使用Keepfilters函数的嵌套,仍然是内层选择红黄系列,外层选择红蓝系列
Sales of Red !! =
CALCULATE (
CALCULATE (
SUM( Sales[Sales] ),
KEEPFILTERS( 'Sales'[Color] = "Red"|| 'Sales'[Color]= "Yellow" )
),
'Sales'[Color] = "Red"
||'Sales'[Color] = "Blue"
)
两个表达式的结果如下
[Sales of Red and Yellow??]表达式完全采用了内层的筛选结果,这里需要提一下Calculate内外层筛选表达式的作用顺序,外层首先起作用,然后是内层。这里内层和外层作用于同一列且条件冲突,于是后起作用的内层筛选将原条件覆盖了。
[Sales of Red !!]表达式采用了内层和外层取交集“红色系列”的结果,原因是外层筛选首先起作用,筛选了红蓝系列,内层由于Keepfilters函数的作用,不是直接覆盖原条件,而是取内外层条件的交集,最终得到红色系列产品销售额。
04总结
Calculate函数在嵌套使用的时候作用顺序是由最外层到最内层,如果内层筛选条件有与外层筛选条件作用于同一列且冲突的,则内层筛选覆盖外层筛选条件;
Keepfilters函数改变Calculate的筛选条件作用机制,不是直接覆盖原筛选上下文,而是基于原来的上下文添加新的条件,产生的结果是多个条件取交集。
本期内容就是这些,小伙伴们下期再见!
-
PowerPivot工坊原创文章,转载请注明出处!
如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。
长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~
Power Pivot工坊
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)