繁体   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