如何用KQL(Kusto)时间序列按时间区间统计活跃条目数量
实现代码
let data=datatable(startTime:datetime, endtime:datetime) [ datetime(2021-07-07), datetime(2021-07-13), datetime(2021-07-02), datetime(2021-09-09), datetime(2021-06-21), datetime(2021-06-21), datetime(2021-06-21), datetime(2021-07-23), datetime(2021-07-07), datetime(2021-07-07), datetime(2021-07-08), datetime(2021-08-11), datetime(2021-05-23), datetime(2021-08-23), ]; data // 为每条记录生成其覆盖的所有月份的月初时间序列 | extend CoveredMonths = range(startofmonth(startTime), startofmonth(endtime), 1m) // 将月份序列展开为独立行,每个覆盖月份对应一行数据 | mv-expand CoveredMonths to typeof(datetime) // 格式化月份为要求的YYYY-MM格式 | extend Month = format_datetime(CoveredMonths, "yyyy-MM") // 按月份分组统计活跃条目数 | summarize Count = count() by Month // 按月份升序排序 | order by Month asc // 若需要和示例输出完全一致过滤掉9月,可取消注释下行 // | where Month != "2021-09"
核心逻辑说明
- 借助
range()函数为每条时间跨度记录生成所有覆盖的时间粒度节点,步长设置为1个月即可自动遍历跨度内的所有月份 - 通过
mv-expand将数组格式的覆盖时间展开为多行,后续直接按时间节点分组统计即可 - 如果需要调整统计粒度(按周/按天统计),只需要修改
range()的步长参数,以及startofmonth为对应的startofweek/startofday即可
内容的提问来源于stack exchange,提问作者UncleJefe
相关产品推荐
相关产品推荐

