MDX从层次结构级别中排除

时间:2018-06-01 13:50:56

标签: mdx sql-server-2016 ssas-tabular

我有这样的地理层次结构:

  • 第1级:大陆
  • 第2级:区域
  • 3级:城市

我必须提取所有不同大陆的数据,但我必须从一个大陆中排除一个特定的城市。 我既不能使用WHERE子句也不能使用嵌套的FROM来过滤它。 我尝试了很多解决方案,例如EXCEPT,FILTER和" - "功能但没有工作。

以下是我错误尝试之一的示例,它提取数据但不排除我不想要的城市:

Except( 
       [Zone].[GeographyHierarchy].[Continent].ALLMEMBERS,
    { 
            Descendants( 
                 [Zone].[GeographyHierarchy].[Continent].&[ContinentIWant].&[AreaIWant].&[CityIDontWant]
              , [Zone].[GeographyHierarchy].[Continent], SELF_AND_BEFORE ) } 
    )

有人可以帮忙找到有效的解决方案吗? 谢谢大家。

编辑

我认为通过在层次结构的最高级别工作没有解决方案,所以我开始在最低级别(城市)进行过滤:

Except( [Zone].[GeographyHierarchy].[City].ALLMEMBERS,
        { [Zone].[GeographyHierarchy].[Continent].&[ContinentIWant].&[AreaIWant].&[CityIDontWant] } )

通过这种方式,我拥有了我想要的所有不同城市,但现在我应该将它们聚合在更高层次的大陆上。

关于如何做的任何想法?

1 个答案:

答案 0 :(得分:0)

如果您不使用WHERE条款,那么您需要为该大陆创建一个新的计算成员并排除

WITH 
MEMBER [Zone].[GeographyHierarchy].[ALL].[ContinentIWant_exclX] AS
    [Zone].[GeographyHierarchy].[Continent].&[ContinentIWant]
    - [Zone].[GeographyHierarchy].[Continent].&[ContinentIWant].&[AreaIWant].&[CityIDontWant]  
SET [Continents] AS
     EXCEPT(
       [Zone].[GeographyHierarchy].[Continent].MEMBERS,
       [Zone].[GeographyHierarchy].[Continent].&[ContinentIWant]
     )
    +
     [Zone].[GeographyHierarchy].[ALL].[ContinentIWant_exclX]
...

不理想但没有使用WHERE子句的可能性变得棘手