PowerBI帕累託分析,為什麼你做的累計佔比是錯誤的?
關於帕累託分析,大家用的比較多,有個小問題被很多人問過,就是計算出的累計佔比結果是錯誤的,這裡專門寫篇文章說明一下。
正常的帕累託分析是這樣的,以前的文章中曾經舉了個簡單的例子,
佔比 = DIVIDE([利潤額],CALCULATE([利潤額],ALL(‘資料表’)))
累計佔比 =var cur_rate=[佔比]return CALCULATE([佔比],FILTER(ALL(‘資料表’),[佔比]>=cur_rate))
如果你分析的資料表只有一個表,並且還有重複值,比如表是這樣的:
按上面的寫法計算的結果將是錯誤的,比如第一個值沒有資料,後面的也有錯誤,為什麼會這樣呢?
在計算佔比的時候,會自動彙總,A1的佔比是48%,但按上述累計佔比度量值的計算邏輯,FILTER的第一個引數是使用整個資料表作為行上下文,在每一行中計算佔比,不會按類別自動彙總,所以會出現上面的情況。
如果你還不理解,可以在資料表中新增一個計算列:
每行佔比 = DIVIDE([利潤],SUM(‘資料表’[利潤]))
來模擬看看每一行的佔比情況:
因為沒有任何一行的佔比,高於48%,所以A1對應的累計佔比是空值,A2的佔比是22%,只有43%大於等於22%,所以A2對應的的累計佔比是43%,其它的結果都是這個邏輯,你是不是清楚了?
所以只要有重複值,上述寫法得到的就是錯誤的結果,那麼應該如何修改呢?下面提供兩個方法:
方法一、修改累計佔比度量值
依然是利用這一個表,將累計佔比的度量值修改為:
它的邏輯是先在度量值內部構建一箇中間表,也就是上面度量值中VAR定義的 table_,它利用ADDCOLUMNS和SUMMARIZE函式構造了一個兩列的表,一列是不重複的產品類別,另一列是每個類別對應的佔比。
然後再計算大於等於當前產品類別佔比的累計值,就不會出錯了:
方法二、建立維度表,完善資料模型
還有一種方式是建立維度表,如果你的源資料裡沒有這張表,可以直接透過DAX新建表:
維度表肯定是不重複的,然後將維度表與事實表建立關係。
度量值的邏輯可以與最初的一樣,只是其中的欄位都改成維度表的欄位:
佔比 = DIVIDE([利潤額],CALCULATE([利潤額],ALL(‘產品維度表’)))
累計佔比 =
var cur_rate=[佔比]
return CALCULATE([佔比],FILTER(ALL(‘產品維度表’),[佔比]>=cur_rate))
並用維度表的欄位作為上下文,就可以正確的計算了:
是不是更簡單。
第二種才是PowerBI的自然做法,建立維度表,完善模型,用維度表的欄位作為上下文,每一個學習者都應該把這些操作,作為使用PowerBI的常識。
這也是資料模型的好處,建立一個規範的、良好的模型,可以用很簡單的DAX就能解決問題,相反,模型沒有建好,或者壓根沒有模型,匯入一張大表就直接著手分析,很可能事倍功半。
更多推薦:
喜歡別忘了點贊哦~
掌握一個技能
專研一個領域
成為更好的自己