使用MDX从层次结构中删除成员

时间:2014-06-24 21:38:31

标签: ssas mdx

在我的SSAS解决方案中,有一个“位置”层次结构,包含级别公司 - >地区 - >区域

-All
  -Company1
    -Region11
    -Region12
  -Company2
    -Region21
    -Region22
  -Company3
    -Region31
    -Region32

我有使用此维度层次结构作为数据源的报表过滤器。我要求从报告过滤器中排除特定公司,例如“Company2”。

我正在使用 EXCEPT DESCENDANTS MDX函数从集合中排除此特定成员及其子元素。但是,我丢失了ALL级别(层次结构中的最高级别),返回的集合如下所示:

  -Company1
    -Region11
    -Region12
  -Company3
    -Region31
    -Region32

如何保留ALL会员?我需要将Company1和Company3分组到更高的级别。

2 个答案:

答案 0 :(得分:1)

Except功能应该有效。您正在使用的MDX是什么?

答案 1 :(得分:1)

可能与使用DESCENDANTS有关。如果我没记错的话,所有人实际上都是一个级别,也就是一个成员 - 一个单一的成员级别 - 因此,如果你使用DESCENDANTS,那么排除更高的所有级别可能是有道理的。

如果我排除了单个成员集澳大利亚,那么

On Adventure会工作,那么它会从以下结果集中排除,而不会丢失All Customers成员:

SELECT 
    {} ON 0,
    EXCEPT(
        [Customer].[Customer Geography].ALLMEMBERS,
        {[Customer].[Customer Geography].[Country].&[Australia]}
    ) ON 1
FROM [Adventure Works]

跟进ic3的评论

  

后代(除())而不是except(descendants())

以下示例保留了成员All Geographies,但加拿大及其后代被排除在外:

SELECT 
    {} on 0,
    EXCEPT(
        DESCENDANTS(
            [Geography].[Geography].[All Geographies],
            [Geography].[Geography].[State-Province],
            SELF_AND_BEFORE
        ),
        DESCENDANTS(
            [Geography].[Geography].[Country].[Canada],
            [Geography].[Geography].[State-Province],
            SELF_AND_BEFORE
        )
    )
ON 1
FROM [Adventure Works]