MDX iif日期比我的立方体中没有正确评估的日期更好

时间:2015-10-02 15:16:31

标签: date ssas mdx olap-cube iif

我有一个问题似乎很容易解决,但我不能。在我的Fact表中,我有一个Timestamp字段,它是smalldatetime Type。这个事实通过其fulldate_Fk(也是SmallDatetime)与时间维度相关联。所以我想要的是将时间戳与FullDate_FK进行比较,从而创建如下计算:

iif([Dim Time].[Date].CurrentMember.MemberValue <= 
    [Fact].[Timestamp].CurrentMember.MemberValue
   ,[measures].[YTD Actuals]  
   ,[measures].[YTD Actuals]+[measures].[YTD Com])

但它根本不起作用。所有[昏暗时间]。[日期]似乎被评估为&lt;比时间戳。 P.S:时间戳是数据加载到数据库中的最后日期(在我的案例中为31/08)

这是我得到的结果:

 MONTH   |  YTD Actuals  |  YTD Com   |  Calculation;
 JAN  ,        10      ,        10   ,        10;
 FEB  ,        20      ,        10   ,        20;
 MAR  ,        40      ,        20   ,        40;
 MAY  ,        60      ,        30   ,        60;
 JUN  ,        70      ,        50   ,        70;
 JUL  ,        85      ,        50   ,        85;
 AUG  ,       120      ,        55   ,       120;
 SEP  ,       120      ,        60   ,       120;
 OCT  ,       120      ,        70   ,       120;
 NOV  ,       120      ,        80   ,       120;
 DEC  ,       120      ,        90   ,       120;

从8月开始,我应该在计算中得到实际YTD和Com YTD的总和,但我仍然只有YTD的实际值?

额外信息 我只是通过在Excel中拖动属性来使用数据透视表。行和度量中的月份(2 YTD和新计算成员)

1 个答案:

答案 0 :(得分:0)

如果您构建一个新的calc:

[Fact].[Timestamp].CurrentMember.MemberValue

将其添加到数据透视表时它会返回什么?空值?我怀疑CurrentMember是All成员,因此MemberValue为null。但是,让我们测试一下。

事实表中的所有行都具有相同的时间戳,还是有许多不同的时间戳?

如果您的事实表有10000行,您是否期望IIf计算将被评估10000次(每行一次)?这不是MDX的工作方式。在包含12行的数据透视表中,IIf计算得到了每月谷物评估12次。

如果要在10000行中的每一行上进行计算,则在SQL中编写计算并在到达多维数据集之前在SQL视图中执行。

要使calc在您想要在多维数据集中工作,请考虑执行以下操作。在DimTime SQL表中添加一个名为Today Flag的新列。它应该在ETL期间更新为仅在今天的行上为Y,并且在其他行上应为N.然后将该列添加为Dim Time维度的新属性。你可以使它Visible = False。然后转到计算选项卡并翻转到脚本视图并替换当前的[度量]。[计算]计算结果:

Create Member CurrentCube.[Measures].[Calculation] as
[measures].[YTD Actuals];
Scope({Exists([Dim Time].[Month].[Month].Members,[Dim Time].[Today Flag].&[Y]).Item(0).Item(0):null});
    [Measures].[Calculation] = [measures].[YTD Actuals]+[measures].[YTD Com];
End Scope;