有人能向我解释一下下面两个问题的幕后究竟发生了什么吗?他们似乎表现出相同的结果,但这是“更好”过滤一个测量表模型dax跨多对多的关系.
以下是(相当标准的)模型: FactData --> Account <
示例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] )
)谢谢你的帮助!)
发布于 2014-11-04 17:28:13
示例1总是使用多到多的计算,而不考虑客户的选择,除非Customers表是空的。也许您想写IF ( COUNTROWS (所有客户))> COUNTROWS (客户),.
示例2只执行多对多的计算,无论是直接还是间接选择客户(例如,您在切割机中选择了客户所在的城市)。
示例2优化了计算,因为ISCROSSFILTERED函数在查询计划中只执行一次,并且比COUNTROWS方法更优化,而COUNTROWS方法在复杂迭代中的开销可能更高,因为它在外部迭代的每一行上下文中执行。
马可
https://stackoverflow.com/questions/26737141
复制相似问题