为什么带有 ASC 的 MDX Order 函数不对所有交叉连接的层次结构进行排序(如 SSAS 文档建议的那样)?

问题描述 投票:0回答:1

版本

我正在使用 Microsoft Analysis Services 16.0.43.229。

问题

我不理解使用 Crossjoin 和 ASC 排序时 Order 函数的某些行为,因为它似乎与文档不匹配。 看起来它只是对最后一个层次结构进行排序,但文档说只有使用 DESC 时才会出现这种情况:

https://learn.microsoft.com/en-us/sql/mdx/order-mdx?view=sql-server-ver16

如果指定了 ASC 或 DESC,则 Order 函数首先排列 成员根据其在层次结构中的位置,然后排序 每个级别。

如果 Order 函数与包含两个或多个层次结构的集合一起使用 是交叉连接的,并且使用了 DESC 标志,只有 集合中的最后一个层次结构是有序的。这是分析的变化 服务 2000,其中集合中的所有层次结构均已排序。

具有 1 个层次 ASC 的订单

以下 MDX 显示第一层次结构的顺序:

SELECT {[Measures].[Tax Amount]} ON 0,
Order([Sales Territory].[Sales Territory].[Group].Members,
[Measures].[Tax Amount], ASC) ON 1
FROM [Adventure Works]
领土 税额
不适用 (空)
太平洋 $852,426.90
欧洲 $1,584,046.16
北美 $6,348,268.77

具有 2 个层次结构交叉连接 ASC 的订单

如果我在 Crossjoin 中添加第二个层次结构,我希望第一个层次结构保持该顺序(因为我使用的是 ASC 而不是 DESC),但它会按成员顺序对第一个层次结构进行排序:

SELECT {[Measures].[Tax Amount]} ON 0,
Order([Sales Territory].[Sales Territory].[Group].Members
* [Product].[Product Categories].[Category].Members,
[Measures].[Tax Amount], ASC) ON 1
FROM [Adventure Works]
领土 类别 税额
欧洲 配件 $26,238.18
欧洲 服装 $32,110.44
欧洲 组件 $153,348.64
欧洲 自行车 $1,372,348.90
不适用 配件 (空)
不适用 自行车 (空)
不适用 服装 (空)
不适用 组件 (空)
北美 配件 $62,515.40
北美 服装 $128,244.56
北美 组件 $774,285.38
北美 自行车 $5,383,223.44
太平洋 服装 $9,054.06
太平洋 配件 $13,011.05
太平洋 组件 $16,292.11
太平洋 自行车 $814,069.68

请有人澄清一下文档。 为什么只按第二层排序?

ssas mdx
1个回答
0
投票

排序时,ASC 会按层次结构排序。在这种情况下,它将对每个区域内的类别进行排序。

要对所有地区的类别进行排序,您应该使用 BASC,其中 B 代表“打破层次结构”。

参见 https://learn.microsoft.com/en-us/sql/mdx/order-mdx?view=sql-server-ver16

© www.soinside.com 2019 - 2024. All rights reserved.