Power BI帕累托分析:数值相等时累计占比计算“错误”问题
最近有几个星友提到,做帕累托分析时,当有数据相等时,累计占比计算不正确,不知道是怎么回事,PowerBI为什么会出现这个“错误”呢?你是不是也碰到过这个问题?
这篇文章就来谈谈这是怎么回事,以及如何解决这个问题。
以下面这个简单的数据为例,
可以看到,在这个数据中,有几种产品的销售额是相等的。
进行帕累托分析时,正常写的度量值是这样的:
累计收入 = VAR sales=[收入] RETURN CALCULATE( [收入], FILTER(ALL('产品表'),'产品表'[销售额]>=sales) )
累计占比 = DIVIDE( [累计收入], CALCULATE([收入],ALL('产品表')) )
ABC 分类 = SWITCH(TRUE(), [累计占比]<=0.7,"A", [累计占比]<=0.9,"B", "C" )
用矩阵展示结果如下:
从上图可以看出,第二行和第三行的数据相同,但累计收入和累计占比都是一次性把相等的数据都加上了,这样第二行的结果就不太符合常识,下面的数据行中,相等数据也同样是类似的问题。
用图表来展示这个帕累托图,效果是这样的:
并不是一条平滑上升的帕累托曲线,是不是看起来非常奇怪!
为什么会有这个问题呢?其实答案就在上面我们写的度量值的逻辑里面。
可以再去看一下累计收入这个度量值,它的计算逻辑是:大于等于当前产品收入的数据,汇总到一起,那么无论是上面的第二行的A7、还是第三行的A11,都是把收入大于等于70的产品的收入汇总到一起,度量值的逻辑决定了最终的结果。
所以,这个度量值的计算并没有错误,并且在计算所属的类别时,相同收入的产品属于相同的类别,这个也没有问题。
如果你觉得这种累计的结果不能接受,那么,对于数据相等的类别,需要提供额外的计算逻辑来区分。
比如,当产品收入相等时,按照产品的索引顺序累加,根据这个逻辑来优化度量值。
这个度量值在筛选应汇总哪些产品的收入时,分为两个计算逻辑之和:
大于当前产品销售额的产品
等于当前产品的销售额,并且小于等于当前产品序号的产品
这样就不存在累计收入相同的问题了,然后对应写出累计占比和ABC分类,结果如下:
是不是看起来舒服多了。
这样就解决了数值相等时,累计数据不正常的问题。
但这样仍存在一个小问题,比如上面的A8和A9, 销售额都是40,但却被分为了两个不同的类别,A8属于A类产品,而A9属于B类产品。
一个解决的办法就是,累计收入和累计占比按照优化后的度量值的逻辑,而分类依然按照原来的累计占比来划分。
不过细节的处理,具体应该如何做,取决于自己的业务逻辑和划分标准,先想清楚你需要的业务逻辑,然后顺着这个逻辑,用DAX表达出来就可以了。
很多人其实连自己的业务需求都还没有想清楚,对于度量值也是简单地套用,并没有真正理解它的计算逻辑,一旦结果不符合自己的期望,就简单的认为是度量值计算错误或者模型有问题,这结论显然是过于草率了。
所以,在利用PowerBI分析问题时,为了使最终的分析结果符合你的期望,请确保: