运行正常:
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]
)
在点击NONEMPTY
函数之前分离出RANK
集并进行计算,我们可以获得性能提升 - 为什么?
参考MSDN上RANK功能的参考资料这里使用了类似的方法: http://technet.microsoft.com/en-us/library/ms144726.aspx
答案 0 :(得分:1)
此处有一位Analysis Services的开发人员详细解释:http://sqlblog.com/blogs/mosha/archive/2006/03/14/ranking-in-mdx.aspx
基本上,您的第一个查询为需要显示排名的每个单元格重新构建集合,而第二个解决方案构建集合一次,并为使用排名成员的所有单元格缓存它。