Spotfire中基于相同ID从其他行获取对应时间的实现方案求助
在Spotfire中根据PreviousID匹配ID生成PreviousTime列
需求说明
需要在Spotfire中实现:根据PreviousID匹配表内的ID,获取对应行的Time值并生成新列PreviousTime。需求等价于以下SQL查询:
SELECT a.ID, a.Time, a.POKey, a.PreviousID, b.Time as PreviousTime From Table a, Table b WHERE a.PreviousID = b.ID
原始数据表
| ID | Time | POKey | PreviousID |
|---|---|---|---|
| 6 | 0:59 | A | 6 |
| 7 | 1:00 | A | 6 |
| 9 | 1:02 | A | 6 |
| 13 | 1:06 | A | 9 |
| 14 | 1:07 | A | 9 |
| 15 | 1:08 | A | 9 |
期望结果表
| ID | Time | POKey | PreviousID | PreviousTime |
|---|---|---|---|---|
| 6 | 0:59 | A | 6 | 0:59 |
| 7 | 1:00 | A | 6 | 0:59 |
| 9 | 1:02 | A | 6 | 0:59 |
| 13 | 1:06 | A | 9 | 1:02 |
| 14 | 1:07 | A | 9 | 1:02 |
| 15 | 1:08 | A | 9 | 1:02 |
实现方法
方法1:使用计算列(LOOKUP函数)
无需修改数据源,直接在现有表中生成计算列:
- 点击顶部菜单栏 数据 -> 添加计算列
- 设置列名为
PreviousTime,输入表达式:LOOKUP([Time], [ID], [PreviousID]) - 点击确定即可生成目标列。
说明:
LOOKUP函数会在表内匹配ID等于当前行PreviousID的记录,返回对应Time值;由于你的场景中ID唯一,不会出现多值匹配问题。
方法2:数据源自连接
在数据连接层完成关联,类似SQL自连接逻辑:
- 打开数据连接编辑器,两次添加目标数据表,分别命名为
a和b - 设置连接条件:
a.PreviousID = b.ID - 选择需要的列:
a.ID、a.Time、a.POKey、a.PreviousID,并将b.Time重命名为PreviousTime - 完成连接后加载数据,即可得到目标结果。
内容的提问来源于stack exchange,提问作者James Chou
相关产品推荐
相关产品推荐

