如何用KQL扩展列,计算当前行ID范围内的Value总和?
实现方法
当然可以实现这个需求,以下是具体的KQL代码和步骤说明:
首先构造示例数据表:
let T = datatable(ID:int, Value:int) [ 3, 1, 4, 4, 5, 5, 1, 6, 2, 7, 0, 3, 7, 3, 2, 2 ];
方法一:使用mv-apply(逻辑更直观)
T | mv-apply current_ID = ID, current_Value = Value on ( // 筛选原表中ID处于[current_ID, current_ID+3]范围内的行 T | where ID between (current_ID .. current_ID + 3) // 对符合条件的Value求和 | summarize Sum = sum(Value) ) // 调整列名输出最终结果 | project ID = current_ID, Value = current_Value, Sum
方法二:使用自连接
T // 为每行生成ID范围的上下限 | extend lower_bound = ID, upper_bound = ID + 3 // 自连接原表,匹配所有ID在当前行范围内的记录 | join kind=inner T on $right.ID between ($left.lower_bound .. $left.upper_bound) // 按当前行的ID和Value分组,计算符合条件的Value总和 | summarize Sum = sum($right.Value) by $left.ID, $left.Value // 整理列名输出 | project ID = $left_ID, Value = $left_Value, Sum
结果说明
- 针对ID=3的行,范围是
[3,6],原表中符合条件的ID为3、4、5,对应Value之和为1+4+5=10(注:原示例预期的13可能是输入错误,原表无ID=6的记录;若将原表中ID=0误写为ID=6,则总和为1+4+5+3=13) - 针对ID=4的行,范围是
[4,7],符合条件的ID为4、5、7,对应Value之和为4+5+3=12(原示例预期的15同样可能存在输入错误,若包含ID=6则总和为4+5+3+3=15)
内容的提问来源于stack exchange,提问作者Mckens Jeoy
相关产品推荐
相关产品推荐

