计算Spotfire中特定行的同一列的差异

时间:2016-09-23 13:35:40

标签: calculated-columns difference spotfire

我对使用Spotfire中的计算列的行的差异计算存在问题。

我想知道是否可以创建一个计算列来计算当前行与具有不同属性的下一行之间的差异。  样本表可以是这样的:

enter image description here

结果可能是这样的:

enter image description here

基本行是:

  1. 类型 = 1时,计算其当前与其下一个最近的行类型 = 0之间的差异,然后添加结果到一个新的计算列。
  2. 顺便说一下,VALUE总是增加:)
  3. 例如,对于第一个结果 2 ,当前值为20,下一行是最近的类型,为0,下一行的值为22,则结果为2
  4. 但是对于下一个类型= 1,当前值为25,其最近的类型= 0在第六行,因此结果可能是29-25 = 4
  5. 我试过的方法:

    1. 我添加了一个新的RowID列
    2. 然后尝试代码:

      if([type]=1),[value] - Sum([value]) OVER (PreviousPeriod([RowID])),null)
      
    3. 但它只是显示类型1之间的区别,没有类型1和类型0 :(

      非常感谢任何帮助或建议:)

      谢谢!

2 个答案:

答案 0 :(得分:4)

  1. 插入专栏RowNum并将其命名为([value] - first([value]) over (intersect(previous([type]),AllNext([RowNum])))) * -1
  2. 使用以下表达式插入一列:
  3. t1

    这就是它的样子。我将列命名为Val。您也可以忽略OVER列:

    Bob Dorr in this article

    <强>解释

    这里的技巧是将first([value])子句中的值限制为当前行之后的值。此外,我们希望获得符合我们标准的第一个,下一个可用值。因此,我们采用第一个值[type],它具有前一个[type]。由于[type] = 1没有任何负值,因此总是0,因此这会通过使用previous([type])将我们正在使用的行限制为AllNext([RowNum])的行。现在,为了将其限制为仅当前行之后的行,我们使用IntersectRowNum = 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;列在后台运行。它们不需要包含在主表中

决赛桌如下所示:

enter image description here

此外,此解决方案可以在值的任何顺序中正常工作。我已经使用不同的方案测试了此解决方案,并且似乎工作正常。