如何编写KQL查询实现Intune补丁数据的嵌套分类展示?
优化Intune补丁状态KQL查询以实现嵌套分类统计
针对你需要生成**两层嵌套分类(补丁KB编号→状态)**的补丁部署统计需求,原查询的问题在于保留了单设备单补丁的原始记录,导致数据量过大且结构不符合聚合统计要求。以下是调整后的KQL查询,可直接生成适合嵌套下拉展示的聚合数据:
let _SnapshotTime = datetime(2023-01-18T06:00:00Z); // 核心逻辑:先按补丁+状态统计设备数,再按补丁打包状态详情 UCClientUpdateStatus | where TimeGenerated == _SnapshotTime // 若需关联设备额外属性(如OS版本、设备组),保留此join;仅统计状态可移除 | join kind=inner (UCClient | where TimeGenerated == _SnapshotTime) on DeviceName // 第一步:统计每个KB对应各状态的设备数量(去重设备) | summarize DeviceCount = dcount(DeviceName) by TargetKBNumber, OSSecurityUpdateStatus // 第二步:按KB分组,将状态-计数打包为嵌套结构 | summarize StatusDetails = make_bag(pack(OSSecurityUpdateStatus, DeviceCount)) by TargetKBNumber // 可选:按KB编号排序,方便下拉选择 | order by TargetKBNumber asc
查询说明:
- 用
dcount(DeviceName)确保同一设备不会在同一补丁状态下重复计数,避免统计误差 make_bag(pack(...))会将每个KB对应的所有状态及设备数打包为键值对集合,示例结构如下:{ "TargetKBNumber": "KB5022845", "StatusDetails": { "Installed": 120, "Failed": 5, "Pending": 18 } }- 在可视化工具(如Log Analytics仪表盘、Power BI)中,可将
TargetKBNumber设为第一层下拉选项,StatusDetails中的状态设为第二层下拉,对应展示DeviceCount数值,完美匹配你需要的嵌套分类格式。
原查询问题分析:
原查询使用arg_max(TimeGenerated, *) by OSSecurityUpdateStatus, TargetKBNumber, DeviceName会保留每台设备针对每个补丁的状态记录,返回的是原始事件级数据而非聚合统计数据,因此数据量巨大且无法直接用于嵌套分类展示。
内容的提问来源于stack exchange,提问作者m0biu51
相关产品推荐
相关产品推荐

