上次可用值MDX

时间:2014-06-27 21:59:32

标签: ssas mdx

我有一个要求,即我要使用查询构建器在SSRS数据集中从多维数据集中提取数据,并在一系列日期中使用结果集中的时间维度。条件是

  1. 将显示日期范围中每一天的度量。
  2. 子总行应具有该时间范围的最后一个可用度量值。
  3. 有一个时间过滤器(当前是带有多选选项的单日期过滤器)。
  4. 我的MDX如下。

    1. 该指标有一个' Sum'作为聚合类型。
    2. 我有一个计算量度,范围定义如下。

       SCOPE([MEASURES].[Measure1]);   
          SCOPE([Date].[Date].MEMBERS);            
             THIS = TAIL(EXISTING ([Date].[Date].MEMBERS),1).ITEM(0)  ;            
          END SCOPE;  
       END SCOPE;
      
    3. 以上范围说明完美无缺。但是,当我选择多一个日期成员时,此查询会减慢WAYYYYYYY。性能数字

      1. 1个日期 - 4秒
      2. 两个日期--22分钟
      3. 3个日期 - 未知(小时)
      4. 如果我删除范围声明,这种性能的急剧下降就会消失,这使得我应该有更好的方法来做同样的事情。最终报告查询如下。

        SELECT
          NON EMPTY
            {[Measures].[Measure1]} ON COLUMNS  
          ,NON EMPTY
            { [Dimension1].[Dimension1].[Dimension1].ALLMEMBERS*    
              [Dimension2].[Dimension2].[Dimension2].ALLMEMBERS*   
              [Dimension3].[Dimension3].[Dimension3].ALLMEMBERS*   
              [Date].[Date].[Date].ALLMEMBERS  
            } ON ROWS
        FROM (
              SELECT {[Date].[Date].&[2014-06-13T00:00:00]
                      ,[Date].[Date].&[2014-06-16T00:00:00] } ON COLUMNS
              FROM [Cube] 
             )
        

        所以问题是, 有没有办法做范围语句的最后一个可用值部分,以便获得更好的性能?另外,如果有另一种方法来编写有助于提高性能的最终mdx?。

        如果对此问题有任何疑问,请告诉我。

        由于 SRIKANTH

1 个答案:

答案 0 :(得分:1)

第一个优化步骤是将您的查询更改为

SELECT
  NON EMPTY
    {[Measures].[Measure1]} ON COLUMNS  
  ,NON EMPTY
    { [Dimension1].[Dimension1].[Dimension1].ALLMEMBERS*    
      [Dimension2].[Dimension2].[Dimension2].ALLMEMBERS*   
      [Dimension3].[Dimension3].[Dimension3].ALLMEMBERS*   
      {[Date].[Date].&[2014-06-13T00:00:00], [Date].[Date].&[2014-06-16T00:00:00] }
    } ON ROWS
FROM [Cube] 

此外,我不确定您为什么添加了SCOPE([Date].[Date].MEMEBER);(实际上可能是Date].[Date].MEMBERS)。也许有助于省略它和相应的END SCOPE