我对 MDX 查询有疑问,我认为这归结为计算聚合和计算成员之间的优先顺序。
让我从基础数据开始,它围绕估值(有日期,以及一些其他数据,如成员类型、方案——对于这个问题至关重要;加载因子)和相关值。
数据
估值表
Id | Valuation Date | Member Type | Scheme | Loading Factor
=============================================================
1 | 2010-01-01 | TypeA | Scheme X | 0.02
2 | 2010-01-01 | TypeB | Scheme X | 0.02
3 | 2010-01-01 | TypeA | Scheme Y | 0.02
4 | 2010-01-01 | TypeB | Scheme Y | 0.02
估价表
ValuationId | Value
====================
1 | 1000.0
2 | 2000.0
3 | 3000.0
4 | 4000.0
这在加载到多维数据集时具有一个带有 MemberType、Scheme 和 date 属性的 Valuation 维度。还有一个带有 Measure 组 ValuationValue 的多维数据集,其中包含 Value 度量,以及一个包含 Loading Factor 的 Valuation 度量组,如下所示:
Cube
-Measure Groups
- Valuation
|_Loading Factor
- ValuationValue
|_Value
- Dimensions
- Valuation
|_MemberType
|_Scheme
|_Date
问题
Loading factor是用来加载Value的,把它想象成税,所以0.02表示“加载量是价值的2%”。从查询返回值时,我还需要计算加载该值的数量。一个典型的查询可能看起来像
SELECT
{
[Measures].[Value]
} ON 0,
[Valuation].[Scheme] ON 1
FROM Cube
这将返回 2 行,正如您通过与上面的数据进行比较可以看到的那样,它在 memberType 中正确求和:
Scheme | Value
=================
Scheme X | 3000.0
Scheme Y | 7000.0
现在,如果我尝试在该查询中计算我的加载因子,一切都会出错 - 我将演示。给定以下查询:
WITH MEMBER [Measures].[Loading Value]
AS
(
[Measures].[Value] * [Measures].[Loading Factor]
)
SELECT
{
[Measures].[Value] ,
[Measures].[Loading Value]
} ON 0,
[Valuation].[Scheme] ON 1
FROM Cube
我得到结果
Scheme | Value | Loading Value
=================================
Scheme X | 3000.0 | 120.0
Scheme Y | 7000.0 | 280.0
基本上,正在发生的事情是它对我的加载因子求和,然后将它乘以我的值的总和(上面的第一行应该是1000 * 0.02 + 2000 * 0.02 = 60
。而是在计算3000 * 0.04 = 120
)。
这当然是一个人为的例子,我的实际结构有点复杂 - 但我认为这说明了问题。我的印象是,上面示例中的计算成员应该逐行出现,而不是在我的价值度量的聚合结束时出现。
感谢您的任何回复。