美文网首页BI学习笔记
精品丨CALCULATE——上下文扩展

精品丨CALCULATE——上下文扩展

作者: Fabric丨白茶 | 来源:发表于2021-05-09 21:39 被阅读0次

之前关于CALCULATE的函数写过很多期,白茶在梳理知识点的时候,发现漏掉了一个需要描述的地方,本期将会对这个遗漏的地方进行补充说明。

传送门:《精品丨CALCULATE函数进阶版知识》

CALCULATE衍生的上下文扩展

最开始接触这个问题的时候,大概还是在2019年。

那次白茶和@嘿神闲聊的时候,嘿神曾提及过这个问题,就是CALCULATE函数尽量不要再次嵌套CALCULATE函数,不然会出现不可预知的错误,且对于初学者来说这个问题不利于理解排查。

当时白茶没意识到这个问题的严重性,直到近期和@冬哥闲聊的时候再次遇到这个问题,白茶才明白这个问题点出在哪里。

可能小伙伴看到这里还是云里雾里的,别急,看下面的例子。

案例数据:

这是白茶准备的案例数据,非常的简单,小伙伴可以动手模拟一下。

问题:

下面这四段代码返回的结果分别是什么?

代码1:

Question.1 =
CALCULATE ( CALCULATE ( SUM ( '案例'[价格] ), '案例'[名称] = "奶茶" ), '案例'[类别] = "饮品" )

代码2:

Question.2 = 
CALCULATE ( CALCULATE ( SUM ( '案例'[价格] ), '案例'[名称] = "奶茶" ), '案例'[名称] = "面包" )

代码3:

Question.3 =
CALCULATE (
    CALCULATE ( SUM ( '案例'[价格] ), '案例'[名称] = "奶茶" ),
    FILTER ( ALL ( '案例' ), '案例'[类别] = "食物" )
)

代码4:

Question.4 = 
CALCULATE (
    CALCULATE ( SUM ( '案例'[价格] ), FILTER ( ALL ( '案例' ), '案例'[名称] = "奶茶" ) ),
    FILTER ( ALL ( '案例' ), '案例'[名称] = "面包" )
)

思考一下

1

2

3

...

答案:

代码1:

代码2:

代码3:

代码4:

小伙伴们,猜对了么?

那么这四段代码的内部逻辑是什么?

解释:

代码1:

此时内部的上下文是“奶茶”,而外部上下文是“饮品”,内外上下文不冲突,外部上下文先执行,与内部上下文取交集,因此结果返回“15”。


代码2:

此时内部的上下文是“奶茶”,而外部上下文是“面包”,内外上下文冲突,外部上下文先执行,内部上下文覆盖掉外部上下文,因此结果返回“15”。


代码3:

此时内部的上下文是“奶茶”,而外部上下文是“食物”,内外上下文不冲突,外部上下文先执行,与内部上下文取交集,两个上下文此时交集为空,因此结果返回“空”。


代码4:

此时内部的上下文使用了ALL,筛选条件是“奶茶”;

而外部上下文也使用了ALL,筛选条件是“面包”;

内外上下文冲突,外部上下文先执行,内部上下文覆盖掉外部上下文,因此结果返回“15”。

小伙伴们,看明白了么?

通常情况下,外部上下文先执行,内部上下文后执行;

一旦内外上下文冲突,后执行的内部上下文会覆盖掉先执行的外部上下文。

因此使用CALCULATE函数的时候,如果多层嵌套,切记上下文冲突的问题。

小伙伴们❤GET了么?

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

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

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

相关文章

网友评论

    本文标题:精品丨CALCULATE——上下文扩展

    本文链接:https://www.haomeiwen.com/subject/cyvvcltx.html