我一直试图通过MDX获取以下查询的ValueR列,而是将ValueW作为MDX的输出
select
exp(Log(sum(MTMROR)+ 1 ))-1 as ValueW,
exp(sum(Log(MTMROR + 1)))-1 as ValueR
from
Temp_Performance
where Rundate in ('2015-03-01','2015-03-02')
为上述查询编写的MDX是
With
Member [Measures].[LogValuePre]
as ([Measures].[MTMROR] + 1)
Member [Measures].[LogValuePre1]
as VBA![LOG]([Measures].[LogValuePre])
Member [Measures].[LogValue]
as VBA![Exp](Sum([Measures].[LogValuePre1]))-1
select
{
[Measures].[LogValuePre],
[Measures].[LogValuePre1],
[Measures].[LogValue]
} on 0,
{
[Dim Company Fund].[Company Fund Id].&[1274]
//* {[Dim Time].[Date].&[2015-03-01T00:00:00] : [Dim Time].[Date].&[2015-03-//02T00:00:00]}
} on 1
from
(
select {[Dim Time].[Date].&[2015-03-01T00:00:00] : [Dim Time].[Date].&[2015-03-02T00:00:00]} on 0
from [DSV_Cube]
)
[MTMROR]度量具有总和函数Sum。我可以从这种行为得到的是MDX首先聚合结果,默认聚合函数是Sum。当我尝试通过在行上具有日期维度(未注释日期维度)来查看具有更精细数据的值时,我获得正确的日志和exp日志值。它显示正确的值作为日期维度是事实表中最细粒度的级别。在尝试以较低粒度级别(基金级别)获取数据时,自动应用求和函数 如果我在立方体结构中将AggregateFunction设置为none,则输出为null。 如何在[MTMROR]测量中的求和函数之前应用对数函数?
由于
答案 0 :(得分:0)
将聚合类型保持为None
并在多维数据集中添加计算成员,如下所示:
SCOPE
(
[Dim Time].[Date].[All],
[Measures].[MTMROR]
);
This =
SUM
(
NonEmpty
(
[Dim Time].[Date].MEMBERS,
[Dim Company Fund].[Company Fund Id].CURRENTMEMBER
)
* [Dim Company Fund].[Company Fund Id].CURRENTMEMBER,
[Measures].[MTMROR]
)
这样做只要日期级别粒度不在上下文中(即ALL
成员所在),它就会找到此基金ID的所有日期以及该基金ID和日期的组合,它总结了它(有效地将AggregationType
保持为SUM)。相反,如果日期在轴上,它表现正常并显示值。
希望这有帮助。
修改强>
如果聚合类型为SUM
,请在度量值组中再添加一个度量值,并将其值保持为LOG(MTMROR + 1)
在计算中使用它。