在SUMX和CALCULATE中使用ALL有什么区别



在本例中(计算类别销售额与总销售额的比率(:https://learn.microsoft.com/en-us/dax/all-function-dax#example-1

公式为:

=
SUMX(
ResellerSales_USD,
ResellerSales_USD[SalesAmount_USD]
)
/ SUMX(
ALL( ResellerSales_USD ),
ResellerSales_USD[SalesAmount_USD]
)

在本例中(计算本年度产品销售额与总销售额的比率(:https://learn.microsoft.com/en-us/dax/all-function-dax#example-2

公式为:

=
SUMX(
ResellerSales_USD,
ResellerSales_USD[SalesAmount_USD]
)
/ CALCULATE(
SUM( ResellerSales_USD[SalesAmount_USD] ),
ALL( DateTime[CalendarYear] )
)

在第二个例子中,为什么我们不能使用类似于例子1的SUMX ALL来删除日历年过滤器?示例:

=
SUMX(
ResellerSales_USD,
ResellerSales_USD[SalesAmount_USD]
)
/ SUMX(
ALL( DateTime[CalendarYear] ),
ResellerSales_USD[SalesAmount_USD]
)

类似地,第一个例子可以用CALCULATE重写为:吗

=
SUMX(
ResellerSales_USD,
ResellerSales_USD[SalesAmount_USD]
)
/ CALCULATE(
SUM( ResellerSales_USD[SalesAmount_USD] ),
ALL( ResellerSales_USD )
)

代码

=
SUMX(
ResellerSales_USD,
ResellerSales_USD[SalesAmount_USD]
)
/ SUMX(
ALL( DateTime[CalendarYear] ),
ResellerSales_USD[SalesAmount_USD]
)

将不起作用,因为donominator处的SUMX正在DateTime[CalendarYear]列上迭代,因此不存在使ResellerSales_USD[SalesAmount_USD]列可访问的行上下文。此外,Date和ResellerSales之间的关系是一对多的,不可能使用RELATEDTABLE,但需要RELATEDTABLE和聚合器,例如

=
SUMX(
ResellerSales_USD,
ResellerSales_USD[SalesAmount_USD]
)
/ SUMX(
ALL( DateTime[CalendarYear] ),
SUMX( RELATEDTABLE(ResellerSales_USD), ResellerSales_USD[SalesAmount_USD])
)

相反,这一个等价于第一个示例

=
SUMX(
ResellerSales_USD,
ResellerSales_USD[SalesAmount_USD]
)
/ CALCULATE(
SUM( ResellerSales_USD[SalesAmount_USD] ),
ALL( ResellerSales_USD )
)

最新更新