數據可視化之powerBI技巧(一)PowerBI可視化技巧:KPI指標動態展示之TOPN及其他


​本文來自星友Beau的分享,在進行數據指標的展現時,對關鍵的少數單獨展示,而對剩余的大多數折疊為其他項,是一個很常用的做法。Beau同學通過一個日常的辦公場景,詳細介紹了PowerBI實現的步驟,值得大家借鑒。

KPI指標動態展示之TOPN及其他

作者:Beau

 

一、背景故事

 

2020年第一天上班,B同學還沉浸在跨年的喜悅中,坐在工位上,喝了一口枸杞養生茶,隨即打開了電腦,郵箱提醒老板發來一封郵件,頓時心頭一緊,不會有重要工作吧,趕緊點開郵件,看着看着,眉頭漸舒,原來老板讓他對19年所有客戶的銷售做排名展示,以了解公司頭部客戶去年銷售表現,具體要求為:

1.TOPN中的N值動態可選。

2.除了TOPN中的客戶,其余客戶銷售歸為“其他”組顯示。

3.顯示TOPN和"其他"組的銷售占比情況。

B同學此時心中竊喜,這需求貌似在網上看到過現成解決方案,那就簡單了,打開度娘,照葫蘆畫瓢,不到半個小時,B同學就搞定把郵件發出。在釘釘上和同事聊了幾句,剛拿起茶杯,郵箱提醒老板郵件又來了,是不是被我的效率震驚了?趕緊點開郵件,郵件大意如下:

 

1.對完成速度和質量表示認可。

2.對內容有了新的要求:

*對於TOPN客戶,不要匯總在一起,要看到客戶明細。

*對於KPI指標要實現動態切換,比如銷售額,銷量,利潤等。

3.中午十二點前要給到老板。

B同學此時的心情悲喜交加,新訴求看起來簡單,但是對於之前沒有過類似實操經驗的B同學來說,難度頗大,度娘這次也不好使了,看了一下時間,離十二點還有三個小時,燒香拜佛已然來不及,求人不如求己,B同學放下茶杯,扶了扶眼鏡,帶上耳塞,點開PBI,開干......

二、制作步驟

 

1.模型概覽

四個維度表(地區,客戶,產品,日期)與一個事實表(訂單)分別建立一對多的單向篩選關系。其余是三個自建的輔助表以及一個存放度量值的表。

2.構造輔助表

 

根據老板的訴求,要實現對TOPN的客戶明細顯示以及KPI指標的切換,那么這里需要建立三個輔助表,具體如下:

參數N(范圍1-50)

 

 

KPI類別表(便於實現KPI動態切換)

 

KPI類別表 =
SELECTCOLUMNS (   
 { ("銷售額", "1" ),( "銷量", "2" ),( "利潤額","3" ), ( "利潤率", "4" )},  
 "KPI", [Value1],   "orderby", [Value2])

TOPN參數表(包含所有客戶姓名+其他,便於后續動態展示)

 

TOPN參數表 =
VAR customer =   
 SELECTCOLUMNS ( VALUES ( '客戶'[客戶名稱] ), "TOPN參數", [客戶名稱] )
VAR others = { "其他"}
RETURN    UNION ( custrom, others )

這個輔助表的建立很重要,是在后續可視化中將客戶組與“其他“組同時展示的關鍵。

 

 

3.建立度量值

 

涼菜上完了,硬菜馬上端上桌,需要建立的具體度量值如下所示。

 

 

