2017-07-19 148 views
0

我已經通過BIDS查詢設計器構建了此查詢。但我想最裏面取出選擇從條款和僅有的條款和其他過濾器立方體在哪裏或篩選子句來優化這個查詢:需要優化MDX查詢

SELECT { [Measures].[User ID Distinct Count], [Measures].[Post Count], [Measures].[Like Count], [Measures].[Comment Count], [Measures].[Impressions Master Count] } ON COLUMNS, 
NON EMPTY { ([Section Master].[Section Name].[Section Name].ALLMEMBERS * [Post Master].[Post Name].[Post Name].ALLMEMBERS * [Post Master].[SP Insert Date].[SP Insert Date].ALLMEMBERS) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
FROM (SELECT (STRTOSET(@SectionMasterSectionName)) ON COLUMNS 
     FROM (SELECT (STRTOMEMBER(@FromDimDateDate) : STRTOMEMBER(@ToDimDateDate)) ON COLUMNS 
     FROM [AnalyticsCube])) 
CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS 

我在MDX相當新的,不知道多少關於MDX查詢優化。因此,我也不知道這是查詢的優化版本,還是有優化的餘地。我的立方體結構顯示在圖像中。

enter image description here

我必須做的行和列部分的一些變化更新我的舊的查詢,但還是堅持了從第一部分

SELECT { [Measures].[User ID Distinct Count], 
      [Measures].[Post Count], 
      [Measures].[Like Count], 
      [Measures].[Comment Count], 
      [Measures].[Impressions Master Count] } ON COLUMNS, 
NON EMPTY { ([Section Master].[Section Name].CHILDREN) * 
      ([Post Master].[Post Name].CHILDREN, [Post Master].[SP Insert Date].CHILDREN) } ON ROWS 
FROM (SELECT (STRTOSET(@SectionMasterSectionName)) ON COLUMNS 
     FROM (SELECT (STRTOMEMBER(@FromDimDateDate) : STRTOMEMBER(@ToDimDateDate)) ON COLUMNS 
       FROM [AnalyticsCube])) 
+0

那是MDX查詢爲您提供了正確的結果? – Jigar

+0

是的,它給我按預期的結果 –

+0

你能提供樣品查詢結果嗎? – Jigar

回答

0

這將是最初的簡化:

SELECT 
    { 
    [Measures].[User ID Distinct Count] 
    ,[Measures].[Post Count] 
    ,[Measures].[Like Count] 
    ,[Measures].[Comment Count] 
    ,[Measures].[Impressions Master Count] 
    } ON COLUMNS 
,NON EMPTY 
    { 
     [Section Master].[Section Name].Children 
     * 
     (
      [Post Master].[Post Name].Children 
     ,[Post Master].[SP Insert Date].Children 
     ) 
    } ON ROWS 
FROM 
(
    SELECT 
    StrToSet(@SectionMasterSectionName) ON 0, 
    StrToMember(@FromDimDateDate) : StrToMember(@ToDimDateDate) ON 1 
    FROM [AnalyticsCube] 
); 

然後,它似乎很奇怪,我認爲你不動StrToSet(@SectionMasterSectionName)到主SELECT子句:

SELECT 
    { 
    [Measures].[User ID Distinct Count] 
    ,[Measures].[Post Count] 
    ,[Measures].[Like Count] 
    ,[Measures].[Comment Count] 
    ,[Measures].[Impressions Master Count] 
    } ON COLUMNS 
,NON EMPTY 
    { 
     StrToSet(@SectionMasterSectionName) 
     * 
     (
      [Post Master].[Post Name].Children 
     ,[Post Master].[SP Insert Date].Children 
     ) 
    } ON ROWS 
FROM 
(
    SELECT 
    StrToMember(@FromDimDateDate) : StrToMember(@ToDimDateDate) ON 0 
    FROM [AnalyticsCube] 
); 

邏輯上稍有不同,但那麼你可以考慮使用一個WHERE條款,而不是SUB-SELECT

SELECT 
    { 
    [Measures].[User ID Distinct Count] 
    ,[Measures].[Post Count] 
    ,[Measures].[Like Count] 
    ,[Measures].[Comment Count] 
    ,[Measures].[Impressions Master Count] 
    } ON COLUMNS 
,NON EMPTY 
    { 
     StrToSet(@SectionMasterSectionName) 
     * 
     (
      [Post Master].[Post Name].Children 
     ,[Post Master].[SP Insert Date].Children 
     ) 
    } ON ROWS 
FROM [AnalyticsCube] 
WHERE 
    StrToMember(@FromDimDateDate) : StrToMember(@ToDimDateDate);