2016-04-17 124 views
0

我正在寫一個MDX查詢,其中我選擇了一些措施,同時選擇我有一個在哪裏條件我在做一個交叉連接兩個事實,一個是日期和另一個唯一的ID和我傳遞了大約2000個獨特的ID,查詢需要大約20分鐘來執行並給出結果。MDX查詢優化,同時使用CrossJoin

請在下面找到查詢相同

SELECT {[Measures].[TOTAL1], [Measures].[TOTAL2], [Measures].[TOAL3]} ON COLUMNS, 
      " + " {TOPCOUNT(FILTER([ID].[Ids].MEMBERS, 
          [ID].CurrentMember > 0), 
           5,[Measures].[TOTAL])} " + "ON ROWS 
    FROM [CHARTS] 
    WHERE({[Date].&[2015-09-01 00:00:00.0]}*{[NUM].[1],[NUM].[10]," 
       + "[NUM].[18],[NUM].[47],[NUM].[52],[NUM].[105],[NUM].[126],[NUM].[392]," 
       + "[NUM].[588],[NUM].[656],[NUM].[995],[NUM].[1005],[NUM].[1010],[NUM].[1061]})"; 

直MDX沒有字符串操作符(+)如下:

SELECT 
    { 
    [Measures].[TOTAL1] 
    ,[Measures].[TOTAL2] 
    ,[Measures].[TOAL3] 
    } ON COLUMNS 
,{ 
    TopCount 
    (
     Filter 
     (
     [ID].[Ids].MEMBERS 
     , 
     [ID].CurrentMember > 0 
    ) 
    ,5 
    ,[Measures].[TOTAL] 
    ) 
    } ON ROWS 
FROM [CHARTS] 
WHERE 
    {[Date].&[2015-09-01 00:00:00.0]} 
    * 
    { 
     [NUM].[1] 
    ,[NUM].[10] 
    ,[NUM].[18] 
    ,[NUM].[47] 
    ,[NUM].[52] 
    ,[NUM].[105] 
    ,[NUM].[126] 
    ,[NUM].[392] 
    ,[NUM].[588] 
    ,[NUM].[656] 
    ,[NUM].[995] 
    ,[NUM].[1005] 
    ,[NUM].[1010] 
    ,[NUM].[1061] 
    }; 

能否請你告訴我不同​​的性能優化技巧對於相同的。

+0

做了以下的幫助我的建議,或者我確定刪除它? – whytheq

回答

0

TopCount很慢,如果你使用第三排序參數 - 最好是先對數據進行排序養活你的預有序集到TopCount中只有2個參數:

WITH 
    SET [S0] AS 
    Filter 
    (
     [ID].[Ids].MEMBERS 
    , 
     [ID].CurrentMember > 0 
    ) 
    SET [S1] AS 
    Order 
    ( 
     [S0] 
    ,[Measures].[TOTAL] 
    ,BDESC 
    ) 
    SET [S2] AS 
    TopCount 
    (
     [S1] 
    ,5 
    ) 
SELECT 
    { 
    [Measures].[TOTAL1] 
    ,[Measures].[TOTAL2] 
    ,[Measures].[TOAL3] 
    } ON COLUMNS 
,[S2] ON ROWS 
FROM [CHARTS] 
WHERE 
    {[Date].&[2015-09-01 00:00:00.0]} 
    * 
    { 
     [NUM].[1] 
    ,[NUM].[10] 
    ,[NUM].[18] 
    ,[NUM].[47] 
    ,[NUM].[52] 
    ,[NUM].[105] 
    ,[NUM].[126] 
    ,[NUM].[392] 
    ,[NUM].[588] 
    ,[NUM].[656] 
    ,[NUM].[995] 
    ,[NUM].[1005] 
    ,[NUM].[1010] 
    ,[NUM].[1061] 
    };