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

如何用KQL获取插值时间范围起始边界的插值计算值?

优化Kusto边界点插值计算:更简洁的实现

针对带时间间隔的实时数据表,要在指定起始时间点通过前后最近的有效数据完成线性插值,这里提供比你现有实现更简洁高效的方案:

优化后的代码

let interpolate_boundary = (T:(Date:datetime, Value:real), target:datetime) {
    T
    | where isnotnull(Value)
    | extend is_before = Date <= target
    | partition by is_before (
        sort by Date case(is_before, desc, asc)
        | take 1
    )
    | summarize 
        prev_date = minif(Date, Date > target),
        prev_val = minif(Value, Date > target),
        next_date = maxif(Date, Date <= target),
        next_val = maxif(Value, Date <= target)
    | extend 
        time_diff = datetime_diff('second', next_date, prev_date),
        target_diff = datetime_diff('second', target, prev_date),
        interpolated_val = prev_val + (next_val - prev_val) * (target_diff * 1.0 / time_diff)
    | project Date = target, Value = interpolated_val
};

// 调用示例
interpolate_boundary(LongTermWeight | project Date, Value, datetime("2023-09-14"))

优化说明

  1. 减少冗余查询:用partition by一次性筛选目标时间前后的最近有效数据,替代原代码中两次独立的prev/next查询,逻辑更紧凑
  2. 简化变量提取:通过minif/maxif在单次summarize中提取所需的日期和数值,避免多次toscalar调用,提升代码可读性
  3. 精度与可读性提升:使用datetime_diff以秒为单位计算时间差,避免toint带来的精度损失;线性插值公式直接清晰,易维护
  4. 语义化命名:函数和变量命名更贴合业务逻辑,降低理解成本

注:原代码中存在变量名不一致问题(参数用Value但查询中用Weight),优化后的代码已统一为Value。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:28:18