SUMX引发的思考

SUM,SUMX大概是绝大多数人学习PowerBI时先学的函数,那么我们真的了解它吗?
先来看数据模型

我们可以很容易就写出销售额的度量
销售额 = SUM( 'Sales'[SalesAmount] )

结果很好理解,比如2020年的总计333565=82140+84122+83992+83311,同样的我们可以求出每季度在售的产品数有多少个
产品数 = DISTINCTCOUNT( 'Sales'[ProductKey] )

这也没什么问题,那么问题来了,现在领导说在算年度总计时应该是每个季度的产品数加起来,作为分析师的你反驳老板这样做没有意义,老板喝了口水说公司最近收益不好,估计要裁员。然后,你马上乖乖地去改逻辑。
我们来梳理下逻辑,按老板的要求2020年产品数总计应该是100+100+100+100=400,然后马上想到在算层级百分比会根据不同的层级算不同的总计值,直接套用层级百分比的方法
产品数 error = IF(     HASONEVALUE( 'Date'[Qtr] ),     [产品数],     SUMX(VALUES('Date'[Qtr]),  [产品数]))

在年度总计时我们得到了老板想要的值,但是在对整体总计时,得到的值是400,而不是700(300+400),我们继续增加层级判断
产品数 error2 = SWITCH(    TRUE(),    HASONEVALUE( 'Date'[Qtr] ), [产品数],     HASONEVALUE( 'Date'[Year] ), SUMX(VALUES('Date'[Qtr]),  [产品数]),    SUMX(ALLSELECTED('Date'[Year],'Date'[Qtr]),  [产品数]))

貌似得到了正确结果,真的是这样吗?来看下面的结果

为什么错了,今天先不讨论,我们还是想办法要怎样才能得到老板想要的值 ,这时候我们就要换个思路,如果我们已经有了一张按年份、季度聚合的统计表,会不会简单些呢?

如果已经存在了上述的表,直接聚合计算就好了啊。
产品数2 = SUMX(    ADDCOLUMNS (        SUMMARIZE (            Sales,            'Date'[Year],            'Date'[Qtr]        ),        "@Products",        CALCULATE ( DISTINCTCOUNT ( Sales[ProductKey] ) )    ),    [@Products])

终于得到了老板想要的结果,可是我们再仔细看代码,逻辑其实很简单的,只是一开始我们想的方向的把问题变难了。
这里要特别提下,这里用到的一个写法,在写DAX的过程中我们会经常看到这种写法,这种写法相比SUMMARIZECOLUMNS要好理解些。
ADDCOLUMNS (        SUMMARIZE (            表,1,2        ),        "@Products",        [度量值]    )



在得到正确结果之前我们也错了好多次,且因为一开始时思考的方向的问题,导致问题很复杂,实际上问题很简单,只是想的复杂了。这只是一个很简单的例子,实际工作中我们会遇到更复杂的场景,如果我们一直出错,这时我们就要反思是否要换个思路,是否抓住了问题的本质。




本篇文章来源于微信公众号: PowerBI木小桼

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注