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

KQL动态状态码场景下:如何生成成功/失败状态计数列?

问题描述

我有一个包含Service、StatusCode、Count三列的结果集:

Service StatusCode  Count
A       201             100
A       202             50
A       503             20
C       201             25

其中StatusCode为动态值,数量不固定。我需要将数据转换为每行对应一个Service,各StatusCode作为列,同时新增SuccessStatusCount(统计StatusCode≥200且<500的Count总和)和FailStatusCount列,期望输出如下:

Service 201 202 503  SuccessStatusCount   FailStatusCount
A       100 50  20   150//(100+50)        20        
C       25  0   0    25                   0

目前我已通过以下pivot语句实现前几列:

let x = datatable (Service:string, ResponseCode: long, Count: long)
    [
    "A",201,100,
    "A",202,50,
    "A",503,20,
    "C",201,25
    ];
x | evaluate pivot(ResponseCode, sum(Count))

但由于StatusCode动态且数量较多,无法通过硬编码| extend SuccessStatusCount = 201+202+203+....的方式求和,请问如何实现这两个计数列?


解决方法

核心思路是在执行pivot之前先计算好每个服务的成功、失败计数,再将结果与pivot后的表关联,避免依赖动态生成的状态码列进行硬编码求和。

完整实现代码

let x = datatable (Service:string, ResponseCode: long, Count: long)
    [
    "A",201,100,
    "A",202,50,
    "A",503,20,
    "C",201,25
    ];
// 按Service分组计算成功、失败计数
let status_summary = x
| summarize 
    SuccessStatusCount = sumif(Count, ResponseCode >= 200 and ResponseCode < 500),
    FailStatusCount = sumif(Count, ResponseCode >= 500)
by Service;
// 执行pivot并关联汇总表
x 
| evaluate pivot(ResponseCode, sum(Count))
| join kind=inner status_summary on Service
// 可选:调整列顺序,将计数列放在状态码列之后
| project-reorder Service, *, SuccessStatusCount, FailStatusCount

代码说明

  1. 计算汇总计数:使用sumif函数,根据状态码的范围条件分别累加成功和失败的Count值,按Service分组后得到每个服务的汇总结果。
  2. 关联pivot结果:将pivot生成的动态状态码列与汇总表通过Service字段关联,确保每个服务行都带上对应的成功/失败计数。
  3. 列顺序调整:通过project-reorder可以自定义列的展示顺序,把SuccessStatusCount和FailStatusCount移到状态码列之后,更贴合预期输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:37:08