DAX的不同行为取决于嵌套

时间:2017-12-16 18:04:09

标签: dax

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

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

$ python setup.py ls
running ls
ls -l
total 8
drwx------  3 hoefling  wheel   96 16 Dez 19:47 
com.apple.launchd.1X84ONyuu4
drwx------  3 hoefling  wheel   96 16 Dez 19:47 
com.apple.launchd.XbjjBY44Mf
drwxr-xr-x  2 root      wheel   64 16 Dez 19:47 powerlog
-rw-r--r--  1 hoefling  wheel  405 16 Dez 19:50 setup.py

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

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

见下面的结果:

DAX Measures Nesting

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

1 个答案:

答案 0 :(得分:1)

实际上,第一种方法等同于以下内容:

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

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