运行正常:
WITH
MEMBER [Measures].[Players_Rank] AS
RANK(
[Player].[Player].CurrentMember,
NONEMPTY(
[Player].[Player].members,
[Measures].[Score]),
[Measures].[Score]
)
但这运行得更快:
WITH
SET X AS
NONEMPTY(
[Player].[Player].members,
[Measures].[Score])
MEMBER [Measures].[Players_Rank] AS
RANK(
[Player].[Player].CurrentMember,
X,
[Measures].[Score]
)
通过在点击RANK
函数之前分离出NONEMPTY
集并对其进行计算,我们可以获得性能提升 - 为什么?
参考 MSDN 上 RANK 函数的参考 此处使用了类似的方法:http://technet.microsoft.com/en-us/library/ms144726.aspx
这里有来自 Analysis Services 开发人员的详细说明:http://sqlblog.com/blogs/mosha/archive/2006/03/14/ranking-in-mdx.aspx
基本上,第一个查询为需要显示排名的每个单元格重新生成集合,而第二个解决方案生成集合一次,并为使用排名成员的所有单元格缓存该集合。