在Spotfire中基于其他列下一行值创建计算列
在Spotfire中生成desired_B和desired_C列的正确方法
根据你给出的预期输出,以下是针对两列的正确计算逻辑:
1. 生成desired_B列
desired_B需要获取同一patient_ID分组内,当前行的下一行column_A值,最后一行显示NA。使用Lead窗口函数即可实现,无需复杂的Intersect嵌套:
Lead([column_A]) over (Partition By [patient_ID] Order By [Rank])
2. 生成desired_C列
desired_C是当前行column_A与上一行column_A的拼接字符串(格式为当前值-上一行值),第一行显示NA。这里使用Lag窗口函数获取上一行的值,再做字符串拼接:
If(Rank([Rank]) over (Partition By [patient_ID] Order By [Rank]) = 1, Null(), [column_A] || "-" || Lag([column_A]) over (Partition By [patient_ID] Order By [Rank]) )
原代码问题说明
你之前使用的Last([column_A]) over (Intersect([patient_ID],Next([Rank])))逻辑错误:
Next([Rank])会返回当前行Rank的下一个数值,但Intersect无法正确关联分组与排序的窗口范围;- 这类跨行取值场景,Spotfire推荐直接使用
Lead(取下一行)和Lag(取上一行)函数,配合Partition By分组、Order By排序,逻辑更清晰且不易出错。
内容的提问来源于stack exchange,提问作者Irma
相关产品推荐
相关产品推荐

