(使用SSAS 2008r2,在投标中工作)
我遇到了一个关于计算的时间段成员和计算的半相加度量之间的交互的令人困惑的问题。
我根据文章“时间计算的不同方法”构建了一个“时间周期”维度,允许用户将度量过滤为“上周”、“上个月”等。
这些计算成员的代码如下所示:
Scope([Time Period].[LW]);
This = (ParallelPeriod([Time].[Date Hierarchy].[Week],
1,
[Time].[Date Hierarchy].currentmember)
, [Time Period].[Current]);
End Scope;(显然,parallelPeriod的月份和年份有不同的第一个参数:)
这些方法适用于我所拥有的几乎所有的度量方法,其中大多数只是表值等的总和,除了股票度量方法。
我们将股票数据存储为移动值(2 in,1 out,5 in等)而任何时间点的总库存水平就是迄今为止的总和。这些都是通过如下计算实现的:
Create Member CurrentCube.[Measures].[Stock Quantity] as
sum
(
null:tail(descendants([Time].[Date Hierarchy].CurrentMember,
[Time].[Date Hierarchy].[Date])).item(0)
, [Measures].[Stock Movement Quantity]
)现在来看看问题所在。时间按照4-4-5周月的模式设置,每4年53周。
当从时间段维度使用“上周”时,计算按预期工作,没有任何问题。
当使用"Last Month“时,看起来"sum to date”计算缺少第5周的股票移动数值(即,它给出了第1周、第2周、week3s、week4s至今的股票移动总和,并排除了第5周的所有股票移动)。当使用"Last Year“时,它做同样的事情,但只排除第53周的股票走动值(当使用"Last Year”时,它包括第5周的股票走势)。但是,如果我在查询中使用以下成员:
member [Measures].[Test] as
sum
(
null:tail(descendants(parallelperiod([Time].[Date Hierarchy].[Month],
1,
[Time].[Date Hierarchy].CurrentMember),
[Time].[Date Hierarchy].[Date])).item(0)
, [Measures].[Stock Movement Quantity])它工作正常。因此,问题看起来是在Time Period.LW或Time Period.LY维成员与sum to date Measures.Stock数量计算组合在一起时出现的。
所以我想我知道问题出在哪里,有没有人以前见过这个问题,或者能给出一些如何解决它的建议?(如果可能的话,为什么?我需要它才能工作,但我很想知道我哪里出错了!!)
发布于 2014-03-20 00:55:03
只有当表亲的数量在同一级别上是相同的时,ParallelPeriod才能正常工作。它的工作原理是这样的:从当前成员上升到目标级别,每次记住成员在其父级子级中的位置。然后向后移动第二个参数所声明的那么多成员,然后向下移动到开始级别,每次都会将子位置考虑在内。因此,在一个四周的月中,它将把你从第四周带到第四周,而不会把你带到第五周。
在你的例子中,每个级别的子成员的数量可以相差1,也许类似于“如果当前成员是其父成员的最后一个子成员,则使用句点后面的最后一个子成员,否则使用ParallelPeriod”这样的逻辑可能更合适,例如:
Scope([Time Period].[LW]);
This = (IIf([Time].[Date Hierarchy].CurrentMember IS [Time].[Date Hierarchy].CurrentMember.Parent.LastChild,
// assuming [Time].[Date Hierarchy].currentmember is a child of a member on the week level
[Time].[Date Hierarchy].CurrentMember.Parent.PrevMember.LastChild
,ParallelPeriod([Time].[Date Hierarchy].[Week],
1,
[Time].[Date Hierarchy].currentmember)
)
, [Time Period].[Current]);
End Scope;我没有测试上面的代码,它可能需要一些调整来获得错误证明,但您应该明白这一点。
https://stackoverflow.com/questions/22452019
复制相似问题