簡體   English   中英

SSAS累積總和計算速度慢

[英]Slow SSAS cumulative sum calculated measure

我有一個度量的累積總和,其結構如下:

Aggregate (
    { NULL : [Date].[Year - Month - Date].CurrentMember } 
    ,[Measures].[Applications] )

從首次申請的日期到當前日期,日期范圍內的日期必須連續。

但是,“日期”維度包含的日期范圍從1900-01-01到將來的日期。

我試圖通過按以下方式構造計算得出的度量來消除第一個應用程序之前的日期和將來的日期:

CREATE MEMBER CURRENTCUBE.[Measures].[Applications TD] AS
CASE 
WHEN   
    /* Eliminates dates before first applications, i.e. year 1900-01-01 */
    Aggregate (
        { NULL : [Date].[Year - Month - Date].CurrentMember } 
        ,[Measures].[Applications] ) < 0   
THEN NULL
WHEN
    /* Eliminates dates after today */
    [Date].[Year - Month - Date].CurrentMember.MemberValue >= StrToMember('[Date].[Date].&['+Format(Now(),"yyyy-MM-ddT00:00:00")+']').MemberValue 
THEN NULL
ELSE
    Aggregate (
            { NULL : [Date].[Year - Month - Date].CurrentMember } 
            ,[Measures].[Applications] )           
END

通過使用SCOPE作為case語句的替代項,利用EXISTS和EXCEPT函數以及許多其他函數僅在需要的地方進行聚合來進行優化,我一直沒有成功。

瀏覽多維數據集並按[Date].[Year - Month - Date]用戶定義的層次結構按[Measures].[Applications TD]維度時,它的運行速度非常慢。

IIF通常比CASE快,而SUM通常比AGGREGATE快。
盡管您的主要問題是使用membervalue的情況的第二部分-是必需的,還是以下內容不會做同樣的事情?

CREATE MEMBER CURRENTCUBE.[Measures].[Applications TD] AS
IIF(
     SUM (
        { NULL : [Date].[Year - Month - Date].CurrentMember } 
        ,[Measures].[Applications] 
     ) < 0 
   , NULL
   , 
   SUM (
         { NULL : [Date].[Year - Month - Date].CurrentMember } 
          ,[Measures].[Applications] 
    ) 
)

我將其作為定制成員分開:

CREATE MEMBER CURRENTCUBE.[Date].[Date].[All].[Today] AS //<< a  little of syntax for this create 
    StrToMember('[Date].[Date].&['+Format(Now(),"yyyy-MM-ddT00:00:00")+']')

然后嘗試嵌套的IIF

CREATE MEMBER CURRENTCUBE.[Measures].[Applications TD] AS
IIF(
    [Date].[Year - Month - Date].CurrentMember.MemberValue >= [Date].[Date].[All].[Today].MemberValue
   , NULL
   , IIF(
       SUM (
          { NULL : [Date].[Year - Month - Date].CurrentMember } 
          ,[Measures].[Applications] 
       ) < 0 
     , NULL
     , 
     SUM (
           { NULL : [Date].[Year - Month - Date].CurrentMember } 
            ,[Measures].[Applications] 
      ) 
  )
)

如果您在DimDate中添加isToday列,然后使用該列具有“多維數據集”日期維度的屬性,則不會比“ Today”成員更麻煩。 這樣,您應該能夠簡化此[Date].[Year - Month - Date].CurrentMember.MemberValue >= [Date].[Date].[All].[Today].MemberValue

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM