码迷,mamicode.com
首页 > 其他好文 > 详细

数据可视化之DAX篇(十七)Power BI表格总计行错误的终极解决方案

时间:2020-05-01 20:48:21      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:erb   val   自动   raw   orm   练习   新建   常见   关于   

https://zhuanlan.zhihu.com/p/68183990

我在知识星球收到的问题中,关于表格和矩阵(以下统称表格)总计行错误算是常见的问题之一了,不少初学者甚为不解,在Excel透视表中很常见的总计,为什么到了更强大的 PowerBI 中,反而会出现这么低级的错误呢?

并且碰到这个错误,很多人都束手无策,不知道该怎么办,或者干脆设置为不显示总计行了,其实没有必要,本文就来介绍一下为什么会出现错误,以及解决的办法。

总计的计算逻辑

 

在PowerBI的表格中,每一个数据都是根据当前的上下文计算出来的,包括总计,也就是说,总计是按照总计行的上下文独立计算的,而不是根据上面的明细相加得来的。

 

为了理解上面这段话的含义,请看下面的例子。

假设要计算每个产品的订单数量,根据订单表中的数据,新建个度量值,

 

系统订单数量 = COUNTROWS(‘订单‘)

 

在矩阵中显示如下:

 

技术图片

 

计算逻辑比较简单时,默认情况下总计行的数据是没问题的。

假设每种产品的订单中,都有两个是测试订单,也就是真实订单比系统中的订单数要少两个,那么真实订单的度量值如下:

 

实际订单数量 = COUNTROWS(‘订单‘)-2

把这个度量值放进来,看看是什么结果,

 

技术图片

 

可以看到每一个产品的实际订单数量都少了两个,计算是正确的,但总计行竟然也只少了两个,明显与明细数据之和不符!

这就是总计的计算逻辑,它不管上面的明细数据是多少,它只是在汇总的订单数量的基础上减去2,于是得到了4624。

理解了这个计算逻辑,下面就来看看如何解决。

 


 

总计错误的解决方案

既然我们想让总计等于上面明细之和,那么我们就按照这个逻辑构建一个度量值,

------------------

实际订单数量1 =

IF(

HASONEVALUE(‘产品‘[产品名称]),

[实际订单数量],

SUMX(

VALUES(‘产品‘[产品名称]),

[实际订单数量]

)

)

-----------------

这个度量值的先利用IF函数做个判断,如果当前上下文是产品名称,就计算 [实际订单数量],否则,就利用SUMX对所有的产品名称的 [实际订单数量]求和。

看一下计算结果,

 

技术图片

 

总计行得到了正确的结果。

实际上这个度量值的写法还可以继续简化,连IF判断都省略掉,直接用SUMX.

---------------

实际订单数量2 =

SUMX(

VALUES(‘产品‘[产品名称]),

[实际订单数量]

)

---------------

 

技术图片

 

同样得到了正确的结果。

这就是SUMX的强大之处,在明细行,利用VALUES函数获取当前的上下文,计算当前上下文的订单数量,在总计行,自动对筛选出的所有的产品名称的数据进行汇总。

[实际订单数量2]的写法,就是终极解决方案。

 

总结

 

为了使总计行计算出正确的结果,终极解决方案只需两步:

1、先正常写一个度量值,保证明细行正确;

2、在第1步度量值的基础上,套一层SUMX函数,即可保证明细行和总结行均正确。

然后使用第二步的度量值作为表格的值就可以了。

(如果熟练,你也可以一步写出最终的度量值)

记住这个终极方案DAX:

SUMX(
VALUES(明细行字段),
[明细行正确的度量值]
)

下次再遇到类似问题,你可以直接套用。

练习PowerBI时若没有数据,可以在公众号回复关键字"数据"获取我整理的近百个精选数据集。

如果文章对你有帮助,看完别忘了点个赞哦。

数据可视化之DAX篇(十七)Power BI表格总计行错误的终极解决方案

标签:erb   val   自动   raw   orm   练习   新建   常见   关于   

原文地址:https://www.cnblogs.com/qiu-hua/p/12814415.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!