如何编写Kusto查询展示WVD连接用户数及无连接时段(显示0)
Kusto查询:展示包含无连接时段的WVD用户连接数时间图
以下查询会生成连续时间轴,统计每个时间区间内的活跃用户数,同时自动填充无连接时段的0值:
// 自定义时间范围和统计粒度 let start_time = ago(7d); // 可修改为目标起始时间,比如ago(24h) let end_time = now(); let time_granularity = 1m; // 可调整粒度,如5m、1h等 // 步骤1:配对每个用户的完整会话起止时间 let session_periods = WVDConnections | where SessionStatus in ("Started", "Completed") | sort by User, DateTime asc | scan declare(session_active:bool=false) with ( // 识别会话开始事件 step start_session: session_active == false and SessionStatus == "Started" => session_active = true, StartTime = DateTime; // 匹配对应会话的结束事件 step end_session: session_active == true and SessionStatus == "Completed" => session_active = false, EndTime = DateTime; ) // 处理未结束的会话(用当前时间作为临时结束时间) | extend EndTime = coalesce(EndTime, now()) | where isnotnull(StartTime) | project User, StartTime, EndTime; // 步骤2:生成无间断的连续时间轴 let time_axis = generate_series(start_time, end_time, time_granularity) | rename TimeBin = value; // 步骤3:计算各区间活跃用户数并填充0值 time_axis | join kind=leftouter ( session_periods | join kind=inner time_axis on $left.StartTime <= $right.TimeBin and $left.EndTime >= $right.TimeBin | summarize ActiveUsers = dcount(User) by TimeBin ) on TimeBin | project TimeBin, ActiveUsers = coalesce(ActiveUsers, 0) | sort by TimeBin asc
关键说明:
- 会话配对:通过
scan操作精准关联每个用户的Started与对应Completed事件,确保会话起止时间准确;未断开的会话自动以当前时间作为结束节点。 - 连续时间轴:使用
generate_series创建覆盖目标范围的无间断时间区间,解决原有查询遗漏无连接时段的问题。 - 0值填充:通过
leftouter连接和coalesce函数,将无活跃用户的时段数值设为0,保证时间图的连续性。 - 粒度调整:修改
time_granularity参数可切换统计粒度,比如1h按小时统计,5m按5分钟统计。
内容的提问来源于stack exchange,提问作者norsk
相关产品推荐
相关产品推荐

