MDX SUB-SELECT与何处性能问题

时间:2014-01-30 17:27:26

标签: performance query-optimization ssas mdx subquery

我已经构建了SSRS报告,该报告将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 个答案:

答案 0 :(得分: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]

选项2:使用SSRS表达式构建完美的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]