鉴于这两项措施:
Measure1 = CALCULATE(CALCULATE(SUM([column]); Filter 1; Filter 2 ); Filter 3; Filter 4 )
Measure2 = CALCULATE(SUM([column]); Filter 1; Filter 2; Filter 3; Filter 4 )
为什么我会得到不同的结果?
答案 0 :(得分:1)
对于未来的读者,我想在这里提出一个非链接的答案。
Marco Russo在文章中解释道
Order of Evaluation in CALCULATE Parameters,
在Measure1
中,首先评估外部过滤器Filter 3
和Filter 4
,而在Measure2
中并行评估所有过滤器(并使用AND逻辑进行组合) )。
如果其中一个过滤器Filter 1
或Filter 2
删除Filter 3
或Filter 4
指定的任何过滤器上下文(例如,使用ALL()
之类的函数),那么你得到的结果与并行评估所有过滤器的结果不同。
Marco Russo给出的例子如下:
CALCULATE(
CALCULATE(
[MEASURE],
CUSTOMER[COUNTRY] = "ITALY"
),
ALL( CUSTOMER[COUNTRY] )
)
与
CALCULATE(
CALCULATE(
[MEASURE],
ALL( CUSTOMER[COUNTRY] )
),
CUSTOMER[COUNTRY] = "ITALY"
)
在第一个中,我们只过滤到ITALY
行,就像外部过滤器不存在一样。在第二个中,ALL()
函数剥离外部过滤器,因为它在之后被评估,并且您获得与所有国家/地区对应的行。
答案 1 :(得分:0)
我刚刚在Marco Russo撰写的这篇文章中找到了答案https://www.sqlbi.com/articles/order-of-evaluation-in-calculate-parameters/。