文/陸文捷
物流供應鏈優化分析師,Power BI愛好者,知乎:
Power BI的DAX不但能用來動態敏捷計算解決業務問題,還能控制可視化圖表的展現,可謂里外一把抓的能手。本文通過一個示例,來體驗DAX別樣的威力吧~
預設場景:建立一個訂單ID-產品名稱-訂購數量的明細。Power BI的默認顯示樣式,不論是表格還是矩陣,無外乎隔行交錯顯示,像下圖這樣:
或者表頭+表體+匯總行的三段式分布,像這樣:
這樣的布局在視覺上無法一目了然地定位每個訂單ID的明細。通過DAX,則可以實現這樣的排布,
相同訂單ID的背景顏色一致并交錯分布,這樣就可以更直觀按顏色來區分不同ID的訂單明細,是不是很清晰呢?
實現的原理是利用DAX構建度量值,分兩步實現:
1、對訂單ID按字段值進行排名
2、用上一步的排名度量值的奇偶性定義報表字段的背景色
下面進入詳細的實現步驟,對訂單ID排名需要用到RANKX函數,同學們可以參考學習。
度量值代碼如下:
這個度量值的邏輯是:
1.通過VAR構建所選訂單ID的中間表,作為RANKX的第一參數
2.通過VAR獲取當前上下文的訂單ID
3.獲取對當前訂單ID在報表中的訂單ID 排名。這里用到了RANKX的第三參數,也就是當前訂單ID值,該ID會在訂單ID列中迭代獲相應排名
將這個度量值放到矩陣里看看效果:
接著用排名數值是否可以整除2定義奇偶性:
訂單ID. = MOD ( [Rank.訂單ID], 2 )
其返回結果是0(偶數)或1(奇數):
至此DAX函數構建完成。
最后就是利用條件格式,來編輯報表字段背景顏色,按0或1指定兩種不同顏色:
稍顯麻煩的是每一個報表字段都得按同樣的步驟設置一次,希望微軟在后續的版本更新里可以提供全字段設置的選項。
全部定義之后就能實現上面介紹的按不同的訂單ID來交錯顯示背景顏色了。
類似的,還可以對字體,圖標等進行動態的定義控制,來實現默認類型之外的布局風格。
總結
本文的DAX驅動可視化原理類似于Excel借助輔助列設置條件格式的方法。通過構建中間表->按特定字段排名->建立輔助度量值并定義格式的步驟實現。實踐中對RANKX的第三參數使用也加深了理解。伙伴們也可舉一反三,實現更多靈活多變的控制。
參考文章:
示例源數據來自于@BI佐羅老師PBI練習素材