0

我有以下 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])

基本上,此查询要求 Cardiology 内的所有患者按月获取当前日期范围和先前日期范围。

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

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

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

4

1 回答 1

1

一般来说,MDX优化并不容易,没有太多信息是什么导致了哪些性能影响,SQL计划等信息很少,还有什么没有很好的记录。然而,有什么:

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

[Date Post Transaction].[Calendar Month Period].&[201207] : [Date Post Transaction].[Calendar Month Period].&[201306]

对于行轴,并完全省略子选择,即只使用

 FROM [cube]

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

于 2013-09-25T18:23:18.203 回答