Spotfire:根据不同列中的属性计算同一列中两行之间的差异

时间:2018-03-25 09:21:28

标签: calculated-columns spotfire

我是Spotfire的新手,需要帮助才能获得计算列的正确表达式。

我的数据包含在ID列中分组的不同主题。对于每个ID,在不同的日子测量体重。天数在Day列中给出,并表示为1,2,3 ......

最后一天用Last表示,另一列给出了体重测量值。存在另一列,称为Baseline。如果该列包含该行的Y,则测量的体重被视为基线。

我需要插入一个计算列,其中包含Body measurementDay上标记的LastBody measurementY标记的列之间的差异Baseline

应该为每个新ID执行此操作。我无法弄清楚这一点。有人可以告诉我如何去做吗?

Here is an example attached

enter image description here

因此,Rita的计算列将给出 -4 Last=56的体重和baseline=56的BodyWeight,所以52-56 = -4 < /强>)

1 个答案:

答案 0 :(得分:1)

您提供的示例数据有点奇怪,尤其是[Day]列。如果它在你的控制范围内,我建议在这里使用实际日期而不是数字/字符串。

除此之外,我能够获得您想要的结果,但它需要两个计算列:第一列将[Day][Baseline]列合并为一列,第二列包含你想要的信息。

第1列,我打电话给Day (int)

CASE  
  WHEN [Day]="Last" THEN 1000000 
  WHEN [Baseline]="Y" THEN -1000000 
  WHEN [Day]!="Last" THEN Integer([Day])
END

我选择了一个随机的高和低最大值来建立一个按时间顺序排列。这将使1000000代替“最后”(如果您有任何超过一百万天的程序,则需要增加此数字)。 [Baseline]列的内容相同,但该值为-1000000,这可能是您在本专栏中看到的最低值。 这些都是假设,可能对您的实施无效。最后,在所有其他情况下,将使用日期编号。

第2列,我打电话给Diff

Last([Weight]) OVER (Intersect([Name],LastNode([Day (int)]))) -
First([Weight]) OVER (Intersect([Name],FirstNode([Day (int)])))

第一行使用所谓的OVER expression来检索[Weight]的第一个值,按[Day (int)]排序,每[Name]。第二行给出了相反的结果,因此差异计算为-4(或任何适当的值)。