2016-04-17 80 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] 
    };