【问题标题】:MDX exclude from level of hierarchyMDX 从层次结构级别中排除
【发布时间】:2018-06-01 13:50:55
【问题描述】:

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

  • 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] } )

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

你知道怎么做吗?

【问题讨论】:

  • Continent is not a descendent 但也做 except oncontinent 只能排除整个大洲
  • 嗨@whytheq,谢谢您的回复。我编辑了问题,尝试了另一种解决方案,您知道如何解决吗?

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多