版本
我正在使用 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 |
请有人澄清一下文档。 为什么只按第二层排序?
排序时,ASC 会按层次结构排序。在这种情况下,它将对每个区域内的类别进行排序。
要对所有地区的类别进行排序,您应该使用 BASC,其中 B 代表“打破层次结构”。
参见 https://learn.microsoft.com/en-us/sql/mdx/order-mdx?view=sql-server-ver16