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

时间:2018-09-10 21:33:43

标签: 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[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

1 个答案:

答案 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 )

我都没有测试过这两个,所以我不确定它们的性能如何。

希望有帮助!