如何解决如果 Term 到达某个点,Kusto row_cumsum 修改 Term
我有一份员工姓名和薪水的列表,按以下顺序排列
我需要按以下格式创建输出表。即,每当累计工资总额超过 3000 时,我必须检测到并标记该行。
我尝试执行 row_cumsum 并在超过 3000 时重置 Term,但它在第二次迭代中不起作用。
datatable (name:string,month:int,salary:long)
[
"Alice",]
| order by name asc,month asc
| extend total=row_cumsum(salary)
| extend total=iff(total >=3000,total-prev(total),total)
解决方法
现在可以使用 scan operator:
datatable (name:string,salary:long)
[
"Alice",1000,"Alice",2000,1400,"Bob",2400,1000
]
| sort by name asc
| scan declare (total:long) with
(
step s: true => total = iff(isnull(s.total) or name != s.name,salary,iff(s.total < 3000,s.total + salary,salary));
)
| extend boundary_detected = iff(total >= 3000,1,long(null))
姓名 | 工资 | 总计 | boundary_detected |
---|---|---|---|
爱丽丝 | 1000 | 1000 | |
爱丽丝 | 2000 | 3000 | 1 |
爱丽丝 | 1400 | 1400 | |
爱丽丝 | 1400 | 2800 | |
爱丽丝 | 1400 | 4200 | 1 |
爱丽丝 | 1000 | 1000 | |
鲍勃 | 2400 | 2400 | |
鲍勃 | 1000 | 3400 | 1 |
鲍勃 | 1000 | 1000 |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。