表格模型多2个

时间:2014-11-04 14:06:01

标签: sql-server ssas ssas-tabular

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

这是(非常标准)模型:FactData --->帐户< --- AccountCustomerM2M --->客户

示例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] )
)

感谢您的帮助! :)

1 个答案:

答案 0 :(得分:2)

除非Customers表为空,否则示例1始终使用多对多计算,无论客户选择如何。也许你想写IF(COUNTROWS(所有(客户))> COUNTROWS(客户),......

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

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