Power BI的總計爲什麼經常會出錯? -精彩推薦-

經常有人在後臺或者在我的知識星球中問我,爲什麼PowerBI做出來的總計是錯誤的,爲什麼會有這麼明顯的bug呢?其實這不是bug,以前我也解釋過,這裏再給大家說一下。

在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(明細行字段),

    [明細行正確的度量值]

)

下次再遇到類似問題,你可以直接套用。



-精彩推薦-

Power BI應用技巧:動態顯示最近N天的數據

PowerBI數據分析和可視化實戰案例

Power BI商業數據分析模型:RFM客戶價值分析

如何用PowerBI 打造高大上的財務報表分析報告?

採悟 from PowerBI星球

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章