DAX的不同行为取决于嵌套

问题描述 投票:0回答:1

我想计算每个类别的总销售额的中位数。

如果我创建以下两个度量,它可以完美地运行:

SoS := SUM(Table1[Sales])
Median Category Sales := 
      MEDIANX(
              CALCULATETABLE(VALUES(Table1[Category]), ALL(Table1)), 
              [SoS]
              )

但是,如果我没有嵌套测量值,则不计算中位数,它只返回总和。

   Median without measure := 
      MEDIANX(
              CALCULATETABLE(VALUES(Table1[Category]), ALL(Table1)), 
              SUM(Table1[Sales])
              )

见下面的结果:

DAX Measures Nesting

为什么会这样?我认为这两种方法完全相同。

dax
1个回答
1
投票

实际上,第一种方法相当于以下内容:

Median Category Sales := 
MEDIANX(
    CALCULATETABLE(VALUES(Table1[Category]), ALL(Table1)), 
    CALCULATE(SUM(Table1[Sales]))
    )

SoS度量隐式地将其公式包装在CALCULATE中,这会导致通过VALUES提供的每个类别的上下文转换,从而正确计算销售额,从而计算中位数。

© www.soinside.com 2019 - 2024. All rights reserved.