麦粉社区
>
帖子详情

SmartBI 里用 哪一个模块还是其他功能能实现这个逻辑?

数据准备 发表于 2026-3-12 15:08
发表于 2026-3-12 15:08:30
我通过 SmartBI 自助 ETL 的 API 抽取并保存了一批巡检类数据,现在需要给这批数据新增「是否合格」字段,想请教下用 SmartBI 的什么功能能实现这个判定逻辑?

 

具体判定规则如下:


  1. 先按「所属地」字段对数据分组(比如 A 地区、B 地区的数据各自成组);

  2. 每组内的第一条数据,默认判定为「合格」;

  3. 每组内从第二条数据开始,只和本组内上一条已经判定为 “合格” 的数据对比时间差

    • 如果时间差>1 小时 → 本条判定为「合格」;

    • 如果时间差≤1 小时 → 本条判定为「不合格」;


     


  4. 注意:不是和 “前一条数据” 对比,而是和 “前一条合格的数据” 对比(比如连续多条不合格时,始终和最早那条合格数据比)。



核心难点说明:


这个逻辑的关键难点在于 ——“合格状态是动态更新的,不能仅按数据的自然顺序简单对比前一条数据”
比如当出现连续多条不合格数据时,后续数据不能对比紧邻的前一条(不合格)数据,而是要持续 “回溯” 到本组内最近一次判定为合格的那条数据做对比;且每当有新数据被判定为合格时,后续所有数据的对比基准都会更新为这条新的合格数据,而非固定基准。

 



想确认下:SmartBI 里用 哪一个模块还是其他功能能实现这个逻辑?

 
发表于 2026-3-12 15:55:59
你这个建议再封装接口写代码比较合适,因为这个得循环处理,每次对比的数据都是变化的。
像是自助ETL就有个python脚本可以用
回复

使用道具 1 举报

发表于 2026-3-13 08:57:47
js代码写循环,获取数据量最大的那个省份的条数作为循环次数,循环判断不就行了吗
回复

使用道具 1 举报

发表于 2026-3-13 15:14:28
本帖最后由 橘猫今天喝水了吗 于 2026-3-13 15:16 编辑

其他功能:


如果你的数据库支持窗口函数的话(比如Oracle、MySQL数据库),可以使用窗口函数来写。


示例:


 


select


所属地,


时间,


case when 排名=1 then '合格' when 时差>'一小时' then '合格' else 不合格 end as 是否合格   -------这里的排名不是必须的,第一条的时差应该是null。


from



select


所属地,


时间,


row_number() over( partition by 所属地市 order by 时间 asc ) as 排名,----排名不是必须的


时间- LAG(时间,1) over(partition by 所属地 order by 时间 asc ) as 时差


from 巡检数据 )


 

回复

使用道具 1 举报

高级模式
B Color Image Link Quote Code Smilies
您需要登录后才可以回帖 登录 | 立即注册

3回帖数 0关注人数 1273浏览人数
最后回复于:2026-3-13 15:14

社区

指南

AI

搜索

快速回复 返回顶部 返回列表