数据可视化之DAX篇(十七)Power BI表格总计行错误的终极解决方案
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表格总计行错误的终极解决方案的更多相关文章
- 数据可视化之DAX篇(二十七)半累加度量,在Power BI 中轻松处理
https://zhuanlan.zhihu.com/p/96823622 开始半累加的计算之前,我们先看看什么是累加.半累加以及不可累加数据. 在含有大量行的数据表中,各种数据处理语言,包括DAX ...
- 数据可视化之DAX篇(二)Power BI中的度量值和计算列,你搞清楚了吗?
https://zhuanlan.zhihu.com/p/75462046 对于初学者,总是会把度量值和计算列搞混,我也经常碰到这样的问题,有些星友用文章中的代码总是报错,发给我一看,才知道TA把本来 ...
- 数据可视化之DAX篇(十一)Power BI度量值不能作为坐标轴?这个解决思路送给你
https://zhuanlan.zhihu.com/p/79522456 对于PowerBI使用者而言,经常碰到的一个问题是,想把度量值放到坐标轴上,却发现无法实现.尤其是初学者,更是习惯性的想这么 ...
- 数据可视化之DAX篇(一)Power BI时间智能函数如何处理2月29日的?
https://zhuanlan.zhihu.com/p/109964336 今年是闰年,有星友问我,在Power BI中,2月29日的上年同期是怎么计算的? 这是个好问题,正好梳理一下,Power ...
- 数据可视化之DAX篇(二十八)Power BI时间序列分析用到的度量值,一次全给你
https://zhuanlan.zhihu.com/p/88528732 在各种经营分析报告中,我们常常会看到YTD,YOY这样的统计指标,这样的数据计算并不难,尤其是在PowerBI中,因为有时间 ...
- 数据可视化之DAX篇(二十四)Power BI应用技巧:在总计行实现条件格式
https://zhuanlan.zhihu.com/p/98975646 如何将表格或者矩阵中值的条件格式也应用于总计行? 目前PowerBI并不支持这种功能,无法在总计行或者小计行上应用条件格式, ...
- 数据可视化之DAX篇(二十一)连接表的几个DAX函数,一次全掌握
https://zhuanlan.zhihu.com/p/67015995 编写DAX代码进行业务分析时,经常会用到表与表之间的连接计算,比如在之前的产品关联分析一文中(如何用Power BI分析产品 ...
- 数据可视化之DAX篇(五) 使用PowerBI的这两个函数,灵活计算各种占比
https://zhuanlan.zhihu.com/p/57861350 计算个体占总体的比例是一个很常见的分析方式,它很简单,就是两个数字相除,但是当需要计算的维度.总体的范围发生动态变化时,如何 ...
- 数据可视化之DAX篇(十五)Power BI按表筛选的思路
https://zhuanlan.zhihu.com/p/121773967 数据分析就是筛选.分组.聚合的过程,关于筛选,可以按一个维度来筛选,也可以按多个维度筛选,还有种常见的方式是,利用几个特 ...
随机推荐
- 想要学深度学习但是没有GPU?我帮你找了一些不错的平台
本文始发于个人公众号:TechFlow,原创不易,求个关注 上次给大家推荐了免费的spark集群之后,就有很多小伙伴来问我有没有好的云GPU平台推荐.我一直没给大家推荐,主要原因是我常年使用Mac,对 ...
- 附022.Kubernetes_v1.18.3高可用部署架构一
kubeadm介绍 kubeadm概述 参考附003.Kubeadm部署Kubernetes. kubeadm功能 参考附003.Kubeadm部署Kubernetes. 本方案描述 本方案采用kub ...
- @topcoder - 2013TCO3A D1L3@ TrickyInequality
目录 @description@ @accepted code@ @accepted code@ @details@ @description@ 现有不等式组: \[\begin{cases} x_1 ...
- [Cadence] 10个Cadence AD PADS经典案例 2-12层板设计
[Cadence] 10个Cadence Allegro经典案例 2-12层板设计 自己保存的PCB例程资料分享 Allegro AD PADS看下面截图需要的拿去 下载链接 链接: https:// ...
- cb49a_c++_STL_算法_对所有元素排序_sort_stable_sort
cb49a_c++_STL_算法_对所有元素排序_sort_stable_sort sort(b,e) sort(b,e,p) stable_sort(b,e) stable_sort(b,e,p) ...
- Python学习日志-03
(3)如何运行程序 交互提示模式下编写代码: 最简单的运行Python程序的办法就是在Python交互命令行中输入这些程序.在cmd中输入python,不需要任何参数就可以进入Python交互命令行 ...
- java小项目——抽奖系统
来了来了!这不又到考试周了吗!愁人,又得复习,复习,复习!这段时间每天都在复习线代和高数!(说是复习,说实话其实是在预习,啊哈哈哈哈哈),得有一段时间都没有学到新的知识了,代码感觉都生疏了,惆怅.博客 ...
- 第二章、Web中使用shiro(实现登陆)
虽然Apache Shiro的核心设计目标允许它用于保护任何基于JVM的应用程序(如命令行应用程序,服务器守护程序,Web应用程序等),但本指南将着重讨论最常见的用例:确保运行的Web应用程序一个Se ...
- 利用synchronized解析死锁的一种形成方式
代码 import ... public class Test{ private static Object o1=new Object(); private static Object o2=new ...
- 3、尚硅谷_SSM高级整合_使用ajax操作实现删除的功能
点击删除的时候,要删除联系人,这里同点击编辑按钮一样给删除按钮添加点击事件的时候不能使用 $(".delete_btn").click(function(){ }); 这种方式,因 ...