DAX Calculate&SUMMARIZE 关键词的说明

本文详细介绍了DAX表达式中CALCULATE函数的使用方法,特别是在多对多关系或雪花模型中如何结合SUMMARIZE函数来定义具有联动效果的度量值。

https://technet.microsoft.com/en-us/library/ee634825.aspx


CALCULATE(<expression>,<filter1>,<filter2>…)

当第一个expression参数是Measure时, 后面的参数 filter1, filter2 等不能是bool型

如果expression参数是Measure时, 后面可以是个table形式的参数, 会对Measure所在的表进行filter(在共有的列上)

所以我们经常看到, CALCULATE的后几个参数可以是summarize函数, 因为它会返回一个table的子集(还是一个table)


似乎在tabular cube中有这样一个规则: 如果两张表存在直接的关联, 那么在查询时对其中一张表filter, 另一张表的Measure也会作出相应filter, 但在多对多关系中, 或者雪花模型中, 两个表的关系还夹着1张或更多中间表, 那么就需要使用CALCULATE 和 summarize的组合来定义Measure, 这样定义的Measure才会有联动的效果.

解讯以下dax代码:汇总表Gap颜色分类_Extended = VAR CurrentIndicator = SELECTEDVALUE(ExtendedSummarize[indicators]) VAR HasRemark = RIGHT(CurrentIndicator, LEN("remark")) = "remark" VAR IsNewSummary = CurrentIndicator IN { "实际总值汇总", "理论总值汇总", "Gap_数量汇总", "Share汇总", "实际生产比例汇总", "Gap_共享汇总" } // 排除 remark 和汇总指标 RETURN IF( HasRemark || IsNewSummary, BLANK(), VAR IsGapQuantityOrShared = RIGHT(CurrentIndicator, LEN("Gap_数量")) = "Gap_数量" || RIGHT(CurrentIndicator, LEN("Gap_共享")) = "Gap_共享" RETURN IF( NOT(IsGapQuantityOrShared), BLANK(), VAR CurrentBu = SELECTEDVALUE('datasynergyiq summarize'[BU]) VAR CurrentMaterial = SELECTEDVALUE('datasynergyiq summarize'[Commodity]) VAR CurrentSupplier = SELECTEDVALUE('datasynergyiq summarize'[Supplier]) VAR CurrentQuarter = SELECTEDVALUE(ExtendedSummarize[Quarter]) // 确定对应的 Gap_共享 指标名称 VAR GapSharedIndicator = IF( RIGHT(CurrentIndicator, LEN("Gap_数量")) = "Gap_数量", LEFT(CurrentIndicator, LEN(CurrentIndicator) - LEN("Gap_数量")) & "Gap_共享", CurrentIndicator ) // 获取 Gap_共享 值 VAR GapSharedValue = CALCULATE( MAX('datasynergyiq summarize'[data_values]), FILTER( ALL('datasynergyiq summarize'), 'datasynergyiq summarize'[indicators] = GapSharedIndicator && 'datasynergyiq summarize'[BU] = CurrentBu && 'datasynergyiq summarize'[Commodity] = CurrentMaterial && 'datasynergyiq summarize'[Supplier] = CurrentSupplier && 'datasynergyiq summarize'[Quarter] = CurrentQuarter ) ) // 转换为数字 VAR GapSharedNumber = IF( ISBLANK(GapSharedValue) || GapSharedValue = "", BLANK(), IF(ISERROR(VALUE(GapSharedValue)), BLANK(), VALUE(GapSharedValue)) ) // 返回颜色分类 RETURN SWITCH( TRUE(), GapSharedNumber <= -0.05 || GapSharedNumber >= 0.05, 1, // 红色 GapSharedNumber > -0.05 && GapSharedNumber < 0, 2, // 黄色 GapSharedNumber >= 0 && GapSharedNumber < 0.05, 3, // 绿色 BLANK() ) ) )
08-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱知菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值