我正在Spotfire中处理数据。该表有4列:
RowID
StudID
IMT
Date
我正在尝试在Spotfire中插入计算列,以从特定StudID
的上一行获取日期。由于特定的StudID
没有上一行,因此不应为第一次输入该日期。
有关详细信息,请参考图片:
答案 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,以确保其正确排序,就像我对“日期”列所做的那样。