MDX 计算成员性能问题

MDX Calculated Member Performance Issue

SELECT NON EMPTY {
    [Measures].[Production_Volume]
} ON COLUMNS,
NON EMPTY { (
    [Make].[Make ID].[Make ID].ALLMEMBERS
    * [Model].[Model Hierarchy].[MDL].ALLMEMBERS
    * [Customer].[Customer ID].[Customer ID].ALLMEMBERS
) } ON ROWS
FROM [Model_Cube]

此查询需要 10 分钟

[Measures].[Production_Volume] 是多维数据集中的计算成员,如果我将此成员的定义直接放在查询中,则花费的时间要少得多。

WITH MEMBER [Measures].[Production_Volume] AS 
([Measures].[Model Count],
               ([Status].[Status Type].&[T]
                ,[Mode].[Mode Type].&[A])
            ) 
    + Sum(
               ([HYBRID_MODELS]
                ,[Status].[Status Type].&[C]
                ,[Mode].[Mode Type].&[A])
            ,[Measures].[Model Count]
            )
SELECT NON EMPTY {
    [Measures].[Production_Volume]
} ON COLUMNS,
NON EMPTY { (
    [Make].[Make ID].[Make ID].ALLMEMBERS
    * [Model].[Model Hierarchy].[MDL].ALLMEMBERS
    * [Customer].[Customer ID].[Customer ID].ALLMEMBERS
) } ON ROWS
FROM [Model_Cube]

此查询需要 4 秒

无法理解两者之间的区别,我 运行 探查器但找不到任何区别,除了第一个查询显示飞行记录器快照事件第二个查询没有。

问题是我如何创建命名集“[HYBRID_MODELS]”。我将它们从 DYNAMIC 更改为 STATIC 这很有帮助。我所做的另一项更改是将 -{} 替换为 EXCEPT() 函数。这两项更改将查询时间从 30 分钟减少到 1 分钟!

希望这对有需要的人有帮助:)