1

我是新手,SSAS更是如此,MDX我需要您在以下情况下的帮助。

在我的多维数据集中,有一个名为 WIP Hours(Work In Progress Hours)的度量。该度量来自称为 WIP 的度量组,它基于事实表,即 facWIP。

facWIP 表从源表中获取其数据。每次用户向前端系统输入 WIP 条目时,该条目都会存储在此表中。但是,用户并不总是每天都输入一个条目。

例如,有一个条目16 Aug 2013 and the WIP value = 47。下一个条目是 on26 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..

非常感谢任何帮助。

谢谢!

4

1 回答 1

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会得到更好的结果。

于 2013-09-06T11:57:28.267 回答