如何让KQL时序图双折线重叠以分析异常?
解决KQL双折线同图不重叠的问题
问题核心是两个表的统计计数量级差异过大,导致折线分布在图表的不同区域,无法直观对比趋势。以下是两种实用的解决方法:
方法1:数值归一化(推荐,直接实现折线重叠)
将两个系列的计数缩放到0-1的范围,这样趋势对比更直观:
// 合并两个表并标记数据来源类型 union ( AADNonInteractiveUserSignInLogs | where UserPrincipalName == "USER_HERE" | where TimeGenerated >= ago(120d) | project TimeGenerated, Type = "SignInLogs" ), ( BehaviorAnalytics | where AccountName == "USER_HERE" // 注意字段名可能需根据实际调整,比如UserPrincipalName | where TimeGenerated >= ago(120d) | project TimeGenerated, Type = "BehaviorAnalytics" ) // 按类型和日期聚合计数 | summarize DailyCount = count() by Type, bin(TimeGenerated, 1d) // 计算每个类型的最大计数,用于归一化 | extend MaxCount = max(DailyCount) over (partition by Type) // 归一化到0-1范围 | extend NormalizedCount = DailyCount / MaxCount // 渲染折线图,使用归一化后的值 | render timechart with (title="用户120天行为趋势对比(归一化)", yaxis="归一化计数(0-1)")
方法2:保留原始数值但使用双Y轴(可选,保留真实量级)
如果需要保留原始计数的同时对比趋势,可以用双Y轴布局:
union ( AADNonInteractiveUserSignInLogs | where UserPrincipalName == "USER_HERE" | where TimeGenerated >= ago(120d) | project TimeGenerated, Type = "SignInLogs" ), ( BehaviorAnalytics | where AccountName == "USER_HERE" | where TimeGenerated >= ago(120d) | project TimeGenerated, Type = "BehaviorAnalytics" ) | summarize DailyCount = count() by Type, bin(TimeGenerated, 1d) // 渲染时指定双Y轴 | render timechart with (title="用户120天行为趋势对比(双Y轴)", yaxis=dynamic(["SignInLogs计数", "BehaviorAnalytics计数"]))
关键说明
- 注意两个表中用户字段可能不同:
AADNonInteractiveUserSignInLogs用UserPrincipalName,BehaviorAnalytics可能用AccountName或UserPrincipalName,需根据实际数据调整。 - 归一化方法会丢失真实计数的量级,但能清晰对比趋势的波动异常,适合异常分析场景。
- 如果某类数据某天没有记录,会自动补0,确保折线连续。
内容的提问来源于stack exchange,提问作者diegoconti
相关产品推荐
相关产品推荐