先嘮叨幾句,對於度量值要做好歸類整理和規范命名工作,否則后期度量多了之后你真的會懵逼(關於度量值的歸類整理可參考:利用這3個步驟,輕松管理你的度量值

簡單的基礎度量就不在花時間贅述了,下面重點對核心度量進行解釋說明。

base.kpi.auto=
VAR kpiname =   SELECTEDVALUE ( 'KPI類別表'[KPI] )
RETURN    
SWITCH ( kpiname,      
 "銷售額", [base.salse],      
 "銷量", [base.volume],      
 "利潤額", [base.Profit],       
"利潤率", [base.Profit%]   
 )

度量本身不難,作用為實現對KPI的動態切換。

rank.kpi=
CALCULATE (   
[base.kpi.auto],    
TREATAS (VALUES ( 'TOPN參數表'[TOPN參數] ), '客戶'[客戶名稱] ))

看着也很簡單吧,但很重要,我們從模型關系圖中可以看到在這里B同學並沒有將TOPN參數表與任何表建立關系,那么該如何實現利用TOPN參數表的字段對KPI指標進行篩選呢?這里我們用到了TREATAS函數,通過共有字段[客戶名稱]建立虛擬關系連接兩表,這也是一種無侵入式的設計思路。

rank.rank=RANKX ( ALL ( 'TOPN參數表'[TOPN參數] ), [rank.kpi] )

有了rank.kpi度量,那么接下來就是自然的對此度量進行排名。

如果前面介紹的幾個度量可以稱之為后台度量或基礎度量,那么后面我們要介紹的度量便可以稱為前端度量或展示度量。

先上效果圖:

對上圖進行簡單分析,有三個列字段,TOPN即之前建立的輔助表TOPN參數表,KPI即為核心指標,還有對KPI排名的RANK。

接下來重點講一下KPI以及RANK度量值的構建

 

KPI度量值

view.topn&others=
VAR top_category =   SELECTEDVALUE ( 'TOPN參數表'[TOPN參數] )
VAR N =    TOPN ( [參數N 值], VALUES ( '客戶'[客戶名稱] ), [base.kpi.auto] )
RETURN    
SWITCH ( TRUE(),       
[rank.rank] <= [參數N 值],[rank.kpi],       
top_category = "其他", CALCULATE ([base.kpi.auto], EXCEPT ( ALLSELECTED ( '客戶'[客戶名稱] ), N ) ) 
)

整體思路是將參數N值和[rank.rank]進行對比,小於等於時顯示[rank.kpi],其次當'TOPN參數表'[TOPN參數]=“其他”時,顯示除TOPN值以外的客戶匯總值,要重點注意函數EXCEPT在這里的使用邏輯,這里作為獲取差集來使用。

RANK度量值

view.rank=
VAR top_category=   SELECTEDVALUE ( 'TOPN參數表'[TOPN參數] )
RETURN    
SWITCH (        
TRUE(),      
 HASONEVALUE ( 'TOPN參數表'[TOPN參數] ) && [view.topn&others] <> 0  && [rank.rank] <= [參數N 值], [rank.rank],      
 HASONEVALUE ( 'TOPN參數表'[TOPN參數] ) && [view.topn&others] <> 0  && top_category = "其他", 51    )

回到效果圖,能看出對於RANK字段,我們實現了客戶KPI的降序排列,同時也將“其他”放在表格底部且不存在RANK值,大家這里會發現要實現這樣的效果,通過構建輔助表的常規方式也許可以實現,但是非常復雜,這里B同學采用了曲線救國的方法,我們給到“其他”一個很大的RANK數字,同時將這個數字顏色設置成與底色一致,那么就變相的實現了隱藏RANK值的目的。上面度量中的RANK值設置為51就是出於這個目的。

4.制作可視化

 

做完上面的工作,時間已到了十一點半,B同學長舒了一口氣,還好,核心工作已經完成,下面就剩可視化的展現。

老板要求看到累計占比,首先想到的就是折線和簇狀柱形圖,加切片器,調位置,上配色。一氣呵成,最終效果如下圖所示:

 

這時鬧鍾響了,還剩最后五分鍾,上傳,發送,B同學終於趕在12點前將郵件發出。

對着電腦屏幕,B同學陷入了沉思,切片維度能否加入年,季,月?對於TOPN客戶能否進行ABC分析?能否將客戶維度擴展到其他維度?是否應該第一次交差就做仔細思考而不是敷衍了事?茶雖已涼,心卻很熱,B同學發現能做的還有很多,這僅僅是開始......

 

三、寫在最后

通過本文希望能讓大家對(TOPN明細+其他)及KPI指標動態展示有較完整且清晰的了解。

文章有干貨也有情懷,在職場中的小伙伴們,是否從B同學的身上依稀看到了當年的自己,希望大家都能在新的一年中,發現關於自己更多未知的可能。

本人能力有限,文中如有不當之處,請各位小伙伴給予批評指正。

最后感謝@佐羅老師的數據源,感謝@采悟老師和@天行老師的不吝指導,他們不間斷高質量的輸出,使我受益良多,站在巨人的肩膀上,會讓我看的更遠。

PS:仔細看,圖中有亮點,源文件中有更多驚喜哦!


免責聲明!

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



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