1. 為什么要有計算組(calculation group)
因為指標(biāo)經(jīng)常設(shè)計MTD YTD PY YOY MOM等計算,如果給每個指標(biāo)都寫一個以上的時間智能函數(shù)拗馒,那么會寫很多重復(fù)的度量值路星,這些度量值的唯一不同就在于引用的基礎(chǔ)度量值。
比如:Sales.YTD = CALCULATE([Sales],DATESYTD('Calendar'[Date]))
如果需要添加更多度量值的YTD進(jìn)來诱桂,是不是可以只替換[Sales]這個度量值就行了洋丐?
計算組可以做到這個
有效的降低了我們重復(fù)開發(fā)的工作量
2. 步驟
1)打開pbi,然后點擊外部工具的“tabular editor”挥等,可以直接連接到pbi文件
(沒有的這個的話 百度一下 下載就行了)
2)點擊文件夾-新建組
3)新建度量值
注意在tabular editor中粘貼公式時友绝,不要前面的度量值名字,要從“=”后面開始粘貼公式肝劲。
4)應(yīng)用
在pbi中刷新后迁客,你可以看見多了一個文件夾郭宝,里面只有一列[Name]
然后我們可以將其他度量值也這么重復(fù)操作一下
現(xiàn)在讓我們嘗試應(yīng)用一下
基礎(chǔ)度量值放在value,日期放在行掷漱,計算組放在列:
成功完成
此外
1)還可以將計算組作為切片器進(jìn)行篩選
2)tabular editor里粘室,還可以設(shè)置計算組屬性
3. 進(jìn)一步
1)如何顯示當(dāng)期值
2)我想一部分度量值應(yīng)用計算組,另一部分不應(yīng)用 可以嗎
使用ISSELECTEDMEASURE 或SELECTEDMEASURENAME
--如果不是[Margin %]這個度量值卜范,則執(zhí)行這個運(yùn)算
IF (
NOT ISSELECTEDMEASURE ( [Margin %] ),
DIVIDE (
SELECTEDMEASURE (),
COUNTROWS ( 'Date' )
)
)
--另一種寫法
```IF (
NOT ( SELECTEDMEASURENAME () = "Margin %" ),
DIVIDE (
SELECTEDMEASURE (),
COUNTROWS ( 'Date' )
)
)
或者SELESTEDMEASURENAME也可以達(dá)到同樣效果育特,但是更推薦ISSELECTEDMEASURE,
因為1)SELESTEDMEASURENAME如果將后面度量值名字寫錯了先朦,不會報錯不容易發(fā)現(xiàn)缰冤;而ISSELECTEDMEASURE會報錯
2)如果度量值重命名了,SELESTEDMEASURENAME需要手動更改喳魏,而ISSELECTEDMEASURE會自動更改棉浸。
4. 應(yīng)用場景
1)時間期間對比
2)依據(jù)不同的日期字段進(jìn)行切換:根據(jù)訂單日期,根據(jù)發(fā)貨日期以及根據(jù)截止日期
https://www.sqlbi.com/articles/using-calculation-groups-to-switch-between-dates/
3)實現(xiàn)匯率轉(zhuǎn)換,同時需要依據(jù)不同的貨幣切換貨幣符號
4)格式批量設(shè)置(會覆蓋掉原本度量值的格式)
detail refer to
https://zhuanlan.zhihu.com/p/106009183
之后了解一下:
https://www.sqlbi.com/articles/using-calculation-groups-to-selectively-replace-measures-in-dax-expressions/
使用計算組選擇性地替換dax中的度量值
https://www.sqlbi.com/articles/avoiding-pitfalls-in-calculation-groups-precedence/
了解計算組中的優(yōu)先級