2017-10-12 134 views
0

enter image description here我尝试了几个选项,但我没有得到正确的输出,所以我重新发布这个问题。如何进行计算,并且只有在列中最少有3个值时才执行计算?

我想执行计算,并且只有在列中最少有3个值时才应该执行。

只有在每列中最少有3个值的情况下才会执行计算,如果没有3个值,例如:对于项目1 - 期间1,我们没有任何以前的值,因此它应该终止。对于期间2,我们只有2个值,所以它应该终止。由于第3阶段我们有最少3个值,它应该执行计算sum(*last 3 values*)

最终输出应该是sum(HC)/ SUM(Time)

请参阅附加图像的数据。

enter image description here

回答

0

对于如果有3个值可用,如果你想在最后3时间的最后3 HC /金额的总和,你可以使用:

if((If(Min(If([HC] is null,-1,[HC])) over (Intersect([Project],LastPeriods(3,[Period])))=-1,0,1))=1,Sum([HC]) over (Intersect([Project],LastPeriods(3,[Period])))/Sum([Time]) over (Intersect([Project],LastPeriods(3,[Period])))) 

如果您想要最后3 HC /该行的时间总和,然后:

if((If(Min(If([HC] is null,-1,[HC])) over (Intersect([Project],LastPeriods(3,[Period])))=-1,0,1))=1,Sum([HC]) over (Intersect([Project],LastPeriods(3,[Period])))/[Time]) 

请注意,这是基于项目分组。如果你需要它按项目,任务,子任务分组,那么需要在相交处有逻辑。此外,您的数据的顺序由“期间”列确定。

+0

嗨Scsimon,这是我再次找到同样的问题。我使用你给出的第一个公式创建了一个计算列,它给了我最后3个HC的总和。我实际看到的是应该有一个计算,只要有3个值。所以如果你看到周期1没有以前的值,所以计算不应该执行。对于期间2,只有1个先前的值,因此再次计算不应执行。对于期间3,因为有3个先前值计算应执行 – BULB

+0

这就是发生在这里,这就是为什么你得到这些行的NULL值。 – scsimon

+0

@bulb这是怎么回答你的问题? – scsimon