繁体   English   中英

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

[英]Spotfire: calculating difference between two rows in same column based on attributes in different columns

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

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

最后一天由另一列中给出的“ Last和“ Bodyweight”测量值表示。 存在另一列,称为Baseline 如果该列的该行为Y ,则将所测体重作为基线。

我需要插入一个计算列,该列将包含“ Last (表示为“ Last在“ Day Last Body measurement得的“ Body measurement与“ BaselineY标记的“ Body measurement之间的差异。

应该为每个新ID进行此操作。 我无法弄清楚。 有人可以建议我怎么做吗?

这是一个例子

在此处输入图片说明

因此,Rita的计算列将为-4 (体重在Last=56 ,体重在baseline=56 ,因此52-56 = -4

您提供的样本数据有些奇怪,尤其是[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代替“ Last”(如果您有任何超过一百万天的程序,则需要增加该数量)。 [Baseline]列相同,但是该值为-1000000 ,这大概是您在此列中看到的最低值。 这两个都是假设,可能对您的实现不起作用 最后,在所有其他情况下,将使用日期编号。

第2列,我称为Diff

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

第一行使用OVER表达式来检索[Weight]的第一个值,该值按[Name][Day (int)]排序。 第二行给出了相反的结果,因此差被计算为-4 (或任何合适的值)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM