在 Power BI 中筛选每类产品的前三名
本文翻譯自Marco Russo的文章——《Filteringthe Top 3 products for each category in Power BI》本文介紹了在Power BI中如何使每個類別的產品只顯示前三名的不同方法,其中詳細介紹了如何使可視化展現適應不同的模型和業務需求。
Power BI可視化中的視覺級篩選器可以幫你減少可視化中的元素數量。用這種方法可以根據其他切片器或視覺效果需要的選擇輕松地將篩選器應用于篩選報表中產品的前十名。
但是,針對希望在單個可視化圖表中能夠顯示每一類產品前三名或者自定義前N名的要求。僅僅通過PowerBI的用戶界面的圖形化操作并不能提供一種簡單的方法。而我們的目標是獲得如下圖所示結果:
通常,針對此問題的方法是創建一個復雜度量值,將不需要的結果隱藏起來。換句話說,它計算出產品的排名,將排名大于三的結果排除。這種方法雖然易于實現,但是需要修改所有顯示在可視化中的度量值,同時會使系統性能受到影響。
更好的解決辦法是創建一個用于視覺級篩選器的特定度量值,該度量值無需對其他度量值進行任何更改,僅針對每個產品執行一次,用以定義可見項組。我們將會看到解決此問題的不同選擇。
第一種簡單的解決方案是,首先度量每一類商品中各個產品的等級,之后在可視化中篩選此度量值的結果。
產品排名度量值返回一類產品中某個產品的排名,ISINSCOPE函數保證排名僅適用于單個產品名稱,而CALCULATETABLE函數檢索當前產品組所有在可視化中可見的產品名稱。例如,我們在可視化中使用了產品類別,相同的度量適用于可視化中其他任何用到的產品列。
請注意,CALCULATETABLE與ALLSELECTED(產品[產品名稱])的內部不同,實際上,度量值必須考慮到Product [Category]上的篩選器上下文,VALUES函數能夠完成此任務,而單獨的ALLSELECTED函數將忽略可視化應用的篩選器,從而為度量值產生錯誤的結果。
你將此度量值用于具有產品名稱粒度矩陣的可視化篩選器,該篩選器僅篩選返回排名小于或等于三的產品。
這種方法是有效的,并且可以在可視化中使用相同的Rank Product度量來準確地對每個類別中的產品進行排序。可視化圖表中還可以包括其他度量值,例如上一個圖中包含的保證金百分比。
替代篩選器的方法
產生替代方法的原因是覺得沒有必要計算所有產品的確切排名:讓它來檢索每個類別的前三個產品,并將結果應用于可視化篩選器。但是,TOPN內部計算的復雜度與RANKX相差無幾,因此這并不算一個真正的優化,更多算是一種DAX替代技術的練習。
因為我們并不能給出一個可以當做視覺級篩選器的表,所以我們可以創建一個度量值,如果在篩選器上下文中選擇的產品是可見的,則返回1,否則返回0. FilterTop3ByCat_Filter度量通過使用GENERATE和TOPN的組合生成每個類別需要篩選的產品列表,然后使用KEEPFILTERS將結果應用于篩選器上下文。
該方案的一個主要缺點是該方法必須專門設計一些應用于可視化的列。例如,樣本報告中使用的字段在行中可以看到“類別”和“產品名稱”列。
請注意,在準備可視化之前,會針對每種產品評估此度量。因此,在開始時應用ALLSELECTED函數對于消除依賴性是至關重要的,此依賴性產生于類別和產品名稱的組合的迭代期間發生的上下文轉換。這樣,無論在準備可視級篩選器時迭代的產品如何,Top3Cat變量都會產生相同的結果,從而對所有產品進行單一評估。
最終CALCULATE中的KEEPFILTERS將此可見產品列表與當前選擇組合在一起,產生該度量的預期結果:如果存在至少一個產品,則為1;如果通過新篩選器沒有可見產品,則為0。 此度量值是一個很好的練習,可以檢驗你對上下文轉換,ALLSELECTED和KEEPFILTERS的了解。
盡管這種方法在這種情況下沒有體現出任何優勢,但你可以創建專門為視覺級別篩選器設計的特殊DAX度量值。你可以自定義可視化中項目的選擇,從而克服Power BI用戶界面中可用選項的限制。這種方法的優點是數據模型中的現有度量可以無任何變化地工作 - 除非你希望將隱藏項目包含在組小計中,如以下部分所述。
顯示已過濾項目組的未過濾小計
通過使用視覺級篩選器,每一類產品的“銷售額”值對應于該類別的前三個產品銷售額的總和。換句話說,“銷售額”度量僅根據應用于可視化的篩選器顯示可見產品銷售額的總和。
如果要在類別級別顯示所有產品的總和,則需要一個未篩選銷售度量值,該度量值在滿足條件時忽略產品的篩選器。
“SalesUnfiltered”度量值僅返回“產品名稱”級別的“銷售額”,而在“類別”級別調用時,它會計算從“產品名稱”中刪除過濾器的“銷售額”。這樣,您可以顯示一個矩陣,根據所有產品的總銷售額對類別進行排序,而只有前三名產品顯示在矩陣的詳細信息中。
顯示已過濾項目組的排名
在前面的例子中,排名度量值在類別級別是空白的。如果要顯示類別和產品的排名,則需要以下度量,根據可視化的當前級別更改RANKX參數:
Rank Multi度量值使用Sales Unfiltered度量值正確對類別進行排序,如以下屏幕截圖所示:
如果你想創建一個排名,該排名會考慮在可視化當中篩選的產品的銷售額度量的排名,在類別級別中獲取正確的篩選器上下文涉及到一些復雜計算。需要ALLSELECTED條件來檢索在可視化中被過濾的類別和產品的組合。
因此,在遺失當前篩選器上下文之前,必須將當前類別的Sales Amount值存儲在變量中,以便使用適當的值執行RANKX。
根據書寫度量值產生了如下結果,根據可見的銷售額度量值精確計算類別和產品名稱的排名。
結論
利用書寫特定的度量值應用于可視化的視覺級篩選器是一種非常強大的技術,可以完全自定義報表中顯示的項目。此篩選器的存在需要特殊的度量值,以顯示與未包含在視覺級別篩選器中項目相關的值。
- PowerPivot工坊原創文章,轉載請注明出處!
如果您想深入學習微軟Power BI,歡迎登錄網易云課堂試聽學習我們的“從Excel到Power BI數據分析可視化”系列課程。或者關注我們的公眾號(PowerPivot工坊)后猛戳”在線學習”。
長按下方二維碼關注“Power Pivot工坊”獲取更多微軟Power BI、PowerPivot相關文章、資訊,歡迎小伙伴兒們轉發分享~
總結
以上是生活随笔為你收集整理的在 Power BI 中筛选每类产品的前三名的全部內容,希望文章能夠幫你解決所遇到的問題。