前段時間工作上面有一個需求,用戶想要自己通過切片器來控制坐標軸的維度,那么這遍文章我就主要是要介紹一下如何制作動態的坐標軸。
這次分析的數據是銷售的最低價格,分別從周日期、天日期和promotions三個維度進行分析,要實現的效果是,如果選擇了WEEK,那坐標軸就是周的名稱,展示周的最低銷售價格,如果選擇了DAY,那坐標軸則是天的維度,展示每天的最低銷售價格。(這里面有個划重點的需要,因為需要用交叉表的方式展示,所以表頭還有一個promotions名稱需要一並展示出來)
第一步:
Axis dimension Table =
VAR TABLE1=SELECTCOLUMNS(ADDCOLUMNS('T_SALES',"Index","Weekly","PromotionEN",T_SALES[PROMOTION]),"Index","Weekly","Promotion",'T_SALES'[PROMOTION],"Index detail",T_SALES[WEEKLY])
VAR TABLE2=SELECTCOLUMNS(ADDCOLUMNS('T_SALES',"Index","Day","PromotionEN",T_SALES[PROMOTION]),"index","Day","Promotion",'T_SALES'[PROMOTION],"Index detail",'T_SALES'[DATE])
RETURN UNION(TABLE1,TABLE2)
ADDCOLUMNS函數和SELECTCOLUMNS都是表函數,它們的第一個參數是表,返回的也是一張表,這是理解這兩個函數的關鍵。
這個度量值主要是ADDCOLUMNS函數與SELECTCOLUMNS函數的密切配合,先用ADDCOLUMNS函數在提取的維度表上添加一列該維度的屬性,返回帶屬性值的表;然后用SELECTCOLUMNS命名字段名,返回兩個相同字段名的表,最后用UNION把兩個表合並成一張表。這里面要注意的是promotion這個字段,因為不管是篩選日期還是周的時候,這個指標維度都需要展示出來,所以我們在做Union的時候需要都寫出來。
我們創建出來的表效果如下:
第二步:
創建我們需要展示的度量值
MINPRICE =
IF(HASONEFILTER('Axis dimension Table'[Index]),
SWITCH(TRUE(),
SELECTEDVALUE('Axis dimension Table'[Index])="Weekly",CALCULATE([MIN_PRICE],TREATAS(VALUES('Axis dimension Table'[Index detail]),'T_SALES'[WEEKLY]),TREATAS(VALUES('Axis dimension Table'[Promotion]),'T_SALES'[PROMOTION])),
SELECTEDVALUE('Axis dimension Table'[Index])="Day",CALCULATE([MIN_PRICE],TREATAS(VALUES('Axis dimension Table'[Index detail]),T_SALES[DATE]),TREATAS(VALUES('Axis dimension Table'[Promotion]),T_SALES[PROMOTION]))),
error("Single Select"))
最終效果如下
總結:
TREATAS:
1.維度表或事實表之間沒有可以單獨關聯的列;
2.出現多對多或其他無法使用直接的方法關聯的情況
3.數據模型非常復雜時,通過建立虛擬關系以減少對表格之間物理連接的依賴
(根據Marco的說法:額外的物理關系可能會在過濾器傳播到其他表時產生某種副作用)
將表表達式的結果作為篩選器應用於無關表中的列,表之間不存在關系時,最適合使用。
————————————————
版權聲明:本文為CSDN博主「cheryl丸子」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/hfjwanzi/article/details/103521995