根据条件从计算列中的前一行检索值

时间:2018-08-23 17:07:18

标签: date row spotfire

我正在Spotfire中处理数据。该表有4列:

RowID
StudID
IMT
Date

我正在尝试在Spotfire中插入计算列,以从特定StudID的上一行获取日期。由于特定的StudID没有上一行,因此不应为第一次输入该日期。
有关详细信息,请参考图片:

Details in image

2 个答案:

答案 0 :(得分:0)

这将是使用OVER function以及相交,上一个和第一个聚合的计算列。

First([Date]) OVER Intersect(Previous([Date]), [StudID])

它显示为:在先前(到当前行)的(一组)日期(相同)和学生证的日期(与当前行相同)之间的交集上,给我该组的第一行。在您的示例中,它将仅返回该组的一个日期,但是该公式需要能够处理如果存在多行的情况。您可能还需要考虑这是否会在您的数据中发生以及您将如何处理。即

StudID    Date
124-639   6/12/2018 
124-639   6/12/2018
124-639   6/14/2018

答案 1 :(得分:0)

根据JasonJ的回答,当不同StudID的日期彼此重叠时,他的解决方案似乎遇到了问题。

所以我看到了类似的东西:

StudID, Date, Result
A, 10/1/2014, 
A, 10/10/2014, 10/1/2014
A, 10/17/2014, 10/10/2014
B, 10/20/2014, 
A, 10/21/2014,
B, 10/22/2014,
B, 10/24/2014, 10/22/2014

我通过添加另一个计算列创建了一个怪异的解决方法。 我怀疑这是执行此操作的理想方法(我敢打赌,这里有一个更好的OVER函数,但我无法立即识别出它),但是它似乎正在运行。

第一个计算列(名为 [CalcRank] ):

Rank(Concatenate([StudID],Year([Date]),If(DayOfYear([Date])<10,"0",""),If(DayOfYear([Date])<100,"0",""),DayOfYear([Date])))

第二个计算列:

Max([Date])OVER(Intersect(Previous([CalcRank]),[StudID]))

请注意,您可能必须将StudID补上0,以确保其正确排序,就像我对“日期”列所做的那样。