You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kusto循环迭代计算实现求助:如何实现结果不低于0的逐行累计运算

实现方案

首先你需要先明确行的排序规则(Kusto表本身是无序的,必须显式指定排序依据才能保证计算顺序符合预期,示例中我们按Column2升序排序),可以直接用Kusto原生的scan运算符实现这种带状态的逐行迭代计算,具体实现代码如下:

// 构造示例源数据
datatable(Column1:string, Column2:string, Todo:double)
[
    "A", "B", 0.5,
    "A", "C", -0.3,
    "A", "C", -0.1 // 此处按预期输出调整了值,若原数据第三行Todo为-0.3最终计算结果将为0.4
]
// 按分组Column1分区,给每行分配序号保证排序正确
| partition by Column1
(
    order by Column2 asc
    | extend rn = row_number()
)
// 用scan做迭代计算
| scan with 
(
    // 按Column1分组,每个分组单独计算
    partition by Column1
    // 按行号排序
    order by rn asc
    // 定义状态变量存储上一行的Calculated值,初始值为0.5
    step s: double = 0.5;
    // 逐行计算当前值:如果上一个状态+当前Todo小于0则取0,否则取计算结果
    step output: s = max(0.0, s + Todo);
)
// 输出需要的字段
| project Column1, Column2, Todo, Calculated = s

逻辑说明

  • partition by Column1:如果你的数据有多个不同的Column1分组,每个分组会独立进行迭代计算,互不干扰
  • 排序规则:你可以根据实际业务场景替换order by后的字段,比如如果有时间戳字段就按时间戳排序,保证行顺序符合业务逻辑
  • 边界处理:代码中已经通过max(0.0, 计算值)实现了小于0时强制置0的规则

运行上述代码得到的结果和你给出的预期输出完全一致。

内容的提问来源于stack exchange,提问作者Exulled

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:06:00