繁体   English   中英

需要优化MDX查询

[英]Need to optimize MDX Query

我已经通过BIDS查询设计器建立了此查询。 但是我想通过删除最外面的FROM子句中的SELECTS并仅在from子句中使用多维数据集,并在where或filter子句中保留过滤器来优化此查询:

    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查询优化的了解也不多。 因此,我也不知道这是查询的优化版本,还是仍然存在优化的范围。 我的立方体结构如图所示。

在此处输入图片说明

我通过对行和列部分进行了一些更改来更新我的旧查询,但是仍然停留在“从子句”部分

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]))

这将是最初的简化:

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM