首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MDX计算的优先顺序错误

MDX计算的优先顺序错误
EN

Stack Overflow用户
提问于 2010-10-27 18:46:02
回答 2查看 1.6K关注 0票数 1

我有一个MDX查询的问题,我认为这归结为计算聚合和计算成员之间的优先顺序。

让我从底层数据开始,它围绕着估值(有日期,以及其他一些数据,如成员类型、方案-对于这个问题至关重要;加载因子)和相关的值。

数据

评价表

代码语言:javascript
运行
复制
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

ValuationValue表

代码语言:javascript
运行
复制
ValuationId | Value
====================
1           | 1000.0
2           | 2000.0
3           | 3000.0
4           | 4000.0

当加载到多维数据集中时,它有一个具有MemberType、Scheme和date属性的赋值维度。和一个多维数据集,该多维数据集具有包含Value度量的度量组ValuationValue,以及包含加载因子的评估度量值组,如下所示:

代码语言:javascript
运行
复制
Cube
 -Measure Groups
  - Valuation
    |_Loading Factor
  - ValuationValue
    |_Value
 - Dimensions
  - Valuation
    |_MemberType
    |_Scheme
    |_Date

问题是

加载因子是用来加载值的,把它想象成一种税,所以0.02意味着“加载量是值的2%”。当从查询返回值时,我还需要计算加载该值的数量。典型的查询可能如下所示

代码语言:javascript
运行
复制
SELECT
{
 [Measures].[Value] 
} ON 0,
[Valuation].[Scheme] ON 1
FROM Cube

这将返回2行,您可以通过与上面的数据进行比较看到,它正确地对memberType进行了求和:

代码语言:javascript
运行
复制
Scheme   | Value
=================
Scheme X | 3000.0
Scheme Y | 7000.0

现在,如果我试图在该查询中计算我的加载因子,一切都会出错--我将进行演示。给出以下查询:

代码语言:javascript
运行
复制
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

我得到了结果

代码语言:javascript
运行
复制
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)。

这当然是一个人为的例子,我的实际结构有点复杂-但我认为这说明了问题。我的印象是,上面示例中的计算成员应该逐行出现,而不是在我的值度量的聚合结束时出现。

感谢您的回复。

EN

Stack Overflow用户

回答已采纳

发布于 2010-11-02 23:43:06

事实证明这并不是一件容易的事。

代码语言:javascript
运行
复制
WITH MEMBER [Measures].[Loading Value]
AS
(
   [Measures].[Value] * [Measures].[Loading Factor]
)
WITH MEMBER [Measures].[Total Loading Value]
AS
SUM (
  EXISTING [Valuation].[Id].[Id],
  [Measures].[Loading Value]
)
SELECT
{
 [Measures].[Value] ,
 [Measures].[Measures].[Total Loading Value]
} ON 0,
[Valuation].[Scheme] ON 1
FROM Cube
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4032368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档