【问题标题】:MDX: How to exclude ancestors from being returned in this query?MDX:如何排除在此查询中返回的祖先?
【发布时间】:2011-01-28 18:55:01
【问题描述】:

我有这个 MDX 查询:

Exists([Group].[Group Hierarchy].allmembers,
    {[Group].[Group Full Name].&[121 - Group A], [Group].[Group Full Name].&[700000 - Group C]})

...除了返回指定组的所有祖先之外,它工作得很好。我想要的是只返回具有指定组名称的层次结构中的组(这是一个类型 2 维度,因此在不同级别可能有很多)。

有什么想法吗?

【问题讨论】:

    标签: sql-server service mdx analysis


    【解决方案1】:

    替换

    [Group].[Group Hierarchy].allmembers 
    

    [Group].[Group Hierarchy].[Group Hierarchy]
    

    【讨论】:

      【解决方案2】:

      filter([Group].[Group Hierarchy].members, instr(@GroupGroupFullName,[Group].[Group Hierarchy].Properties( "Group Full Name" )))

      【讨论】:

        【解决方案3】:

        我怀疑问题出在对 [Group].[Group Hierarchy].allmembers 的引用上。我猜 [Group Hierarchy] 是某种具有多个级别的导航层次结构。听起来您需要做的是将 [Group Hierarchy] 替换为包含您的类型 2 组成员的属性的名称,以便获取具有指定“组全名”成员的所有成员的列表。

        我会将 Filter(..., Instr()) 方法作为最后的手段,因为它比等效的基于集合的操作要慢得多。

        【讨论】:

        • 感谢达伦的评论。 [Group Hierarchy] 是 SCD Type 2 维度的父子层次结构......这意味着随着时间的推移,我在层次结构的不同级别拥有相同的 Group。因此,我认为在这种安排中始终如一地识别给定组的唯一方法是通过其名称(它不受类型 2 更改的影响,并且对于给定组是唯一的)。我必须在查询中使用层次结构来计算所有计数以及不正确加起来的内容。
        • 父子层次结构确实使事情变得有些复杂,因为 EXISTS 将引入所有祖先成员。在这种情况下,使用 Filter() 实际上可能是最简单的解决方案。
        猜你喜欢
        • 2017-11-25
        • 1970-01-01
        • 2012-04-23
        • 1970-01-01
        • 2020-01-14
        • 1970-01-01
        • 1970-01-01
        • 2015-02-11
        • 1970-01-01
        相关资源
        最近更新 更多