我有一个问题似乎很容易解决,但我不能。在我的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和新计算成员)
答案 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;