前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于CALCULATE函数,初学者特别容易混淆的问题之一! | DAX实战案例

关于CALCULATE函数,初学者特别容易混淆的问题之一! | DAX实战案例

作者头像
大海Power
发布2022-05-25 14:32:01
8230
发布2022-05-25 14:32:01
举报
文章被收录于专栏:用户8950297的专栏

DAX里的CALCULATE函数,无疑是最强大、最重要、最灵活而又最难懂的函数,没有之一。

对于想要真正将Power BI学以致用的朋友,这也是务必要攻克的难点:从了解它的计算过程,到通过大量的案例实践来巩固并达到灵活运用,甚至形成一些常用套路。

后续我会用常见的一些工作实战案例,来讲解各种情况下的CALCULATE函数套路,希望对大家有所帮助。

今天,我们来讲这么一个例子(示例数据下载链接:https://share.weiyun.com/PLdpvDP3):

计算某工人所在的工序设备下的所有人的总工时,但在结果表中要隐藏工序设备,如下图所示:

其中左边为明细表,即在4月20日的早班,大海在工序1、机床1上搬砖3小时,同时在工序1、机床1上搬砖的还有大牛和小勤分别搬砖1小时、2小时;要求右边结果表,如4月20日早班,大海所在的工序1、机床1上,所有人的总工时(如上图中结果6 = 3+1+2,但注意,结果表里不体现工序和机床)。

这个问题在计算占比的情况下比较常见,但要求上有其特殊的地方:一般情况,计算占比时,为了其中的总值,通过ALL函数直接删除某维度的影响即可,但这里,结果表中直接删除姓名维度的影响,显然是不行的,因为还要考虑与姓名相关的工序、设备维度的影响——这很有点儿“又要马儿跑,又要马儿不吃草”的意思!

这个看起来有点儿矛盾的问题,如果理解了CALCULATE函数的计算过程,其实也不难。思考过程如下:

1、首先,我们显然要先取得当前条件下的工序、设备值,作为计算结果的筛选条件——这可以通过VALUES函数来实现:

2、然后,我们要忽略工人的影响,这可以通过ALL函数来实现:

就这么简单?——对,就这么简单!但是,我相信一定会有些朋友产生以下疑问:为什么VALUES取到的工序、设备,是在结果表当前行下的工人(如第1行,大海)的工序和设备?后面不是用ALL函数忽略了工人的影响了吗?

——这是很多初学者最容易混淆的问题之一:

对于CALCULATE函数后面的筛选器参数,它们是有一定的计算顺序的,而不是相互影响的!其计算顺序为:

先在原始上下文上计算显式筛选器(如这里的VALUES工序、设备),最后再使用调节器函数调整筛选器(如这里的ALL和以后要讲的KEEPFILTERS等)。

所以,这里用VALUES函数取工序、设备的值时,是在结果表当前的筛选器条件下得到的值(如大海,对应的工序1、机床1),而不是删除姓名筛选器情况下的结果。

前段时间,我发表了文章《666,Calculate计值流记不住?我提炼成了这6个字!| DAX核心知识》,说实话,这是我耗费特别大精力写作的将原理转化为相对容易理解、实战的文章之一,建议大家多看看。同时对照其中CALCULATE函数的6个计值步骤,再回头看一下本案例的内容,可能非常有助于加深理解哦。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档