-我使用SSAS 2012 SP4表格版本。 该多维数据集包含2个事实表,每个事实表使用相同的维度表(= 7个维度表)。 在两个事实表之间没有定义关系。
-在Fact2表中设置了以下措施:
Measure1 :=
IF (
SUM ( Fact1[ColumnA] ) = 0,
BLANK (),
IF (
SUM ( Fact2[ColumnB] ) > 0,
SUM ( Fact1[ColumnA] ) / SUM ( Fact2[ColumnB] ),
99
)
)
当我显示此度量和几个属性时,我的Excel报告很长才能刷新。
-当我激活探查器跟踪时,我可以看到在公式引擎中花费的时间为80%。 我试图使用像这样的函数DIVIDE()重写查询:
Measure1 := DIVIDE(sum(Fact1[ColumnA])/sum(Fact2[ColumnB]),99)
在这种情况下,报告速度很快并且查询持续时间更长。但是,因为我删除了IF函数,所以不再检查“ if sum(Fact1 [ColumnA])= 0”
可以重构此DAX公式以提高性能。并保持检查“ IF sum(Fact1 [ColumnA])= 0 THEN BLANK()”吗?
非常感谢您的帮助 Em
答案 0 :(得分:0)
当然,请尝试:
Measure 1 :=
VAR SUMA =
SUM ( 'Fact1'[ColumnA] )
VAR SUMB =
SUM ( 'Fact2'[ColumnB] )
VAR QUOT =
DIVIDE ( SUM ( 'Fact1'[ColumnA] ), SUM ( 'Fact2'[ColumnB] ) )
RETURN
SWITCH ( TRUE (), SUMA = 0, BLANK (), SUMB > 0, QUOT, 99 )
如果无法在度量中使用变量,请尝试以下操作:
Measure1 :=
SWITCH (
TRUE (),
SUM ( 'Fact1'[ColumnA] ) = 0, BLANK (),
SUM ( 'Fact2'[ColumnB] ) > 0, DIVIDE ( SUM ( 'Fact1'[ColumnA] ), SUM ( 'Fact2'[ColumnB] ) ),
99
)
另一种方法是创建一个计算列,如下所示:
result := DIVIDE ( SUM ( 'Fact1'[ColumnA] ), SUM ( 'Fact2'[ColumnB] )
)
然后,像这样写一个措施:
Measure1 :=
SWITCH ( TRUE (), [result] = 0, BLANK (), [result] > 0, [result], 99 )
我都没有测试过这两个,所以我不确定它们的性能如何。
希望有帮助!