我对使用Spotfire中的计算列的行的差异计算存在问题。
我想知道是否可以创建一个计算列来计算当前行与具有不同属性的下一行之间的差异。 样本表可以是这样的:
结果可能是这样的:
基本行是:
我试过的方法:
然后尝试代码:
if([type]=1),[value] - Sum([value]) OVER (PreviousPeriod([RowID])),null)
但它只是显示类型1之间的区别,没有类型1和类型0 :(
非常感谢任何帮助或建议:)
谢谢!
答案 0 :(得分:4)
RowNum
并将其命名为([value] - first([value]) over (intersect(previous([type]),AllNext([RowNum])))) * -1
t1
这就是它的样子。我将列命名为Val
。您也可以忽略OVER
列:
<强>解释强>
这里的技巧是将first([value])
子句中的值限制为当前行之后的值。此外,我们希望获得符合我们标准的第一个,下一个可用值。因此,我们采用第一个值[type]
,它具有前一个[type]
。由于[type] = 1
没有任何负值,因此总是0,因此这会通过使用previous([type])
将我们正在使用的行限制为AllNext([RowNum])
的行。现在,为了将其限制为仅当前行之后的行,我们使用Intersect
。 RowNum = 4
语句状态采用满足这两个规则的值。所以看[value] = 25
Previous([type])= 0 since current type is 1
AllNext([RowNum]) = RowNum that is > our RowNum which is 4, so tow numbers 5 - 7
The First([Value]) that meets these criteria is in RowNum = 6, which is 29 since it has [Type] = 0 and it's RowNum is > 4
Note, Row 7 also meets this criteria but it isn't the First() one.
Now, do the math... 25-29 = -4, and since you said the values always increase, we just multiply by -1 to get it in the format you wanted
就像这样进行评估。
{{1}}
答案 1 :(得分:0)
@ZAWD - 另一种解决方法:
第1步:已插入计算列&#39; RowID&#39;使用表达式RowId()
第2步:插入计算列&#39; test0&#39;使用下面的表达式
sum([Value]) over (Intersect(next([RowID]),Previous([Type])))
第3步:插入计算列&#39;测试&#39;使用下面的表达式
[Value] - sum([test0]) over (Next([RowID]))
第4步:已插入计算列&#39; myresult&#39;使用下面的表达式
Abs(If((Sum([Type]) over ([RowID])=1) and (Sum([Type]) over (Next([RowID]))=1),[test],[Value] - [test0]))
注意:&#39; test0&#39;和&#39;测试&#39;列在后台运行。它们不需要包含在主表中
决赛桌如下所示:
此外,此解决方案可以在值的任何顺序中正常工作。我已经使用不同的方案测试了此解决方案,并且似乎工作正常。