使用.Lag()计算度量的MDX查询优化

时间:2013-09-25 16:28:41

标签: mdx

我有以下MDX查询来计算成员,然后在指定的日期范围内选择这些成员:

WITH
MEMBER [Measures].[Prior] as ([Date Post Transaction].[Calendar Month Period].CurrentMember.Lag(12),[Measures].[Unique Patients]) 
MEMBER [Measures].[Current] as [Measures].[Unique Patients] 
SELECT {[Measures].[Current],[Measures].[Prior]} 
DIMENSION PROPERTIES PARENT_UNIQUE_NAME , HIERARCHY_UNIQUE_NAME ON COLUMNS , NON EMPTY Hierarchize(AddCalculatedMembers({DrilldownLevel({[Date Post Transaction].[Calendar Month Period].Children})})) 
DIMENSION PROPERTIES PARENT_UNIQUE_NAME , HIERARCHY_UNIQUE_NAME ON ROWS FROM (SELECT ({[Date Post Transaction].[Calendar Month Period].&[201207],[Date Post Transaction].[Calendar Month Period].&[201208],[Date Post Transaction].[Calendar Month Period].&[201209],[Date Post Transaction].[Calendar Month Period].&[201210],[Date Post Transaction].[Calendar Month Period].&[201211],[Date Post Transaction].[Calendar Month Period].&[201212],[Date Post Transaction].[Calendar Month Period].&[201301],[Date Post Transaction].[Calendar Month Period].&[201302],[Date Post Transaction].[Calendar Month Period].&[201303],[Date Post Transaction].[Calendar Month Period].&[201304],[Date Post Transaction].[Calendar Month Period].&[201305],[Date Post Transaction].[Calendar Month Period].&[201306]}) 
ON COLUMNS FROM [cube]) 
WHERE ([Provider Billing].[Specialty Mgma Pcps].&[Cardiology: Inv-Intvl])

基本上,此查询要求所有心脏病患者在当前日期范围和之前的日期范围内按月。

此查询需要8-9秒才能运行,这很疯狂。我使用Analysis Services来运行和测试查询时间,并没有遇到其他工具来帮助优化MDX。所以我的第一个问题是,有没有人知道有哪些工具可以帮助优化MDX?

我的主要问题是我应该在查询中使用什么方法或结构来帮助更快地处理结果?我最初没有使用.lag()函数,而是运行一个包含当前和之前每个月的查询。我确实看到这个开关的结果时间有所改善。

我有几个报告使用相同的格式,只是不同的指标(MEASURES),因此您可以想象我们使用每个运行5秒以上的查询所获得的加载时间。

1 个答案:

答案 0 :(得分:1)

通常,MDX优化并不容易,没有太多信息导致性能影响的原因和SQL计划等信息很少,而且没有很好地记录。然而,有什么:

查看您的查询,我不确定性能杀手在哪里。也许计算脚本中的某些东西在查询本身中是不可见的。我首先尝试的可能是 - 取决于你的[Date Post Transaction].[Calendar Month Period]层次结构 - 只是使用像

这样的东西
[Date Post Transaction].[Calendar Month Period].&[201207] : [Date Post Transaction].[Calendar Month Period].&[201306]
对于行轴

,并且完全省略子选择,i。即只使用

 FROM [cube]

作为整个FROM子句,没有任何子选择。但我怀疑这会大大减少运行时间。