我已经构建了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秒钟。 显然,我错过了一些东西......
答案 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]