PowerBI 實現全動態圖表線 – 精雕細節,打造極致
- 2019 年 10 月 6 日
- 筆記

本文來自多個項目中的實際問題。如果你常用PowerBI,就會發現PowerBI默認的線圖有個很嚴重的缺陷就是無法動態設置均值線或固定值線,只能設置成為一個靜態的值。如下:

本文將引導大家一起實現如下高級效果:

甚至:

本文將學習到如下作圖高級技巧:
- 圖線位置根據用戶選擇範圍動態變化。
- 圖線本身不顯示數據標籤。
- 圖線末端顯示數據標籤。
- 主數據點顯示數據標籤。
- 指標可動態選擇。
- 計算圖線使用的全局範圍可動態選擇。
如果你能直接看懂上述作圖要求,就會發現這在PowerBI中是默認不可能完成的任務,再觀察上述的效果圖,你也會發現這很難完成,因此文本就來完成。
問題重述
為了更清晰該圖表的現實意義,這裡引述一個問題背景。(感謝Excel120熱心戰友提供真實場景)
業務背景:公司研發部門需要監控與統計各軟體項目開發效率,其指標為軟體開發效率(項目總工時/項目規模)。除了查看正常效率範圍內的項目,研發對異常項目更為關注。對異常項目的定義為:軟體開發效率值高於均值+3倍標準差,或低於均值+3倍標準差的項目。對於這些項目,管理層將進行干預。
需求描述: 製作軟體開發效率折線圖,其橫軸為項目編號,縱軸為軟體開發效率。 (1)折線圖含輔助線:折線圖需增加7條輔助線,分別為均值,均值+1倍,+2倍,+3倍,-1倍,-2倍,-3倍標準差。 (2)支援輔助線動態調整:即篩選條件改變後,項目範圍也隨著改變,對應的軟體開發效率均值、標準差也隨著改變,輔助線也隨著改變。
圖表難點: 當篩選條件改變後,無法做到軟體開發效率指標的均值、標準差也隨著改變,也就是說,均值,標準差是死的。
數據結構:

可以看出該數據結構非常簡單清楚,而就是這樣卻很難做出想要的圖。
問題泛化
為了使得該問題得到更一般的結果,我們將問題抽象成更為動態的需求,包括:
- 指標可以動態指定。
- 計算的範圍可以動態指定。
- 圖表的輔助線和主體數據應該以簡潔的方式給出。
實現方案
實現涉及的表:

結構組織:

簡單查看就是:

這裡的實際數據是叫做「項目匯總」的已匯總過的數據,而作圖就僅僅是針對該數據即可。
PowerBI 工程式結構安排 – MVC模式
利用本案例的機會,這裡淺談一下在PowerBI中如何組織複雜的輔助數據用於作圖。
不難發現,為了實現這種複雜的作圖效果,需要一些輔助表,這些輔助表完全是為了作圖目的存在,它們與業務數據模型沒有半毛錢關係。我們稱反應主要業務關係的表及關係為【業務數據模型】而僅僅用於輔助作圖的表及關係稱為【視圖數據模型】。
Excel120 將成熟的軟體工程學領域概念:MVC應用於此。觀察上述方案結構,不難發現從命名方式上,輔助於作圖的表被明顯標識。
實現只在端點處計算圖例
為了實現簡潔的表達效果,正常的線不應該顯示數據標籤而僅僅在端點處顯示,實現如下:

思路是:根據輔助的圖例數據,判斷當前應該繪製的圖例,並判斷如果位於端點處,則計算圖例,否則留空。而對於數據點則正常計算。
這裡其實並沒有解決對圖線的計算,因為根據PowerBI目前的圖表設置能力,是無法在一個圖中完成的。這裡必須使用疊圖技巧。
疊圖技巧的使用
在 PowerBI 中製作很多高級圖表效果,都需要用到該技巧,即把兩幅圖疊放在一起。如下:

疊圖的技巧要求對 PowerBI 的默認圖表類型和結構非常熟悉,以至於可以腦補出如何配合兩幅圖而形成統一的效果。因此這是一個很難描述的過程,初學者需要系統性學習 PowerBI 基礎才能領悟和運用該技巧。
在本例中,疊圖存在一個很大的障礙,那就是:必須確保兩幅圖有同樣的Y軸範圍,或者說只有在同樣的Y軸尺寸範圍下,將兩張圖疊放在一起才能有效地融為一體。在 PowerBI 中,目前無法動態的設定Y軸的範圍也是 PowerBI 亟待改進的問題。
呈現出區域的效果
如果說實現線圖是可以的,那麼在本案例中可以想像,如果用區塊條帶來反映區隔是很有意義的,如下:

而區域的條帶也是需要動態設置的並在端點接縫處與圖例融合為一體。PowerBI 默認也是沒有的,這裡使用堆積區域圖來實現,這樣就要動態計算每個區域部分的Y值高度,如下:

這裡使用的技巧是:利用 Y 值絕對高度大小來反推在堆積時的高度,而且要注意堆積時的順序,必須嚴格的保證這些精細的計算和條帶順序設置是正確的,才能使最終效果嚴絲合縫。
總結
本文並非是對 PowerBI 普通作圖能力的介紹,而是挑戰PowerBI默認不可能的實踐。該案例除了完成了預期效果,案例的實現在很多地方都體現了 PowerBI 高級DAX的使用技巧,包括:
- 基礎:按列排序
- 基礎:SWITCH TRUE 結構
- 高級:ALL 與 ALLSELECTED 的區別
- 高級:構造 DAX 計算表
- 基礎:PowerBI 基礎圖表
- 高級:圖表的限制與限制破除
- 高級:業務數據模型 與 視圖數據模型
實際內容以本文案例文件為準。本文題材來自戰友業務問題,具有很強的通用性和挑戰性,如果您也有同時具備通用性和挑戰性的 PowerBI 問題,歡迎提供。
——
本文含影片講解,年度訂閱會員自動更新。決定成為 PowerBI 高手的夥伴幾乎都是 Excel120 訂閱會員,本文又是一個例證。
非訂閱會員希望下載案例文件學習,可以分享轉發2小時後截圖私信獲得示例文件。
成為高手,不再猶豫