2014-01-15 46 views
2

這樣就OK了運行之前創建自定義設置:它是更快地使用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] 
      ) 

通過分隔條件了NONEMPTY組,打之前計算它RANK函數我們得到了性能增益 - 爲什麼?

參照對MSDN RANK函數的基準的類似的方法被用於在這裏:​​ http://technet.microsoft.com/en-us/library/ms144726.aspx

回答

1

有從分析服務這裏的開發者之一的詳細說明:http://sqlblog.com/blogs/mosha/archive/2006/03/14/ranking-in-mdx.aspx

基本上,您的第一個查詢爲需要顯示排名的每個單元格重新構建集合,而第二個解決方案構建集合一次,併爲所有使用排名成員的單元格緩存該集合。

+0

+1非常有用的鏈接。想想我會尋找一本便宜的[書Mosha co-written](http://www.amazon.co.uk/Fast-Track-MDX-Server-2000/dp/1846281741) – whytheq

+0

@whytheq請請注意,本書似乎適用於AS 2000,此後有很多變化。實際上,AS 2005對整個軟件的重寫或多或少都是完全不同的。 – FrankPl

+0

....但他的博客多大? (可惜他被轉移到了Bing ...)。試圖對搜索腳本進行一些小修改,但不工作 - 想知道爲什麼? (我沒有正確使用OR運算符 - [http://stackoverflow.com/questions/21240881/adding-or-into-the-filter-function](http://stackoverflow.com/questions/21240881/adding-or -INTO最濾波器函數)) – whytheq

相關問題