我在完成一些我认为在 MDX 中应该相对简单的事情时遇到了一些麻烦。我想创建一个计算成员,它提供我在过去两周在给定时间点的一项措施的总和。我的时间维度如下:
TimeId TradingDate Day of Week
-----------------------------------
1000 11/1/2012 Thursday
1001 11/2/2012 Friday
1002 11/5/2012 Monday
1003 11/6/2012 Tuesday
... ...
让这件事变得特别困难的是,我的时间维度还不够完整。我的时间维度的成员只对应股票市场的交易日,而不是所有时间。这意味着不包括周末、节假日或股市休市的任何其他日子。这也意味着穿越时间的常规方法,例如LAG
orPARALLELPERIOD
不会在这里完全起作用。 LAG(14)
例如,表示“14 个交易日”,在任何给定时间点都可能代表可变长度的实际时间。
在我的计算成员中,我试图使用 FILTER 来仅获取 CurrentMember 前两周内的时间成员。但是,我似乎无法弄清楚完成此操作的正确语法(如果有的话)。我想它会是这样的:
WITH MEMBER [Sum of Price Previous 2 Weeks] AS
SUM(
FILTER(
[Time].[TimeId].Children
, [Time].[TradingDate].MemberValue
>= VBA!DATEADD("ww", -2, [Time].[TradingDate].CurrentMember.MemberValue)
)
, [Price]
)
然而,这并不完全奏效。我似乎无法将计算成员当前迭代的上下文与FILTER
函数内部的单独上下文分开。换句话说,我不知道该怎么说:
“在 中迭代集合时
FILTER
,将每次迭代的当前成员与计算成员范围内的 CurrentMember 的值进行比较”
我正在努力实现的目标是可能的吗?我可以采取不同的方法来完成我所追求的目标吗?