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 子选择与性能问题的主要内容,如果未能解决你的问题,请参考以下文章