了解DAX CALCULATE函数

时间:2018-07-16 20:10:45

标签: powerbi dax

我正在Power BI中建立一个具有两个数据集的模型:

Set_1(只是每个组名的列表)

Group:
1
2
3

Set_2,每个组在不同数据集中的一堆值:

Group:    Value:
1         10
1         20
1         -7
2         100
2         -25
3         45
3         15
1         3

这些表按组关联。我想在Set_1上创建一个度量,以按Set_2中的组显示值的总和。我可以使用以下DAX公式进行操作:

GroupSum = CALCULATE(SUMX(Set_2, Set_2[Value]))

看起来像这样

Group:    GroupSum:
1         26
2         75
3         60

但是我不明白为什么CALCULATE函数不带任何过滤器上下文作为参数,但在这种情况下却如此。如果没有CALCULATE函数,

GroupSum = SUMX(Set_2, Set_2[Value])

看起来像这样:

Group:    GroupSum:
1         161
2         161
3         161

有道理。我只需要帮助了解Calculate函数的工作原理,特别是在未传递任何过滤器参数的情况下。

编辑:答案在于下面指出的“上下文过渡”概念。

1 个答案:

答案 0 :(得分:1)

使用CALCULATE功能使DAX执行上下文转换

  

CALCULATE在将其过滤器参数应用于原始过滤器上下文之前,将所有现有行上下文转换为等效的过滤器上下文。

有关此的更多详细信息,请查看我在上面引用的网站:
Understanding Context Transition


在您的示例中,当您使用Group时,就像写了CALCULATE一样,每行CALCULATE(SUM(Set_2[Value]), Set_2[Group] = 1)列中的值都充当过滤器。即使它没有显式过滤器,行上下文也可以充当过滤器。