如何用KQL对动态列按前缀求和生成2xxCount与5xxCount?
动态状态码列的KQL求和实现
针对动态生成的状态码列(列名以状态码命名,如201、202、503等),可以通过KQL的动态数据处理函数实现按前缀求和的需求,具体代码如下:
// 假设原数据集表名为StatusData StatusData | extend StatusBag = pack_all() | extend StatusBag = bag_remove_keys(StatusBag, dynamic(["Service"])) | extend 2xxCount = toint(sum(bag_values(bag_filter(StatusBag, (k, v) => startswith(k, "2"))))) | extend 5xxCount = toint(sum(bag_values(bag_filter(StatusBag, (k, v) => startswith(k, "5"))))) | project-away StatusBag
代码说明
pack_all():将当前行的所有列转换为一个动态属性包,键为列名,值为对应单元格的数据。bag_remove_keys():从属性包中移除Service字段,仅保留状态码相关的键值对。bag_filter():筛选出属性包中键(即状态码列名)以指定前缀开头的条目,配合bag_values()提取对应数值后求和,得到目标统计列。project-away:清理中间生成的StatusBag列,保留原状态码列和新增的统计列。
该方案无需提前指定具体状态码列,可自动适配任意以2或5开头的动态状态码列,满足不同场景下的统计需求。
内容的提问来源于stack exchange,提问作者Jerald Baker
相关产品推荐
相关产品推荐

