首页 > 解决方案 > MDX 从层次结构级别中排除

问题描述

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

我必须提取所有不同大陆的数据,但我必须从一个大陆中排除特定城市。我既不能使用 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] } )

这样我就有了我想要的所有不同的城市,但我现在应该将它们聚合到更高级别的大陆上。

关于如何做的任何想法?

标签: mdxsql-server-2016ssas-tabular

解决方案


如果您不使用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 子句的可能性,事情变得棘手


推荐阅读