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

KQL查询问题:无法正确计算并展示30天与24小时平均时长

KQL查询问题:24小时与30天平均时长计算异常

需求:在同一表格中以独立列展示两组平均时长——过去24小时(通过下拉菜单设置时间范围)和过去30天(查询内配置),但当前查询返回的30天平均时长未按预期填充。

原查询代码:

let raw_data = view() {(union isfuzzy=true requests, dependencies)};
let avgDuration30days = toscalar(raw_data | summarize avg(duration) by 
bin(todatetime(now()), 30d));
union isfuzzy=true
    requests,
    dependencies
| project itemType, duration
| summarize avgDuration24hrs = avg(duration) by itemType
| extend avgDuration30days

问题原因

  1. raw_data作为view会继承外部下拉菜单的24小时时间范围,导致计算30天平均时仅使用了24小时的数据,而非真正的30天全量数据。
  2. summarize avg(duration) by bin(todatetime(now()), 30d)写法无效:bin(now(),30d)仅对齐当前时间的30天边界,没有过滤数据的时间范围;且未按itemType分组,导致所有行的30天平均都是同一个错误值。

修正方案

方案1:计算全局30天平均(所有itemType共用一个值)

// 独立计算过去30天的全局平均,不受外部时间范围影响
let avgDuration30days = toscalar(
    union isfuzzy=true requests, dependencies
    | where timestamp >= datetime_add('day', -30, now())
    | summarize avg(duration)
);

// 处理外部时间范围(24小时)的数据,按itemType计算平均
union isfuzzy=true requests, dependencies
| project itemType, duration
| summarize avgDuration24hrs = avg(duration) by itemType
| extend avgDuration30days

方案2:按itemType分别计算30天平均

如果需要每个itemType对应各自的30天平均,用关联查询实现:

// 预计算每个itemType过去30天的平均
let avg30days_by_type = materialize(
    union isfuzzy=true requests, dependencies
    | where timestamp >= datetime_add('day', -30, now())
    | summarize avgDuration30days = avg(duration) by itemType
);

// 处理24小时数据的平均,并关联30天数据
union isfuzzy=true requests, dependencies
| project itemType, duration
| summarize avgDuration24hrs = avg(duration) by itemType
| join kind=leftouter avg30days_by_type on itemType
| project itemType, avgDuration24hrs, avgDuration30days

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:13:21