MDX 子选择与性能问题

Posted

技术标签:

【中文标题】MDX 子选择与性能问题【英文标题】:MDX SUB-SELECT vs WHERE PERFORMANCE ISSUES 【发布时间】:2014-01-30 17:27:26 【问题描述】:

我已经构建了 s-s-rS 报告,它将 CustomerID 作为参数并使用它运行 MDX 查询。

使用 WHERE 子句只需 1 秒即可运行,而如果我将其传递给 SUBSELECT 子句则需要 13 秒! 而且我必须使用 SUBSELECT 因为我想在结果中显示成员的姓名

长查询的语法是:

SELECT NON EMPTY  [Measures].[Revenue]  ON COLUMNS,
NON EMPTY  ([CUBE DIM DATE].[Month CD].[Month CD].ALLMEMBERS *
[CUBE DIM CUSTOMER].[Account MNG].[Account MNG].ALLMEMBERS * 
[CUBE DIM PRODUCT].[Product CD].[Product CD].ALLMEMBERS ) 
DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME, MEMBER_KEY ON ROWS FROM 
( SELECT ( [CUBE DIM CUSTOMER].[Customer No].&[111111])   on 0 from   [CUBE_Prod] )

所以如果我使用的不是最后一行:

[CUBE_Prod]  WHERE [CUBE DIM CUSTOMER].[Customer No].&[111111]

...其余的都保持不变,然后只需要 1 秒。 显然,我错过了一些东西......

【问题讨论】:

如果您正在生成查询,您知道客户编号,并且可以将其放入报告中而无需查询返回。 【参考方案1】:

想到几个选项...

选项1:使用WHERE子句版本并创建计算成员以在结果集中显示切片器成员值...

WITH MEMBER SlicerValue AS
    IIF(
        IsEmpty([Measures].[Revenue])
        ,NULL
        ,[CUBE DIM CUSTOMER].[Customer No].CurrentMember.MemberValue
    )
SELECT 
    NON EMPTY  
         SlicerValue
        ,[Measures].[Revenue] 
     ON COLUMNS, 
    NON EMPTY 
        ( 
            [CUBE DIM DATE].[Month CD].[Month CD].AllMembers * 
            [CUBE DIM CUSTOMER].[Account MNG].[Account MNG].AllMembers * 
            [CUBE DIM PRODUCT].[Product CD].[Product CD].AllMembers 
        )
     Dimension Properties MEMBER_CAPTION, MEMBER_UNIQUE_NAME, MEMBER_KEY ON ROWS
FROM    [CUBE_Prod]
WHERE   [CUBE DIM CUSTOMER].[Customer No].&[111111]

方案二:使用s-s-rS表达式构建完美MDX。在下面的代码中,您将引用参数值,以便“[CUBE DIM CUSTOMER].[Customer No].&[111111]”是动态的。

SELECT 
    NON EMPTY  
         [Measures].[Revenue] 
     ON COLUMNS, 
    NON EMPTY 
        ( 
            [CUBE DIM DATE].[Month CD].[Month CD].AllMembers * 
            [CUBE DIM CUSTOMER].[Account MNG].[Account MNG].AllMembers * 
            [CUBE DIM PRODUCT].[Product CD].[Product CD].AllMembers *
            [CUBE DIM CUSTOMER].[Customer No].&[111111]
        )
     Dimension Properties MEMBER_CAPTION, MEMBER_UNIQUE_NAME, MEMBER_KEY ON ROWS
FROM    [CUBE_Prod]

【讨论】:

以上是关于MDX 子选择与性能问题的主要内容,如果未能解决你的问题,请参考以下文章

MDX - 过滤的 CROSSJOIN 计数 - 性能问题

如何评估 MDX 在 OLAP 处理中的性能

如何将带有子选择的 SQL 查询转换为 MDX 查询?

CSS 子选择器性能与类膨胀

联合 MDX 中的两个子选择

删除性能与选择多个连接?