Optimization DAX:SSAS 2012表格模型中的优化措施
-我使用SSAS 2012 SP4表格版本。 多维数据集包含2个事实表,每个事实表使用相同的维度表(=7个维度表)。 两个事实表之间没有定义关系 -Fact2表中设置了以下措施:Optimization DAX:SSAS 2012表格模型中的优化措施,optimization,dax,division,measure,Optimization,Dax,Division,Measure,-我使用SSAS 2012 SP4表格版本。 多维数据集包含2个事实表,每个事实表使用相同的维度表(=7个维度表)。 两个事实表之间没有定义关系 -Fact2表中设置了以下措施: Measure1 := IF ( SUM ( Fact1[ColumnA] ) = 0, BLANK (), IF ( SUM ( Fact2[ColumnB] ) > 0, SUM ( Fact1[ColumnA] ) / SUM ( Fact2[Colu
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公式以提高性能。并保持检查“如果总和(Fact1[ColumnA])=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
)
如果无法在度量中使用变量,请尝试以下方法:
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 )
我还没有测试过这两个,所以我不确定它们的性能如何
希望有帮助 好的。但我使用SSAS 2012,我认为它不支持DAX中的VAR变量。这是2016年SSAS发布的。好吧,让我来做一些adjustments@ema请看我的编辑,我误读了原来的措施,我道歉。谢谢。它返回与初始查询相同的结果。但持续时间是相似的。每次我在Excel中选择新日期时,刷新时间都在18秒到51秒之间。你认为可以进行其他重写吗?因为除法函数非常快,我不知道直接将条件应用于除法结果是否更有效?类似于:result=DIVIDE(SUM('Fact1'[ColumnA]),SUM('Fact2'[ColumnB])。如果结果为0,则为空;如果结果为空,则为99,否则为空