zoukankan      html  css  js  c++  java
  • 数据可视化之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时若没有数据,可以在公众号回复关键字"数据"获取我整理的近百个精选数据集。

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

  • 相关阅读:
    LeetCode Flatten Binary Tree to Linked List
    LeetCode Longest Common Prefix
    LeetCode Trapping Rain Water
    LeetCode Add Binary
    LeetCode Subsets
    LeetCode Palindrome Number
    LeetCode Count and Say
    LeetCode Valid Parentheses
    LeetCode Length of Last Word
    LeetCode Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12814415.html
Copyright © 2011-2022 走看看