2016-01-07 76 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] 

希望這會有所幫助。