如何更新多维数据集以使mdx正常工作

时间:2015-10-05 12:02:06

标签: sql ssas mdx cube

我一直试图通过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]测量中的求和函数之前应用对数函数?

由于

1 个答案:

答案 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)

在计算中使用它。