2016-01-07 46 views
0

我有两个维度,可以说是日期层次结构和产品以及具有MAX(Measures。[Max])聚合的度量。不同级别的维度层次上的聚合

要求将在日期层次结构的DAY或HOUR级别具有度量值[最大值],并在月份级别进行汇总。

我有以下查询:

With 
    Member Measures.SumOfMax as SUM([Date].[Hierarchy].[Hour].AllMembers, Measures.[Max]) 

Select 
    NON Empty 
    { 
     Measures.SumOfMax 
    } ON COLUMNS, 
    NON EMPTY 
    { 
     [Date].[Hierarchy].[Month].AllMembers * 
     [Product].[Product Name].[Product Name].Allmembers  
    } Having Measures.[Max] > 0 
    ON ROWS 
FROM [Cube] 

上面的查询运行速度很慢。有什么方法可以优化吗?

+0

您是否需要在总和计算'[日期]。[层级]。[小时]。所有成员? – whytheq

+0

是的,因为我需要指定我必须在HOUR或Day中聚合的Date层次结构中的什么级别。 – ggarcia

+0

但该集合是_everything_,所以我没有看到它的目的 - 如果它被省略并且你的度量表达为SUM(Measures。[Max])'',你会得到不同的结果吗? – whytheq

回答

0

此查询的问题在于计算的度量值Measures.SumOfMax针对轴上的每个单元格进行了评估,尽管它每次都会产生相同的值。 SSAS引擎不够智能,无法理解这一点,但是由于您了解这种行为,您可以利用FE缓存,使其仅被评估一次并缓存到FE缓存中。 Read more on it here

With 
    Member Measures.[_SumOfMax] as SUM([Date].[Hierarchy].[Hour].AllMembers, Measures.[Max]) 
    Member Measures.[SumOfMax] as ([Date].[Hierarchy].[Hour].[All], Measures.[_SumOfMax]) 
Select 
    NON Empty 
    { 
     Measures.SumOfMax 
    } ON COLUMNS, 
    NON EMPTY 
    { 
     [Date].[Hierarchy].[Month].AllMembers * 
     [Product].[Product Name].[Product Name].Allmembers  
    } Having Measures.[Max] > 0 
    ON ROWS 
FROM [Cube] 

希望这会有所帮助。