一、背景故事
2020年第一天上班,B同學還沉浸在跨年的喜悅中,坐在工位上,喝了一口枸杞養生茶,随即打開了電腦,郵箱提醒老闆發來一封郵件,頓時心頭一緊,不會有重要工作吧,趕緊點開郵件,看着看着,眉頭漸舒,原來老闆讓他對19年所有客戶的銷售做排名展示,以了解公司頭部客戶去年銷售表現,具體要求為:
1.TOPN中的N值動态可選。2.除了TOPN中的客戶,其餘客戶銷售歸為“其他”組顯示。3.顯示TOPN和"其他"組的銷售占比情況。
B同學此時心中竊喜,這需求貌似在網上看到過現成解決方案,那就簡單了,打開度娘,照葫蘆畫瓢,不到半個小時,B同學就搞定把郵件發出。在釘釘上和同事聊了幾句,剛拿起茶杯,郵箱提醒老闆郵件又來了,是不是被我的效率震驚了?趕緊點開郵件,郵件大意如下:
1.對完成速度和質量表示認可。
2.對内容有了新的要求:
*對于TOPN客戶,不要彙總在一起,要看到客戶明細。
*對于KPI指标要實現動态切換,比如銷售額,銷量,利潤等。
3.中午十二點前要給到老闆。
B同學此時悲喜交加,新訴求看起來簡單,但是對于之前沒有過類似實操經驗的B同學來說,難度頗大,度娘這次也不好使了,看了一下時間,離十二點還有三個小時,燒香拜佛已然來不及,求人不如求己,B同學放下茶杯,扶了扶眼鏡,帶上耳塞,點開PBI,開整......
二、制作步驟
1.模型概覽
四個維度表(地區,客戶,産品,日期)與一個事實表(訂單)分别建立一對多的單向篩選關系。其餘四個是自建的輔助表。
根據老闆的要求,要實現對TOPN的客戶明細展示以及KPI指标的動态切換,那麼這裡需要建立三個輔助表,分别通過新建參數和新建表的方式,具體如下:
參數N(範圍1-50,50以後的客戶老闆也基本不會看了)
KPI類别表(便于實現KPI動态切換)
KPI類别表 = ( { ("銷售額", "1" ),( "銷量", "2" ),( "利潤額","3" ), ( "利潤率", "4" )},"KPI", [],"", [])
TOPN參數表(包含所有客戶姓名+其他,便于後續動态展示)
TOPN參數表 =
VAR =
( ( '客戶'[客戶名稱] ), "TOPN參數", [客戶名稱] )
VAR = { "其他"}
UNION ( , )
這個輔助表的建立很重要,是在後續可視化中将客戶組與“其他“組同時展示的關鍵。
2.建立度量值
涼菜上完了,硬菜馬上端上桌,需要建立的具體度量值如下所示。
先唠叨幾句,
要做好度量值的歸類整理和規範命名工作!
要做好度量值的歸類整理和規範命名工作!
要做好度量值的歸類整理和規範命名工作!
重要的事情說三遍!
否則後期度量多了之後你真的會懵逼!
簡單的基礎度量就不再花時間贅述了,下面重點對核心度量進行解釋說明。
base.kpi.auto =
VAR =
( 'KPI類别表'[KPI] )
(
,
"銷售額", [base.salse],
"銷量", [base.],
"利潤額", [base.],
"利潤率", [base.%]
度量本身不難,作用為實現對KPI的動态切換。
rank.kpi =
(
[base.kpi.auto],
( ( 'TOPN參數表'[TOPN參數] ), '客戶'[客戶名稱] )
看着也很簡單吧,但很重要,從模型關系圖中可以看到在這裡B同學并沒有将TOPN參數表與任何表建立關系,那麼該如何實現利用TOPN參數表的字段對KPI指标進行篩選呢?這裡我們用到了函數,通過共有字段[客戶名稱]建立虛拟關系連接兩表,這也是一種無侵入式的設計思路。
rank.rank =
RANKX ( ALL ( 'TOPN參數表'[TOPN參數] ), [rank.kpi] )
有了rank.kpi度量,那麼接下來就是自然的對此度量進行排名。
如果前面介紹的幾個度量可以稱之為後台度量或基礎度量,那麼後面我們要介紹的度量便可以稱為前端度量或展示度量。
先上效果圖:
對上圖進行簡單分析,有三個列字段,TOPN即之前建立的輔助表TOPN參數表,KPI即為核心指标,還有對KPI排名的RANK字段。
接下來重點講一下KPI以及RANK字段相關度量值的構建。
KPI字段度量值
n& =
VAR =
( 'TOPN參數表'[TOPN參數] )
VAR N =
TOPN ( [參數N 值], ( '客戶'[客戶名稱] ), [base.kpi.auto] )
(
TRUE(),
[rank.rank]
有話要說...