Power BI從零開始動態實現TOPN及其他 -精彩推薦-

   文/大臉貓    8年汽車行業數據分析經驗,擅長跨行業快速理解業務並搭建模型,利用Power BI,Python等工具實現業務及報表自動化,相比技術更關注如何落實實際業務場景的解決方案。

最近在做企業內部培訓的時候,碰到一個實際業務問題:

在競爭品牌分析的時候,同事製作了一個餅圖,用於顯示不同品牌的市場份額。

但是他需要動態選擇時間或者細分市場,品牌實在太多了,如何讓圖表自動顯示TOP3的品牌並將剩餘的品牌歸類到“其他品牌”中進行顯示呢?

下面來複盤一下我們的解決方案,POWER BI的迷人之處在於永遠不止一種方案或者思路,如果你有更好的解決方法,歡迎分享。

爲了便於大家理解,我將數據極可能的簡化,避免數據認識負擔。

假設我有這樣一份數據,包含品牌,銷量,以及年月。

初步製作了這樣一張餅圖:

現在想實現的目標是:

當動態選擇年月切片器的時候,在這個圖中只顯示出當月TOP 3銷量的品牌,剩下的品牌自動歸類到“其餘品牌”中進行計算。


看似非常清晰簡單的需求對不對,但是實現起來是不是感覺無處下手?


我們來理清一下思路:


問題1:動態圖例問題,如何實現TOP 3品牌的顯示?


第一反應是利用篩選器,以銷量作爲判斷基準,實現TOP 3,於是我嘗試了一下:

這樣是實現了動態顯示TOP 3的品牌,但是剩下的其餘品牌怎麼辦?


於是換個思路,我們想要動態顯示TOP 3和剩餘品牌,是不是可以翻譯一下?


永遠只顯示銷量前三的品牌,再加一個品牌,它的名字叫“其它品牌”?


讓它永遠顯示 TOP 4個品牌,其中人工賦予“其他”這個品牌永遠爲最大銷量?

感覺這個思路有戲,開始嘗試起來。


要想實現這個效果,那我要首先建立一個含"其他品牌"的全量品牌數據


選擇新建表,使用Union和Values函數即可。



然後建立這個品牌和銷量表之間的關係:


接下來做一個簡單的測試:


先快速建立一個表格,使用剛剛建立的品牌字段加銷量字段:


可以看到“其他品牌”暫時沒有顯示出來,因爲它本身沒有意義,自然篩選不出銷量數據。


這裏我們編寫一個新的銷量度量值TOP4品牌銷量標準,將“其他品牌”賦予銷售量數據,它將僅用於我們動態篩選TOP4品牌: 

TOP4品牌銷量標準 =

IF(

    SELECTEDVALUE('全品牌數據'[品牌]) = "其他品牌", 10000,

    SUM('分品牌銷量'[銷量])

)


這樣我們就成功賦予了”其他品牌”一個銷量,這個銷量我們設置爲不可能實現的最大值,比如10000,現在我們再來嘗試一下:


成功了,現在我們基於TOP4品牌銷量標準篩選前4個品牌,成功實現了每次都動態顯示銷量前3品牌的名稱加上“其他品牌”。


接下來新的問題來了:

問題2:如何讓其他品牌顯示正確的銷量?


我的思路是編寫一個度量值,利用變量先計算出TOP3的度量值,再反減出其他品牌的合計值即可:


1、全品牌銷量數據應該很好寫,用Calculate + ALL。

2、TOP3品牌的銷量數據需要用到TOPN,TOPN可以理解爲一個迭代函數,迭代“全品牌數據”這張表,同時基於剛剛寫的[TOP4品牌銷量標準],取出TOP 4的品牌(由於人工賦予了一個“其他品牌”銷量值,所以在取出TOP3品牌的時候需要考慮在內)。

3、最後用一個IF和SELECTEDVALUE實現“其他品牌”銷量的正確顯示。



效果如下:

大功告成!成功實現了動態顯示TOP3和其他品牌的正確銷量!


接下來就可以將表格改成餅圖啦:


這其實屬於POWER BI常用的一種套路,利用度量值巧妙實現一些比較個性化的需求。


接下來我們再來拓展一下,能不能實現動態顯示TOPN品牌並自動將剩餘品牌歸類呢?


要實現動態TOPN,首先肯定是要先建立一個參數表,點擊新建參數:


有了參數,和剛纔相同的思路:


問題1:動態圖例問題,如何實現TOP N品牌的顯示?


可以翻譯一下問題:如何只顯示N+1個品牌,其中1個是永遠排第一的“其他品牌”, 剩下的是銷量排名前N的品牌?


這裏需要繼續借助一個輔助度量值排名了,新建度量值:


這裏利用剛剛建立的[TOP4品牌銷量標準]這個度量值,還記得嗎,這個度量值是爲了賦予“其他品牌”最大銷量值。


這裏用到了一個小技巧,我們要把所有排名在N+1之後的品牌全部賦予一個固定排名數字:0,然後在篩選器裏屏蔽這個排名爲0的品牌,這樣就成功實現了我們的目標。

問題2:如何讓其他品牌顯示正確的銷量?


這個就簡單啦,還是利用我們剛剛建立的[銷量(含其他品牌)]度量值,只要把剛剛設置的數字3替換成參數N即可。


我們來看一看效果:


至此,還有一個細節問題,現在的圖例默認是按照銷量大小排序的,如果我想讓“其他品牌”永遠排序最後一位,該如何實現呢?


很簡單,還是利用度量值,我們新建一個度量值叫做[品牌排序參照]:

品牌排序參照 =

IF(SELECTEDVALUE('全品牌數據'[品牌]) = "其他品牌", 

    0, [銷量(含其他品牌)])

然後將這個度量值拖到工具提示,選擇排序方式按照[品牌排序參照]排序。

最終效果如下:

好啦,目標達成,現在你也可以動手試試,能否幫助你解決一些類似的日常業務場景吧! 

-精彩推薦-

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

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

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

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

採悟 from Power BI 星球

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