gpt4 book ai didi

ssas - 为什么 Order 会忽略 subselect?

转载 作者:行者123 更新时间:2023-12-01 06:08:26 26 4
gpt4 key购买 nike

我在 Analysis Services 2005(和 2008 R2)中遇到了一些令人困惑的行为,如果有人能解释为什么会这样,我将不胜感激。为了这个问题,我重现了针对 Adventure Works 多维数据集的行为。

鉴于此 MDX:

SELECT [Customer].[Education].[(All)].ALLMEMBERS ON COLUMNS,
Order(DrillDownLevel({[Customer].[Customer Geography].[All Customers]}),
([Measures].[Internet Order Count]),
ASC) ON ROWS
FROM (SELECT {[Customer].[Education].&[Partial High School]} ON COLUMNS FROM [Adventure Works])
WHERE [Measures].[Internet Order Count];


查询使用行上的有序集进行评估:
所有客户:2, 136
德国:269
法国:298
加拿大:304
英国:311
美国:457
澳大利亚:497

但是,如果我在订单语句中使用的元组中包含教育的所有成员(或默认成员):

SELECT [Customer].[Education].[(All)].ALLMEMBERS ON COLUMNS,
Order(DrillDownLevel({[Customer].[Customer Geography].[All Customers]}),
([Measures].[Internet Order Count], [Customer].[Education].[All Customers]),
ASC) ON ROWS
FROM (SELECT {[Customer].[Education].&[Partial High School]} ON COLUMNS FROM [Adventure Works])
WHERE [Measures].[Internet Order Count];


然后集合以明显不同的顺序返回:
所有客户:2, 136
法国:298
德国:269
英国:311
加拿大:304
澳大利亚:497
美国:459

请注意,法国和德国相对于彼此而言是乱序的。与加拿大/英国和美国/澳大利亚相同。据我所知,它是在评估子多维数据集之前基于聚合进行排序。

为什么包含这个成员(在第一个例子中它应该隐含在元组中?)会导致 order 语句的评估在子多维数据集的可视总计之外查看? Filter 和 TopCount 等函数似乎具有相同的行为。

干杯。

最佳答案

我的猜测是,由于这 2 个属性仅通过键相关(不存在直接关系),因此属性的交叉连接会导致键成员聚合,这是不应用视觉总计的地方(这是其中一种方式如何使用子选择计算非可视总计)。

我构建了一个查询来演示交叉连接的结果:

WITH

MEMBER sortExpr as
AGGREGATE(Descendants([Customer].[Customer Geography].CurrentMember), [Measures].[Internet Order Count])

SELECT
[Customer].[Education].[(All)].ALLMEMBERS
*
{[Measures].[Internet Order Count], sortExpr} ON COLUMNS,
Order
(
DrillDownLevel({[Customer].[Customer Geography].[All Customers]})
,sortExpr
,ASC
) ON ROWS
FROM
(
SELECT
{[Customer].[Education].&[Partial High School]} ON COLUMNS
FROM [Adventure Works]
)
;

编辑:这是另一个查询,表明一旦您使用查询范围集(众所周知的解决方案)解决了子选择问题,表达式就可以正确地处理属性覆盖:

WITH

set sub as
[Customer].[Customer Geography].[Customer]

MEMBER sortExpr2 as
Aggregate(existing sub, [Measures].[Internet Order Count])

SELECT
[Customer].[Education].[(All)].ALLMEMBERS
*
{[Measures].[Internet Order Count], sortExpr2} ON COLUMNS,
Order
(
DrillDownLevel({[Customer].[Customer Geography].[All Customers]})
,
(
-- [Customer].[Customer Geography].CurrentMember,
[Customer].[Education].[All Customers],
sortExpr2
)
,ASC
) ON ROWS
FROM
(
SELECT
{[Customer].[Education].&[Partial High School]} ON COLUMNS
FROM [Adventure Works]
)
;

感谢 Boyan 在推特上提出这个问题。问候,赫尔沃耶

关于ssas - 为什么 Order 会忽略 subselect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6527938/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com