过滤祖先的MDX LastSibling(计算成员)

时间:2015-07-02 15:28:49

标签: ssas mdx olap-cube ssas-2012

在我的多维数据集中的计算成员中,我正在利用Ancestor函数与LastSibling结合使用,如下面所示:

Ancestor
( 
    [Dimension].[User Hierarchy].CurrentMember,
    [Dimension].[User Hierarchy].[Desired Member Level]
).LastSibling

在拉出LastSibling之前,是否可以过滤包含返回祖先的集合?例如,由此返回的祖先,应用以下Filter表达式:

Filter  
(
    [Dimension].[User Hierarchy].[Is Actual].Members,
    [Dimension].[User Hierarchy].Properties( "Is Actual" ) = "N"            
)

最终我试图从我的CurrentMember层次结构中返回同一组的最后一个成员Ancestor函数返回的成员,这满足了上面提到的过滤器。

2 个答案:

答案 0 :(得分:0)

尝试使用Ancestors而不是Ancestor - 然后返回一个集合:

Filter
(
  Ancestors
  (
    [Dimension].[User Hierarchy].CurrentMember
   ,[Dimension].[User Hierarchy].[Is Actual]
  )
 ,
  [Dimension].[User Hierarchy].Properties("Is Actual") = "N"
).Item(0).LastSibling

好的 - 上面的错误是因为Filter会返回一个集合,但LastSibling需要member。重新阅读您的要求后,这可能更符合您的要求:

TAIL(
  FILTER                    //<< 3. find the last member
  (
    ANCESTOR                //<< 1. find the ancestor member within [Some higher level]
    (
      [Dimension].[User Hierarchy].CURRENTMEMBER
     ,[Dimension].[User Hierarchy].[Some higher level]
    ).LEVEL.MEMBERS         //<< 2. find all the members of the higher level
   ,
    [Dimension].[User Hierarchy].CURRENTMEMBER.Properties("Is Actual") = "N"
  )
)             

但是你不能只使用Filter,你知道要过滤的级别:

TAIL(  //<< or .LASTSIBLING  
  FILTER
  (
    [Dimension].[User Hierarchy].[Some higher level].MEMBERS,
    [Dimension].[User Hierarchy].CURRENTMEMBER.Properties("Is Actual") = "N"
  )
)             

答案 1 :(得分:0)

SSAS中的Atleast(不确定支持MDX的其他技术)成员只能拥有一个祖先。因此技术上ANCESTORANCESTORS是相同的。

现在回到你的问题。如果您要进行过滤,可以使用IIF语句,也可以使用FILTER

使用IIF过滤:

IIF
    (
     Ancestor
            (
                [Dimension].[User Hierarchy].CurrentMember, 
                [Dimension].[User Hierarchy].[Desired Member Level]
            ).PROPERTIES("Is Actual") = "N", 
    , 
     Ancestor
            (
                [Dimension].[User Hierarchy].CurrentMember, 
                [Dimension].[User Hierarchy].[Desired Member Level]
            ).LastSibling
    ,
    NULL
    )

使用Filter

进行过滤
FILTER(
        Ancestor
        (
            [Dimension].[User Hierarchy].CurrentMember, 
            [Dimension].[User Hierarchy].[Desired Member Level]
        )
        ,
        Ancestor
        (
            [Dimension].[User Hierarchy].CurrentMember, 
            [Dimension].[User Hierarchy].[Desired Member Level]
        ).PROPERTIES("Is Actual") = "N"
    ).item(0).LastSibling

.LastSibling 真的多余,因为在这种情况下只会有一个兄弟。