2

以下返回我们月份集中的最后一个成员:

TAIL([Date].[Date - Calendar Month].[Calendar Month],1)

我们的多维数据集包含昨天(包括昨天)的数据 - 因此,如果今天运行上述内容,它将返回成员[July 2013]

我想要最后完成的月份,所以如果今天(7 月 4 日)运行它应该返回[June 2013]

不确定这是否会增加一些额外的复杂性,但如果表达式在一个月的第一天运行,那么层次结构中的最后一个成员实际上将等于 Last Complete Month。

所以有时最后一个完整的月份是最后一个成员,有时它是层次结构中的下一个但最后一个成员[Calendar Month]

有没有一种万无一失的方法来编码这个表达式?

4

1 回答 1

3

您可以轻松确定“现在”是否是每月的第一天,如下所示:

IIF( Day(Now()) = 1, ... , ... )

因此,您可以创建一个计算成员:

with member [Last Completed Month] as
    IIF( Day(Now()) = 1,
         TAIL([Date].[Date - Calendar Month].[Calendar Month],1)(0),
         TAIL([Date].[Date - Calendar Month].[Calendar Month],2)(0)
    )

不知道 [Calendar Month] 层次结构,但也许使用 lastChild 和 lastChild.prevMember 会更有效......

[编辑] Tail( ... )(n) 检索 Tail 返回的集合的第 n 个元素 - 这是 item(n) 的快捷方式

[编辑] 想象月份层次结构在所有成员下是平坦的:[Calendar Month].[All].lastChild 将与 Tail() 和 lastChild.prevMember 执行相同的操作以获取最后一个之前的那个。

于 2013-07-04T23:57:22.800 回答