(使用SSAS 2008r2,在Bids中工作)
关于计算出的时间段成员与计算出的半加性度量之间的相互作用,我遇到了一个令人困惑的问题。
我有一个"时间段"根据文章的界限构建的尺寸"一种不同的时间计算方法"允许用户过滤措施到"上周","上个月"等。
这些计算成员的代码如下所示:
Scope([Time Period].[LW]);
This = (ParallelPeriod([Time].[Date Hierarchy].[Week],
1,
[Time].[Date Hierarchy].currentmember)
, [Time Period].[Current]);
End Scope;
(显然月份和年份对于parallelPeriod有不同的第一个参数:))
对于我所拥有的几乎所有措施,这些工作都很好,其中大部分只是表值等的总和,除了库存指标。
我们将库存数据存储为移动值(2输入,1输出,5输入等),并且任何时间点的总库存水平是迄今为止的总和。这些是通过以下计算实现的:
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周。
使用"上周"从时间段维度,计算按预期工作,完全没有问题。
使用"上个月"它看起来像是迄今为止的总和"计算缺少第5周的库存移动值(即它给出了第1周,第2周,第3周,第4周至今的库存变动总和,并排除了第5周的所有库存变动)。使用"去年"它正在做同样的事情,但仅排除第53周的库存变动值(包括使用&#34时的第5周库存变动;去年和#34;)。但是,如果我在查询中使用以下成员:
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])
它正常工作。因此看起来问题是[时间段]。[LW]或[时间段]。[LY]维度成员与迄今为止的总和[度量]。[库存数量]计算......
所以我想我知道问题出在哪里,之前有人看过这个问题,或者可以就如何修复它提出一些建议? (如果可能的话,为什么?需要它才能工作但是我很想知道我在哪里出错!!)
答案 0 :(得分:0)
ParallelPeriod
只有在同一级别的堂兄弟数量相同时才有效。它的工作原理如下:从当前成员上升到目标级别,每次都记住成员在其父级子项中的位置。然后返回这么多成员作为第二个参数说明,然后下降到开始级别,每次考虑子位置。因此,在四个月的月份里,它将引导你从第四周到第四周,并且不能引导你到第五周。
在你的情况下,每个级别的孩子数量可以相差一个,可能是一个逻辑某种方式如何"如果当前成员是其父级的最后一个孩子,则使用该时期的最后一个孩子,否则使用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;
我没有测试上面的代码,可能需要进行一些调整以获得错误证明,但你应该明白这一点。