如何使用 MDX 查询应用层次化和排序

Posted

技术标签:

【中文标题】如何使用 MDX 查询应用层次化和排序【英文标题】:How to apply Hierarchize and Order by with MDX Query 【发布时间】:2016-05-05 10:22:26 【问题描述】:

我需要按照降序对维度进行排序。不使用 HIERARCHIZE 关键字一切正常。这里我需要 HIERARCHIZE 以便对层次级别数据进行排序。

Select NON EMPTY([Measures].[Internet Sales Amount]) dimension properties MEMBER_TYPE,CHILDREN_CARDINALITY, PARENT_UNIQUE_NAME ON COLUMNS ,NON EMPTY(HIERARCHIZE(ORDER(drilldownlevel([Customer].[Customer Geography]),[Customer].[Customer Geography].CurrentMember.MEMBER_CAPTION,desc))) dimension properties MEMBER_TYPE,CHILDREN_CARDINALITY, PARENT_UNIQUE_NAME ON ROWS

【问题讨论】:

我不明白问题是什么 - 你有一个解决方案:删除层次结构? 请重新格式化代码 - 我以前这样做过:现在无法再次阅读! 您好,请找到随附的屏幕截图。我希望​​现在它已经清楚了 【参考方案1】:

很遗憾,我没有 AdvWrks 多维数据集来测试以下内容:

SELECT 
  NON EMPTY
     [Measures].[Internet Sales Amount] ON 0
 ,NON EMPTY
      ORDER(
         
           HIERARCHIZE([Customer].[Customer Geography].[COUNTRY].MEMBERS)
          ,[Customer].[Customer Geography].[COUNTRY].&[GERMANY].CHILDREN
         
        ,[Customer].[Customer Geography].CurrentMember.MEMBER_CAPTION
        ,BDESC
      )
    )  ON 1
FROM [Adventure Works];

看起来我在这里有一个类似问题的经过测试的解决方案:Issue with Order function and Crossoins in MDX

看起来将上述内容应用于您的上下文是这样的:

SELECT 
  NON EMPTY 
    [Measures].[Internet Sales Amount] ON 0
 ,NON EMPTY 
    
      Order
      (
        
            [Customer].[Customer Geography].[COUNTRY].MEMBERS
         ,  [Customer].[Customer Geography].[COUNTRY].&[GERMANY].CHILDREN
        
       ,(
          [Measures].[Internet Sales Amount]
         ,[Customer].[Customer Geography].[COUNTRY]
        )
       ,BDESC
      )
     ON 1
FROM [Adventure Works];

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review 感谢您的评论。用这种语言制定一个准确的答案并不总是可能的。目前提问者已经自我回答了,但事实是提问者甚至没有回答他们最初提出的问题! ...请在下面查看我的评论 - 集合 [Customer].[Customer Geography].[COUNTRY].MEMBERS 在他们的问题中,但不在他们的答案中。也许@GregGalloway 可能想发表评论 - Greg:您是否同意对于 mdx 问题,准确地向提问者提供他们需要的内容并不总是那么容易,但像我的回答这样的东西通常就足够了? @JonathanArgentiero 还请注意,在原始问题中,脚本的结构是 ORDER 嵌套在 HIERARCHIZE 中 - 在我的回答中,我正确地交换了嵌套,以便 HIERARCHIZE 在 ORDER ..... 然后看看用户自我回答:在我看来,交换这个订单是很重要的一点,实际上我觉得有点困难,因为用户甚至没有给出我的答案。但总的来说没什么大不了的。 (但即使在说了上述内容之后,我也会检查我的答案,因为这是 AdvWrks 多维数据集,我将能够创建一个准确的答案 - 当我回到可以访问多维数据集的机器上时)【参考方案2】:

解决了以下查询的问题

SELECT 
NON EMPTY [Measures].[Internet Sales Amount] ON 0,
NON EMPTY
    Order(
        Hierarchize(
           [Customer].[Customer Geography].[Country].&[Germany].Children
        )
      ,[Customer].[Customer Geography].CurrentMember.MEMBER_CAPTION
      ,DESC
    )
ON 1
FROM [Adventure works];

【讨论】:

这与您在原始问题中要求的脚本不同 - 请您修改它以使其包括加拿大和法国等国家/地区吗? (我已经对其进行了修改以去掉所有多余的大括号)

以上是关于如何使用 MDX 查询应用层次化和排序的主要内容,如果未能解决你的问题,请参考以下文章

MDX 层次结构查询

SSAS MDX WHERE 子句语法 - 从同一层次结构中过滤多个值

如何根据 mdx 中的另一个维度层次结构过滤维度层次结构

如何在 mdx 查询上应用分组依据

如何保存 MDX 查询并下次使用?

使用 MDX 从层次结构中获取当前会计年度