前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >理解上下文

理解上下文

作者头像
公众号PowerBI大师
发布2019-08-07 10:50:51
1.5K0
发布2019-08-07 10:50:51
举报
文章被收录于专栏:公众号PowerBI大师

温故而知新

附加这个小章节有2个目的:

1.温故而知新。之前曾提到过什么是上下文,现在完成了筛选和聚合函数的学习,正好利用这个机会结合实践巩固一下对这个概念的认知。

2.Calculate是DAX中最有力量的函数,它可能无处不在,我来带你识别隐藏的Calculate。

什么是上下文?对于一个非IT出身的学生,初次见到上下文这个词着实让我困惑,特别让我想起了学生时代的阅读理解。理解字里行间的逻辑,提炼中心思想。

其实道理是一样的,现在我们面对的表格就好比阅读理解的语段,只有理解好它们的逻辑,才能写出正确的表达式。表的构成很简单,列和行。所以它的上下文分为两种,筛选上下文(即列的上下文)和行上下文。

筛选上下文最容易理解,是纵向的列筛选条件。比如下面的表中销售量2974的筛选上下文是"2016年-第2季度-拿铁",即对日期列和咖啡种类列的筛选。

行上下文,顾名思义,是要横向的看。最简单粗暴也是最好用的理解方法就是视行上下文=当前行。比如下图中的第一行,[利润]列的计算是在行上下文中完成的,即当前所在行,价格=24,成本=9.6,所以价格-成本=14.4。

为了更好地理解行上下文,我们换一张表再来做个试验。在原材料表中新建列[咖啡数量] = sum('咖啡数据'[数量]),结果是每一行都是同一个结果54245。这是为什么呢?

以第一行卡布奇诺行为例,在计算咖啡数量时,行上下文是原材料表中的当前行,而计算的公式sum('咖啡数据'[数量])是求数据表中的[数量]列的和。两者在不同的表中,所以原材料表的行上下文对数据表的计算并没有影响,输出的结果为咖啡数据表中数量列的总计。

你可能会问,不对啊,记得我们的数据模型关系原材料表与数据表间是以[咖啡种类]建立的一对多关系,为什么没有求得卡布奇诺的数量呢?

关键的语法就在这里了,行上下文不会自动转换成筛选上下文,如果需要转换,要使用Calculate。请记住这条规则。我们试一下把公式外套一个Calculate。[咖啡数量] = Calculate(sum('咖啡数据'[数量])),求得结果:

这是个什么逻辑?我们还以第一行举例,Calculate这个超级力量函数就好比模型的启动键,当赋予Calculate时,关系模型的阀门启动,数据信号顺流而下,这个数据信号是将行上下文转换成了筛选上下文,按照当前行中咖啡种类卡布奇诺这个筛选条件对数据表进行筛选,于是这次我们得到了所有卡布奇诺的数量求和4239。

再来看个例子,在学习Filter时我们建立的一个度量值销售量7,如果把[销售量]度量值替换成Sum,Sum的外面披上一个Calculate外套,得到的结果将与销售量7完全一样。

外套Calculate的作用是把Filter中的行上下文(当前行)转换成了以城市为筛选条件的筛选上下文,完成数量>200的测试,再以完成测试后返回的虚拟表来确定最终的筛选上下文。

为什么度量值[销售量]没有外套Calculate却能达到同样的上下文转换效果?这个答案是度量值自带天然的Calculate,我们把这个Calculate叫做隐藏的Calculate。所以当你下次看到[销售量]=sum('咖啡数据'[数量])时,有意识地知道它其实是Calculate(sum('咖啡数据'[数量]))。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI大师 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

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