在使用RANK功能之前创建自定义集是否更快

时间:2014-01-15 12:56:07

标签: ssas mdx

运行正常:

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

1 个答案:

答案 0 :(得分:1)

此处有一位Analysis Services的开发人员详细解释:http://sqlblog.com/blogs/mosha/archive/2006/03/14/ranking-in-mdx.aspx

基本上,您的第一个查询为需要显示排名的每个单元格重新构建集合,而第二个解决方案构建集合一次,并为使用排名成员的所有单元格缓存它。