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

Ssas 在使用秩函数之前创建自定义集是否更快,ssas,mdx,Ssas,Mdx,这运行正常: WITH MEMBER [Measures].[Players_Rank] AS RANK( [Player].[Player].CurrentMember, NONEMPTY( [Player].[Player].members, [Measures].[Score]), [Measures].[Score]

这运行正常:

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]
            )
通过分离出
非空
集,并在点击
函数之前进行计算,我们获得了性能增益-为什么

参考MSDN上秩函数的参考,此处使用了类似的方法:
这里有一位AnalysisServices开发者的详细解释:


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

+1非常有用的链接。我想我会找一本便宜的@whytheq。请注意,这本书似乎是2000年出版的,从那以后有很多变化。事实上,2005年差不多是整个软件的翻版……但他的博客有多老了?(可惜他搬到了Bing…)。试图对你的搜索脚本做一个小的修改,但不起作用-想知道为什么?(me未正确使用OR运算符-)