前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >精品丨CALCULATE——上下文扩展

精品丨CALCULATE——上下文扩展

原创
作者头像
PowerBI丨白茶
修改2021-09-01 14:38:50
3170
修改2021-09-01 14:38:50
举报
文章被收录于专栏:PowerBI

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

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

CALCULATE衍生的上下文扩展

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

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

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

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

案例数据:

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

问题:

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

代码1:

代码语言:txt
复制
Question.1 =
CALCULATE ( CALCULATE ( SUM ( '案例'[价格] ), '案例'[名称] = "奶茶" ), '案例'[类别] = "饮品" )

代码2:

代码语言:txt
复制
Question.2 = 
CALCULATE ( CALCULATE ( SUM ( '案例'[价格] ), '案例'[名称] = "奶茶" ), '案例'[名称] = "面包" )

代码3:

代码语言:txt
复制
Question.3 =
CALCULATE (
    CALCULATE ( SUM ( '案例'[价格] ), '案例'[名称] = "奶茶" ),
    FILTER ( ALL ( '案例' ), '案例'[类别] = "食物" )
)

代码4:

代码语言:txt
复制
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的初学者。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档