非空前值 - MDX

时间:2014-03-05 00:56:52

标签: ssas mdx sharepoint-2013 dimension performancepoint

我正在使用Performance Point Dashboard Designer 2013和SharePoint Server 2013来构建仪表板。我正在使用SSAS2012 for Cube。

我有一个类似于下图所示的场景。为了找到趋势,我需要找到Previous Non-Empty值。

Previous Non-empty

衡量:[配额]

尺寸:[日期]。[日历日期]。[日期]

脚本([Measures].[Quota], [Date].[Calendar Date].PrevMember)为您提供上一个日期。可以说,对于日期为27日至1月13日,其配额值为87,它将返回26-Jan-13,其具有空值。我想让它返回具有一些配额价值的21-Jan-13。并且对于1月21日至1月13日,我想要返回1月15日至13日。

我想知道这是否可能。

谢谢,
Merin

2 个答案:

答案 0 :(得分:4)

经过长时间的搜索和点击&试验等等,我想我为自己发明了自己的解决方案。

以下是我的计算会员的脚本。

(
 [Quota],
 Tail
  (
   Nonempty
   ( LastPeriods(15, [Date].[Calendar Date].PrevMember)
    ,[Quota]
   )
  ).Item(0)
)

解释

  1. 数字15意味着它将寻找最多15个兄弟姐妹的非空措施。
  2. 现在我们知道要走多少兄弟姐妹,在这种情况下是15。
  3. 让我们找到15个以前的兄弟姐妹(空白和非空),不包括当前成员。

      

    (LastPeriods(15,[Date]。[Calendar Date] .PrevMember)

  4. 由于它会同时产生空成员和非空成员,因此我们可以按照度量[Quota]过滤掉空成员。如果我们在这里没有指定度量,它将使用默认度量,无论它是什么,我们可能无法获得所需的结果。

      

    非空(LastPeriods(15,[Date]。[Calendar Date] .PrevMember),[Quota])

  5. 我们可能在输出中有几个成员。我们将选择最后一个。

      

    尾     (      非空      (LastPeriods(15,[Date]。[Calendar Date] .PrevMember)       ,[配额]      )     )

  6. 到目前为止,上面的脚本给出了以前的非空成员。现在我们想要为我们的度量[配额]实现这个成员。

  7. 因此我们准备好以下脚本来创建一个计算成员。

    (
     [Quota],
     Tail
      (
       Nonempty
       ( LastPeriods(15, [Date].[Calendar Date].PrevMember)
        ,[Quota]
       )
      ).Item(0)
    )
    

答案 1 :(得分:1)

您可以使用递归来定义它。

以下查询为Adventure Works多维数据集提供类似的内容:

WITH member [Measures].[Prev non empty] AS
            IIf(IsEmpty(([Date].[Calendar].CurrentMember.PrevMember, [Measures].[Internet Sales Amount])),
                ([Date].[Calendar].CurrentMember.PrevMember, [Measures].[Prev non empty]),
                ([Date].[Calendar].CurrentMember.PrevMember, [Measures].[Internet Sales Amount])
               ), format_String = '$#,##0.00'

SELECT {[Measures].[Internet Sales Amount], [Measures].[Prev non empty]}
       ON COLUMNS,
       non empty
       Descendants([Date].[Calendar].[Month].&[2007]&[12], [Date].[Calendar].[Date])
       ON ROWS
FROM [Adventure Works]
WHERE [Customer].[Customer].&[12650]

您必须在度量Internet Sales Amount的递归定义中将日期层次结构的名称以及度量名称从Quota替换为Prev non empty