2017-07-19 11 views
0

BIDSクエリデザイナを使用してこのクエリを作成しました。しかし、私は、FROM句、最も外側の内側のSELECTを削除し、またはフィルタ句の句と、残りのフィルタからの唯一のキューブを持っていることによって、このクエリを最適化したい: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クエリの最適化に関するものです。そのため、これは最適化されたクエリバージョンであることもわかっていないか、またはこれでも最適化の範囲があります。私の立方体の構造はImageに示されています。

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); 
関連する問題