我正在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函数的工作原理,特别是在未传递任何过滤器参数的情况下。
编辑:答案在于下面指出的“上下文过渡”概念。
答案 0 :(得分:1)
使用CALCULATE
功能使DAX执行上下文转换。
CALCULATE在将其过滤器参数应用于原始过滤器上下文之前,将所有现有行上下文转换为等效的过滤器上下文。
有关此的更多详细信息,请查看我在上面引用的网站:
Understanding Context Transition。
在您的示例中,当您使用Group
时,就像写了CALCULATE
一样,每行CALCULATE(SUM(Set_2[Value]), Set_2[Group] = 1)
列中的值都充当过滤器。即使它没有显式过滤器,行上下文也可以充当过滤器。