1. 为什么要有计算组(calculation group)
因为指标经常设计MTD YTD PY YOY MOM等计算,如果给每个指标都写一个以上的时间智能函数,那么会写很多重复的度量值,这些度量值的唯一不同就在于引用的基础度量值。
比如:Sales.YTD = CALCULATE([Sales],DATESYTD('Calendar'[Date]))
如果需要添加更多度量值的YTD进来,是不是可以只替换[Sales]这个度量值就行了?
计算组可以做到这个
有效的降低了我们重复开发的工作量
2. 步骤
1)打开pbi,然后点击外部工具的“tabular editor”,可以直接连接到pbi文件
(没有的这个的话 百度一下 下载就行了)
2)点击文件夹-新建组
3)新建度量值
注意在tabular editor中粘贴公式时,不要前面的度量值名字,要从“=”后面开始粘贴公式。
4)应用
在pbi中刷新后,你可以看见多了一个文件夹,里面只有一列[Name]
然后我们可以将其他度量值也这么重复操作一下
现在让我们尝试应用一下
基础度量值放在value,日期放在行,计算组放在列:
成功完成
此外
1)还可以将计算组作为切片器进行筛选
2)tabular editor里,还可以设置计算组属性
3. 进一步
1)如何显示当期值
2)我想一部分度量值应用计算组,另一部分不应用 可以吗
使用ISSELECTEDMEASURE 或SELECTEDMEASURENAME
--如果不是[Margin %]这个度量值,则执行这个运算
IF (
NOT ISSELECTEDMEASURE ( [Margin %] ),
DIVIDE (
SELECTEDMEASURE (),
COUNTROWS ( 'Date' )
)
)
--另一种写法
```IF (
NOT ( SELECTEDMEASURENAME () = "Margin %" ),
DIVIDE (
SELECTEDMEASURE (),
COUNTROWS ( 'Date' )
)
)
或者SELESTEDMEASURENAME也可以达到同样效果,但是更推荐ISSELECTEDMEASURE,
因为1)SELESTEDMEASURENAME如果将后面度量值名字写错了,不会报错不容易发现;而ISSELECTEDMEASURE会报错
2)如果度量值重命名了,SELESTEDMEASURENAME需要手动更改,而ISSELECTEDMEASURE会自动更改。
4. 应用场景
1)时间期间对比
2)依据不同的日期字段进行切换:根据订单日期,根据发货日期以及根据截止日期
https://www.sqlbi.com/articles/using-calculation-groups-to-switch-between-dates/
3)实现汇率转换,同时需要依据不同的货币切换货币符号
4)格式批量设置(会覆盖掉原本度量值的格式)
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/
了解计算组中的优先级