如何在Spotfire中按重复值分组列并标记连续0的专属组别?
在Spotfire中识别连续0组并提取最后一组数据的实现方法
先明确你的需求场景:
你有列A的数据如下:
------ | A | ------ | 11 | ------ | 0 | ------ | 0 | ------ | 5 | ------ | 0 | ------ | 0 | ------ | 2 | ------
想要生成列B来唯一标记每组连续的0,得到这样的结果:
------------ | A | B | ------------ | 11 | null| ------------ | 0 | 1 | ------------ | 0 | 1 | ------------ | 5 | null| ------------ | 0 | 2 | ------------ | 0 | 2 | ------------ | 2 | null| ------------
最终目的是提取最后一组连续0(也就是示例里的组别2)的数据,这个在Spotfire里完全可以做到,下面是具体步骤:
第一步:生成标记连续0组的列B
我们需要通过几个计算列逐步实现:
创建辅助列
IsZero:用来标记当前行是否为0
打开添加列→计算列,输入公式:If([A] = 0, 1, 0)这样0会被标记为1,非0值标记为0。
创建辅助列
GroupStart:用来标记新的连续0组的起始行
同样添加计算列,用Lag函数对比上一行的IsZero值:If([IsZero] = 1 and Lag([IsZero]) Over (Order By [RowID]) = 0, 1, 0)注意:如果你的数据没有行顺序标识,先添加一个
RowID列(通过添加列→行ID生成),确保数据按你需要的顺序处理。生成最终的列B:通过累计求和给每个连续0组分配唯一ID
添加计算列,公式如下:If([IsZero] = 1, Sum([GroupStart]) Over (Order By [RowID] Rows Between Unbounded Preceding And Current Row), Null)这样非0行显示Null,每组连续0会得到唯一的数字编号,和你期望的结果完全一致。
第二步:提取最后一组连续0的数据
有了列B之后,提取最后一组就很简单了:
获取最大的分组ID:添加一个计算列
MaxGroupID,公式:Max([B]) Over ()这个列会返回所有分组里的最大编号,也就是最后一组的ID。
筛选目标数据:设置筛选条件为
[B] = [MaxGroupID],就能精准筛选出最后一组连续0的所有行。
如果你不想额外加列,也可以直接在筛选器里选择列B的最大值,但用计算列的方式更适合数据自动更新的场景,不用每次手动调整。
内容的提问来源于stack exchange,提问作者branx
相关产品推荐
相关产品推荐

