如何在KQL中将结果行转列并生成汇总统计?
问题描述
现有如下KQL数据定义与初始查询:
let T = datatable(OperationName:string, Result:string) [ "Method1" , "success", "Method1" , "failure", "Method1" , "success", "Method1" , "success", "Method1" , "success", "Method1" , "failure", "Method2" , "success", "Method2" , "failure", "Method2" , "failure", ]; T | summarize Total = count() by OperationName, Result
执行上述查询后得到结果:
| OperationName | Result | Total |
|---|---|---|
| Method1 | success | 4 |
| Method1 | failure | 2 |
| Method2 | success | 1 |
| Method2 | failure | 2 |
需要编写KQL查询,生成如下格式的结果:
| OperationName | success | failure | total |
|---|---|---|---|
| Method1 | 4 | 2 | 6 |
| Method2 | 1 | 2 | 3 |
需求说明:将结果类型(success/failure)从行转换为列,对应统计值填入列中,并添加total列(为success与failure的总和)。
解决方案
可以使用KQL的pivot运算符实现行转列,再通过extend计算总和,具体查询如下:
let T = datatable(OperationName:string, Result:string) [ "Method1" , "success", "Method1" , "failure", "Method1" , "success", "Method1" , "success", "Method1" , "success", "Method1" , "failure", "Method2" , "success", "Method2" , "failure", "Method2" , "failure", ]; T | summarize count() by OperationName, Result | pivot Result, sum(count_) | extend total = success + failure
代码说明:
summarize count() by OperationName, Result:按操作名称和结果类型统计对应数量,和初始查询逻辑一致。pivot Result, sum(count_):将Result列的不同取值(success、failure)转为独立列,用sum(count_)填充各列的统计数值。extend total = success + failure:新增total列,计算每个操作的成功与失败数量之和。
执行后得到的结果如下:
| OperationName | success | failure | total |
|---|---|---|---|
| Method1 | 4 | 2 | 6 |
| Method2 | 1 | 2 | 3 |
内容的提问来源于stack exchange,提问作者Razi
相关产品推荐
相关产品推荐

