數據可視化之powerBI技巧(十三)PowerBI作圖技巧:動態坐標軸


之前的文章中介紹了如何制作動態的分析指標,這篇進行文章再介紹一下如何制作動態的坐標軸。

 

假設要分析的數據為銷售額,分別從產品和地區兩個維度進行分析,要實現的效果是,如果選擇的是產品,則坐標軸是各個產品的名稱,對應的是各個產品的銷售額;如果選擇的是地區,則坐標軸為城市,展現的是各個城市的銷售額。

 

要達到這樣的效果,我們首先需要把城市名稱和產品名稱整合到一起,直接用DAX來進行整合出一張表,

 

坐標軸指標表 =
VAR table1=SELECTCOLUMNS(ADDCOLUMNS(VALUES('產品'[產品名稱]),"指標","產品"),"指標",[指標],"指標明細",[產品名稱])
VAR table2=SELECTCOLUMNS(ADDCOLUMNS(VALUES('客戶'[客戶城市]),"指標","地區"),"指標",[指標],"指標明細",[客戶城市])
RETURN UNION(table1,table2)

 

這個度量值主要是ADDCOLUMNS函數與SELECTCOLUMNS函數的密切配合,先用ADDCOLUMNS函數在提取的維度表上添加一列該維度的屬性,返回帶屬性值的表;然后用SELECTCOLUMNS命名字段名,返回兩個相同字段名的表,最后用UNION把兩個表合並成一張表。

 

根據上一篇文章關於DAX表函數的介紹,ADDCOLUMNS函數與SELECTCOLUMNS都是表函數,它們的第一個參數是表,返回的也是一張表,這是理解這兩個函數的關鍵。

 

創建的坐標軸指標表如下:

 

 

 

 

指標表創建好了,然后用該表中的[指標明細]作為坐標軸,並按[指標]字段做個切片器,這樣當選擇產品的時候,和產品對應的就是產品類別,地區也同理。

 

把銷售額作為值,生成一個柱形圖看看是什么樣的,

 

 

 

可以看到通過產品和地區的篩選,坐標軸確實動態切換了,但是數據卻明顯異常,沒有按照上下文進行計算,這是什么原因呢?

 

其實看到圖中的數據都是匯總數,就很容易想到,剛才生成的坐標軸指標表,沒有和訂單表建立關系,因為訂單表中的地區和城市分屬不同的字段,無法同時連接。

 

如果利用指標明細和訂單表中的產品類別建立關系,按產品類別作為坐標軸可以正常顯示,但是按地區就沒法顯示數據了,因為地區和訂單表沒有建立任何關系。

 

 

 

 

為了解決這個問題,這里要用到一個非常重要的函數:TREATAS,它的作用是在兩個表之間構建虛擬關系。

 

新建度量值如下:

 

分析數據 =
SWITCH(TRUE(),
SELECTEDVALUE('坐標軸指標表'[指標])="產品",CALCULATE([銷售額],TREATAS(VALUES('坐標軸指標表'[指標明細]),'產品'[產品名稱])),
SELECTEDVALUE('坐標軸指標表'[指標])="地區",CALCULATE([銷售額],TREATAS(VALUES('坐標軸指標表'[指標明細]),'客戶'[客戶城市]))
)

 

這個度量值先判斷切片器的選擇,如果選擇的是產品,則用TREATAS函數在坐標軸明細表與產品表之間構建虛擬關系,這樣[銷售額]就可以正常篩選計算了;選擇地區的時候亦然。

 

效果如下,

 

 

正是想要的結果。

 

不過當切片器不選擇或者多選的時候,又出現問題了,

坐標軸竟然同時顯示了城市和產品,這樣的比較顯然沒有任何意義,我們繼續優化。

 

為了避免多選或者不選的問題,這里利用HASONEFILTER函數進行判斷,HASONEFILTER函數的含義是判斷是否存在單一的篩選器。

 

優化思路是:如果單選坐標軸指標,就是單一的篩選器,按照上面的度量值正常顯示;如果不存在篩選器,或者存在多個篩選器,就上報一個錯誤。

 

分析指標的度量值修改如下,

 

分析數據1 =
IF(HASONEFILTER('坐標軸指標表'[指標]),
SWITCH(TRUE(),
SELECTEDVALUE('坐標軸指標表'[指標])="產品",CALCULATE([銷售額],TREATAS(VALUES('坐標軸指標表'[指標明細]),'產品'[產品名稱])),
SELECTEDVALUE('坐標軸指標表'[指標])="地區",CALCULATE([銷售額],TREATAS(VALUES('坐標軸指標表'[指標明細]),'客戶'[客戶城市]))
),
ERROR("數據錯誤,請單選坐標軸指標!")

)

 

 

這樣設置以后,效果如下,

 

 

 

 

這里利用ERROR函數故意上報一個錯誤,並提示報表使用者錯誤的原因和解決方式,

 

 

 

(現在最新的PowerBI的切片器已經可以設置為強制單選,可以不再攔截錯誤,這里只是提供一種思路)

至此,充分考慮了各種情況,利用DAX巧妙構建度量值,實現了坐標軸的動態切換。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM