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

如何在KQL中计算滑动差值?求累积IO读数的相邻行增量

计算累积值的相邻差值(Delta)并展示

要解决这个问题,你可以借助KQL的prev()函数获取上一行的累积值,再计算差值。另外注意:SQL的累积读取次数是持续递增的,原查询中使用avg(value)可能导致数据失真,建议改用max(value)来获取每个时间窗口内的最新累积值(若业务场景特殊,也可换回avg)。

修改后的完整查询如下:

customMetrics
| where name == "sqlserver_database_io_reads"
| extend Database = strcat(tostring(customDimensions["sql_instance"]), ".", tostring(customDimensions["database_name"]))
// 用max取每个时间窗口的最新累积值,替代avg避免数据偏差
| summarize ["IO Reads"] = max(value) by Database, bin(timestamp, 5m)
// 按数据库和时间升序排序,确保prev()能正确获取前一个时间窗口的值
| sort by Database, timestamp asc
// 计算Delta:第一行无前置数据,直接取当前累积值;后续行用当前值减前一行值
| extend IO_Reads_Delta = iif(isnull(prev(["IO Reads"])), ["IO Reads"], ["IO Reads"] - prev(["IO Reads"]))
// 指定用Delta列渲染时间图表
| render timechart with (ycolumn=IO_Reads_Delta)

关键逻辑说明

  • 排序:必须通过sort by Database, timestamp asc确保数据按数据库分组后,按时间顺序排列,否则prev()无法定位正确的上一行数据。
  • prev()函数:用于获取当前行的上一行中指定列的数值,是计算相邻差值的核心。
  • 边界处理:用iif(isnull(...))处理第一行的特殊情况,保证初始差值与你示例中的逻辑一致(第一行Delta等于当前累积值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:35:23