0

谁能通过以下两个查询向我解释幕后究竟发生了什么?它们似乎表现出相同的结果,但对于在多对多关系中过滤表格模型 dax 中的度量,这“更好”...

这是(非常标准的)模型:FactData ---> Account <--- AccountCustomerM2M ---> Customer

示例 1:

SumAmountM2M - v1 :=
IF (
    COUNTROWS ( ALL ( Customers ) ) > 0,
    CALCULATE ( SUM ( 'FactData'[Amount] ), AccountCustomerM2M ),
    SUM ( 'FactData'[Amount] )
)

示例 2:

SumAmountM2M - v2 :=
IF (
    ISCROSSFILTERED ( 'Customers'[CustomerKey] ),
    CALCULATE ( SUM ( 'FactData'[Amount] ), AccountCustomerM2M ),
    SUM ( 'FactData'[Amount] )
)

谢谢你的帮助!:)

4

1 回答 1

2

示例 1 始终使用多对多计算,而不考虑客户的选择,除非客户表为空。也许你想写 IF ( COUNTROWS ( ALL ( Customers ) ) > COUNTROWS ( Customers ), ...

示例 2 仅执行多对多计算,无论您是直接还是间接选择客户(例如,您在切片器中选择了客户的城市)

示例 2 优化了计算,因为 ISCROSSFILTERED 函数只在查询计划中执行一次,并且比 COUNTROWS 方法更优化,在复杂迭代中可能更昂贵,因为在外部迭代的每一行上下文中执行。

马可

于 2014-11-04T17:28:13.187 回答