我是SSAS
的新用户,MDX
更新,我需要您的帮助以获取以下方案。
在我的多维数据集中,有一个名为WIP Hours(Work In Progress Hours)的度量。 该度量来自称为WIP的度量组,它基于事实表,即facWIP。
facWIP表从源表中获取其数据。 每次用户将WIP条目输入到前端系统时,该条目都存储在此表中。 但是,用户并不总是每天都输入一个条目。
例如,16 Aug 2013 and the WIP value = 47
有一个条目。
下一个条目位于26 Aug 2013 of WIP = 42
2013年8月17日至8月25日在源表中没有条目,因此在事实表中也是如此。
这反映在我构建的多维数据集中。 要求是如果特定日期没有条目,则需要使用/显示最后可用的数字。 所以在这种情况下,在立方体中应该有8月17日至25日的条目,WIP = 47等等。
我根本不知道如何做到这一点。 我尝试使用以下MDX
CREATE MEMBER CURRENTCUBE.[Measures].[WIP Hours_2]
AS
(TAIL(NONEMPTY(DESCENDANTS([Calendar].[Calendar].CURRENTMEMBER,[Calendar].[Calendar].[Calendar Date]), [Measures].[WIP Hours]),1).ITEM(0), [Measures].[WIP Hours]),
//NON_EMPTY_BEHAVIOR = { [Measures].[WIP Hours] },
VISIBLE = 1 , ASSOCIATED_MEASURE_GROUP = 'WIP' ;
但它没有做我想要的。
2013年9月8日更新:
我也在尝试另一种替代方法,即将表格与日历表交叉加入,以便每个任务WIP组合都有每天的条目。 对于实际没有实际WIP值的条目,它将是WIP = NULL。 这种方法的缺点是事实表变得更大,ETL过程更长,从1.5M到17M的记录!
我正在考虑这样做,不知何故在使用MDX的立方体计算度量中,我可以这样说: “如果当前日期的WIP为NULL,则获取/使用最后一个非NULL WIP值” 如果它有意义的话,我怎样才能在MDX中编写这个逻辑呢?
此外,目前,在多维数据集中,实际具有WIP = NULL的日期条目,其WIP显示为= 0 ..
非常感谢任何帮助。
谢谢!
答案 0 :(得分:1)
我会尝试递归方法:
// intermediate measure, makes the code more readable:
CREATE MEMBER CURRENTCUBE.[Calendar].[Calendar].[last day in period] AS
Tail(Descendants([Calendar].[Calendar].CURRENTMEMBER,
[Calendar].[Calendar].[Calendar Date]
)
).Item(0).Item(0),
VISIBLE = 0;
// final measure, defined using recursion:
CREATE MEMBER CURRENTCUBE.[Measures].[WIP Hours_2]
AS
IIf(IsEmpty( ( [Calendar].[Calendar].[last day in period], [Measures].[WIP Hours] )),
( [Calendar].[Calendar].[last day in period].PrevMember, [Measures].[WIP Hours_2] ),
( [Calendar].[Calendar].[last day in period], [Measures].[WIP Hours] )
),
VISIBLE = 1 , ASSOCIATED_MEASURE_GROUP = 'WIP' ;
true
IIf
的情况是递归,第二种情况是递归的终止。 SSAS应该能够在到达Calendar
层次结构的开头时立即结束递归,从而避免无限递归。
如果以上内容没有给出正确答案,那么使用<> 0
代替IsEmpty
可能会获得更好的结果。