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



运行正常:

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

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

相关内容

最新更新