测试成员是否存在维度

时间:2017-06-22 09:17:53

标签: ssas mdx

这应该很简单,我只是想不出怎么做。

我正在制作一个计算的度量,它在时间维度中使用PrevMember。如果[时间维度] .CurrentMember没有PrevMember,我想显示NULL。

我只是无法弄清楚要包围这个成员表达式的内容,说“这个成员确实存在吗?”。我对是否存在针对此.PrevMember(即现有或存在)的特定措施不感兴趣。我不想引用度量维度 - 只测试[时间维度] .CurrentMember.PrevMember是否返回维度内的任何成员。

修改 计算出的衡量标准是

([此本期完成] -PriorPeriod)/ PriorPeriod

所以我想抓住没有前期(在时间层次的每个级别)的情况,并强制结果为0而不是得到某种(div / 0?)错误。

2 个答案:

答案 0 :(得分:2)

这会产生0,其中CurrentMember在所有级别都没有Previous Member。

WITH MEMBER [Measures].[ThisPeriod] AS 3
    MEMBER [Measures].[PriorPeriod] AS 2
    MEMBER [Measures].[NewMeasure] AS 
IIF([Date].[Calendar].CURRENTMEMBER.PREVMEMBER IS NULL,0,[Measures].[ThisPeriod] - [Measures].[PriorPeriod])
SELECT
    {[Measures].[ThisPeriod], [Measures].[PriorPeriod], [Measures].[NewMeasure]} ON COLUMNS
,   [Date].[Calendar].MEMBERS ON ROWS
FROM
    [Adventure Works]
    ;

enter image description here

答案 1 :(得分:1)

不确定你是否需要做任何事情 - 如果没有以前的成员,那么无论如何都会返回null吗?

WITH 
  MEMBER Measures.[CalendarPrevious] AS 
    [Date].Calendar.CurrentMember.PrevMember.Member_Caption 
  MEMBER Measures.[CalendarPrevious2] AS 
    IIF
    (
      Count({[Date].Calendar.CurrentMember.PrevMember}) = 1
     ,[Date].Calendar.CurrentMember.PrevMember.Member_Caption
     ,null
    ) 
SELECT 
  NON EMPTY 
    {
      Measures.[CalendarPrevious]
     ,Measures.[CalendarPrevious2]
    } ON 0
 ,[Date].[Calendar].[Date].MEMBERS ON 1
FROM [Adventure Works];

返回:

enter image description here

为了解决div错误,我通常使用这种模式:

  MEMBER [Date].[Date - Calendar Month].[All].[DlyAvgGrowth] AS 
    IIF
    (
      [Date].[Date - Calendar Month].[All].[PrevMth_DlyAvg] = 0
     ,NULL
     ,Divide
      (
          [Date].[Date - Calendar Month].[All].[CurrentMth_DlyAvg]
        - 
          [Date].[Date - Calendar Month].[All].[PrevMth_DlyAvg]
       ,[Date].[Date - Calendar Month].[All].[PrevMth_DlyAvg]
      )
    )