如何在Tibco Spotfire中对时间序列数据按30分钟间隔下采样并取最近00/30分对应值?
在Tibco Spotfire中实现30分钟间隔的时间序列下采样(取最接近00/30分的数据)
需求说明
将时间序列数据下采样至30分钟间隔,每个间隔仅保留最接近00分或30分时间戳的对应数据行。
输入数据
ID DateTime Value ----------------------------- ID1 2022-06-06 19:01:34Z 100 ID1 2022-06-06 19:06:31Z 200 ID1 2022-06-06 19:11:34Z 300 ID1 2022-06-06 19:16:31Z 400 ID1 2022-06-06 19:21:32Z 500 ID1 2022-06-06 19:26:33Z 600 ID1 2022-06-06 19:31:32Z 700
期望输出
ID DateTime Value ----------------------------- ID1 2022-06-06 19:00:00Z 100 ID1 2022-06-06 19:30:00Z 700
实现步骤
创建间隔起始计算列
添加计算列IntervalStart,公式:Floor([DateTime] to minute) - Minute([DateTime])%30 * Minute(1)该公式会将每个时间戳映射到所属的30分钟间隔起始点(00分或30分),例如19:01:34会被映射为19:00:00,19:31:32映射为19:30:00。
计算时间差绝对值
添加计算列TimeDiff,公式:Abs(Seconds([DateTime] - [IntervalStart]))用于衡量每个数据点与对应间隔起始点的时间距离。
筛选最接近的记录
添加计算列RankWithinInterval,公式:Rank([TimeDiff],"asc",[ID],[IntervalStart])该列会在每个ID和间隔内,按时间差从小到大排序,最小差值的记录排名为1。
过滤结果
在数据筛选器中设置RankWithinInterval = 1,即可得到每个30分钟间隔内最接近00/30分的记录。
替代方法(分组关联)
如果不想用排名列,也可以通过分组+关联实现:
- 使用分组依据工具,按
ID和IntervalStart分组,计算Min([TimeDiff])得到每个间隔的最小时间差; - 将分组结果与原数据表关联(关联条件为
ID、IntervalStart、TimeDiff),即可提取对应的数据行。
内容的提问来源于stack exchange,提问作者Starbucks
相关产品推荐
相关产品推荐

