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

如何使用KQL实现未收到更新时将数据结转至下一小时

KQL实现小时级指标缺失时自动结转上一小时值

核心逻辑

要实现当前小时未收到产品上报时自动结转上一小时指标值,按以下步骤处理即可:

  • 提取数据集中所有出现过的小时时间点、所有产品,生成「时间-产品」的全量笛卡尔组合,保证每个小时维度下所有产品都有对应行
  • 将全量组合与原始上报数据做左连接,匹配到原始上报的行取实际上报值,未匹配到的数值位留空
  • 按产品分组、按时间升序排序,用前向填充逻辑取上一个非空值补全空位,过滤掉产品首次上报前无历史值的无效行即可,该逻辑同时支持连续多小时缺数的自动结转

完整实现代码

以下代码包含样例数据构造,可直接运行验证:

// 样例输入数据集
let RawData = datatable(Time:datetime, Product:string, Value:long)
[
    datetime(2022-06-20T01:00:00Z), "B1", 25,
    datetime(2022-06-20T01:00:00Z), "B2", 46,
    datetime(2022-06-20T01:00:00Z), "B3", 18,
    datetime(2022-06-20T02:00:00Z), "B1", 26,
    datetime(2022-06-20T02:00:00Z), "B2", 40,
];
// 提取全量时间、全量产品维度
let AllTimeSlots = RawData | distinct Time;
let AllProducts = RawData | distinct Product;
AllTimeSlots
| extend TempJoinKey = 1
| join kind=inner (AllProducts | extend TempJoinKey = 1) on TempJoinKey
| project Time, Product
// 左连原始数据,缺失上报的行Value为空
| join kind=leftouter RawData on Time, Product
| project Time, Product, Value = coalesce(Value, long(null))
// 按产品分组做前向填充
| partition by Product
(
    order by Time asc
    | serialize PrevValue = prev(Value, 1, long(null))
    | extend Value = coalesce(Value, PrevValue)
)
// 过滤无历史值可结转的空行
| where isnotnull(Value)
| sort by Time asc, Product asc
| project Time, Product, Value

运行结果

执行代码后输出结果如下,2022-06-20T02:00:00时点缺失上报的B3产品,会自动结转上一小时的18作为当前小时指标值:

Time                     Product Value
2022-06-20T01:00:00Z     B1      25
2022-06-20T01:00:00Z     B2      46
2022-06-20T01:00:00Z     B3      18
2022-06-20T02:00:00Z     B1      26
2022-06-20T02:00:00Z     B2      40
2022-06-20T02:00:00Z     B3      18

注:你提供的预期输出中B3结转记录的时间标注为01:00应为排版笔误,结转逻辑是将历史值填充到当前小时的时间槽位,符合「结转至当前小时」的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:39:43