DAX:在 SSAS 2012 表格模型中优化度量值



-我使用 SSAS 2012 SP4 表格版本。 多维数据集包含 2 个事实数据表,每个事实数据表使用相同的维度表(=7 个维度表(。 2 个事实数据表之间没有定义关系。

-在 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 公式以提高性能。并保持检查"如果总和(Fact1[列A](= 0然后BLANK(("?

非常感谢您的帮助 埃姆

当然,试试这个:

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 )

我还没有测试过其中任何一个,所以我不确定它们的性能如何。

希望对您有所帮助!

最新更新