數據可視化之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時若沒有數據,可以在公眾號回復關鍵字"數據"獲取我整理的近百個精選數據集。

如果文章對你有幫助,看完別忘了點個贊哦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM