我在 SSAS 中遇到了一个奇怪行为发生的问题。我有一个正在生产的立方体,但是,为了模拟问题,我创建了一个小立方体来隔离问题。我创建了一个模拟问题的小立方体。在这个多维数据集中,有一个维度和一个事实。在 [Sales Territory] 中,我将 UnknownMember 属性配置为 true。在立方体计算中,我在下面放了一个简单的范围代码:
SCOPE([Measures].[SalesAmountCustomValue]);
THIS = [Measures].CurrentMember+10000000;
END SCOPE;
我在 SQL Server 2008 R2 中执行以下 MDX,使用和不使用 UnknownMember 和 Aggregate 函数有不同的结果。在 SQL Server 2012 中,结果与预期相同。
WITH
MEMBER [Sales Territory].[Sales Territory Country].[Countries] AS
Aggregate(
{
[Sales Territory].[Sales Territory Country].[All].UNKNOWNMEMBER,
[Sales Territory].[Sales Territory Country].&[9],
[Sales Territory].[Sales Territory Country].&[6]
}
)
MEMBER [Measures].[SalesAmountCustomValueWithAggregate] AS
(
[Sales Territory].[Sales Territory Country].[Countries],
[Measures].[SalesAmountCustomValue]
),
FORMAT_STRING="0,000;-0,000"
SELECT {
[Measures].[SalesAmount],
[Measures].[SalesAmountCustomValue],
[Measures].[SalesAmountCustomValueWithAggregate]
} ON 0
FROM AdventureWorks
WHERE {
[Sales Territory].[Sales Territory Country].[All].UNKNOWNMEMBER,
[Sales Territory].[Sales Territory Country].&[9],
[Sales Territory].[Sales Territory Country].&[6]
}
结果是:
- 销售额:11,038,845
- 销售额自定义值:21,038,845
- SalesAmountCustomValueWithAggregate:41,038,845
去掉聚合函数的UnknownMember,结果为:
- 销售额:11,038,845
- 销售额自定义值:21,038,845
- SalesAmountCustomValueWithAggregate:21,038,845
MDX 引擎的行为是不同的。在第一个示例中,在聚合函数之前为每个成员执行范围计算。在这种情况下,范围计算会执行 3 次。将无效成员放入聚合函数中也会发生同样的情况,如 [Sales Territory].[Sales Territory Country].&[AAA],但在这种情况下,范围计算在 SQL 2008 R2 和 SQL 2012 中执行了两次。
去掉UnknownMember,执行一次范围计算,总计100亿。
对于相同的 MDX,我需要具有与 SQL 2012 中相同的行为:
- 销售额:11,038,845
- 销售额自定义值:21,038,845
- SalesAmountCustomValueWithAggregate:21,038,845
我测试了以下版本:
- SQL 2008R2 SP2 10.50.4279.0 x64
- SQL 2012 11.0.2100.60 x64
你对正在发生的事情有什么想法吗?
提前非常感谢。
保罗·科雷亚