多維度帕累託丨最終話(修訂)
最近事情比較多,學習的速度也慢了下來,慚愧。
白茶對近一個月所學的DAX進行了一次梳理,做出了一個動態多維度的帕累託圖,效果如下。
這個動圖包含了最近所學的相關DAX函式,那麼是如何實現的呢?
這是本次,白茶所使用的一份示例資料,可以說是白茶使用頻率最高的一份樣例了。匯入PowerBI中,系統會自動匹配模型關係,如下圖:
這是前期的準備工作,接下來開始對近期所學的相關知識進行梳理。
一、編寫基本的銷售金額、成本、利潤程式碼,如下:
銷售金額程式碼:
銷售金額 =
SUMX ( ‘銷售明細’, ‘銷售明細’[銷售數量] * RELATED ( ‘產品表’[銷售價] ) )
成本程式碼:
銷售成本 =
SUMX ( ‘銷售明細’, ‘銷售明細’[銷售數量] * RELATED ( ‘產品表’[成本] ) )
利潤程式碼:
利潤 =
[銷售金額] - [銷售成本]
結果如圖:
這裡面涉及到的知識點是:
當相關資料沒在一個表格裡面時,我們不能使用SUM進行聚合,需要使用迭代迴圈SUNX以及RELATED函式。
二、確立維度
通常情況下一組資料我們需要觀測的維度大概也就是三方面:
時間、財務、具體內容切換。
①、時間維度
好說,可以看得出來事實表中自帶銷售日期,選取年份字樣放入切片器中即可,結果如下:
具體的樣式可以去點選右上角調整。
也可以去設定中調整。
這樣就得到了符合我們心裡預期的大致效果,具體的細節根據個人喜好去調整,這裡就不贅述了。如果對銷售日期不滿意,也可以利用相關函式生成自己的日期表。後面的財務、觀測維度設定方法也是一樣的,不贅述。
②、財務維度
。財務維度說白了,就是利用切片器,可以動態的切換資料。
點選輸入資料,確定自己的表名,在列值中分別輸入銷售金額,利潤,結果如下:
接下來,輸入程式碼,將沒有關係的維度與度量值建立關係。
SWITCH寫法 =
SWITCH (
TRUE (),
SELECTEDVALUE ( ‘財務維度’[財務維度] ) = “利潤”, [利潤],
SELECTEDVALUE ( ‘財務維度’[財務維度] ) = “銷售金額”, [銷售金額],
BLANK ()
)
這裡涉及到的是SWITCH函式與SELECTEDVALUE函式,當然也可以用IF進行判斷,這裡就不贅述了,結果如下:
③、座標維度
。所謂的觀測維度,其實也就是座標維度,其根本原理,是將原本不在一個表中的資料,利用DAX建立在一個表格中,使其同處於一個維度之下,再利用虛擬關係,將原本沒有聯絡的表格強行建立關係。
建立維度表,輸入如下程式碼:
名稱與分店維度 =
VAR BC1 =
SELECTCOLUMNS (
ADDCOLUMNS ( DISTINCT ( ‘分店表’[分店名] ), “名稱與分店”, “分店” ),
“名稱與分店”, [名稱與分店],
“具體內容”, [分店名]
)
VAR BC2 =
SELECTCOLUMNS (
ADDCOLUMNS ( DISTINCT ( ‘產品表’[商品名稱] ), “名稱與分店”, “商品名稱” ),
“名稱與分店”, [名稱與分店],
“具體內容”, [商品名稱]
)
RETURN
UNION ( BC1, BC2 )
結果如圖:
在建模卡片下選擇新表,輸入DAX函式,得到我們需要的統一座標維度表。
再輸入如下程式碼將原本沒有聯絡的資料建立關係:
分析資料 =
VAR BC3 =
TREATAS ( VALUES ( ‘名稱與分店維度’[具體內容] ), ‘產品表’[商品名稱] )
VAR BC4 =
TREATAS ( VALUES ( ‘名稱與分店維度’[具體內容] ), ‘分店表’[分店名] )
RETURN
SWITCH (
TRUE (),
SELECTEDVALUE ( ‘名稱與分店維度’[名稱與分店] ) = “商品名稱”, CALCULATE ( [SWITCH寫法], BC3 ),
SELECTEDVALUE ( ‘名稱與分店維度’[名稱與分店] ) = “分店”, CALCULATE ( [SWITCH寫法], BC4 ),
BLANK ()
)
選擇柱型折線圖,將具體內容作為共享座標軸,將分析資料放入列值中,結果如下:
這樣的話我們就得到一個動態資料與動態座標結合在一起的動態圖,可以隨意的切換三種維度。涉及到的一些相關函式,在這裡就不贅述了。
三、帕累託累計佔比
三種維度我們得到了,接下來就是來編寫累計、佔比、以及累計佔比的程式碼。
累計程式碼:
累計 =
SWITCH (
TRUE (),
SELECTEDVALUE ( ‘財務維度’[財務維度] ) = “利潤”, CALCULATE ( [利潤], ALLSELECTED ( ‘銷售明細’[銷售數量] ) ),
SELECTEDVALUE ( ‘財務維度’[財務維度] ) = “銷售金額”, CALCULATE ( [銷售金額], ALLSELECTED ( ‘銷售明細’[銷售數量] ) )
)
佔比程式碼:
佔比 =
DIVIDE( [分析資料], [累計] )
累計佔比程式碼:
累計佔比 =
VAR SQ = [佔比]
RETURN
CALCULATE ( [佔比], FILTER ( ALL ( ‘名稱與分店維度’[具體內容] ), [佔比] >= SQ ) )
將累計佔比的程式碼放入剛才的視覺化外掛,放在行值位置。結果如下:
我們會發現似乎有些地方不對勁啊,有一些商品在2017年這個維度上是沒有消費的啊,不應該進行累計的啊!簡單,記得白茶之前提到過的篩選空值麼?最佳化我們的程式碼。
累計佔比 =
VAR SQ = [佔比]
RETURN
IF (
[分析資料] <> 0,
CALCULATE (
[佔比],
FILTER ( ALL ( ‘名稱與分店維度’[具體內容] ), [佔比] >= SQ && [分析資料] <> 0 )
)
)
結果如圖:
這次是不是很完美?
四、引數分類
那麼動態的帕累託圖到這裡告一段落了,但是我們並沒有對資料優先順序進行判定啊?這裡需要我們新增引數值。
在建模窗格下,選擇新增引數,分別新增三個引數,ABC。
引數A:
DAX=
GENERATESERIES( 1, 100, 1 )
引數B:
DAX=
GENERATESERIES( 0, 100, 1 )
引數C:
DAX=
GENERATESERIES( 0, 100, 1 )
這裡說一下,問什麼引數A的初始值是1,這是為了防止後面的計算出現問題。
將三個引數值放入環形圖中,新增切片器,這是為了方便我們在實際使用中能隨時對ABC三類劃分權重。
新增ABC三類的比例權重。
總體:
引數總體 =
[引數A 值] + [引數B 值] + [引數C 值]
A類:
A類比例 =
DIVIDE([引數A 值],[引數總體])
B類:
B類比例 =
DIVIDE([引數B 值],[引數總體])
C類:
C類比例 =
DIVIDE([引數C 值],[引數總體])
接下來,對資料進行判定分類,劃分出三種結果。輸入如下程式碼:
優先順序 =
VAR BC = [累計佔比]
RETURN
SWITCH ( TRUE (), BC <= [A類比例], “優先”, BC <= [A類比例] + [B類比例], “其次”, “最後” )
將其放入矩陣中檢視,結果如圖:
會發現又出現之前的毛病了,咋辦,最佳化程式碼唄:
優先順序 =
VAR BC = [累計佔比]
RETURN
IF (
[分析資料] <> 0,
SWITCH ( TRUE (), BC <= [A類比例], “優先”, BC <= [A類比例] + [B類比例], “其次”, “最後” )
)
結果如下:
是不是結果看起來舒服了很多?
五、最佳化
剩下最後的步驟,就是對各個視覺化外掛進行細節上的最佳化處理了,這裡就不過多的贅述了。
顏色配置,大小什麼的,可以按照個人喜好的來。
當然,也可以新增一個關於ABC三類計數的表格,以及一個銷售趨勢圖,讓你的報表看起來格調更高。
樣例連結:
http://
t。cn/A67zSEUM
小彩蛋:
1、ABC三類該如何計數呢?
2、帕累託該如何動態配色?
小夥伴們❤GET了麼?
白茶會不定期的分享一些函式卡片
(檔案在知識星球[PowerBI丨需求圈])
這裡是白茶,一個PowerBI的初學者。
下面這個知識星球是針對有實際需求的小夥伴,有需要的請加入下面的知識星球。
下一篇:工作彙報PPT