求教:计算最近1天与30天平均时长的标准差(Kusto查询)
解决Kusto查询中计算两类平均时长标准差的方案
首先你原来的查询里有个小问题:table2里的字段名和table1重复了,join之后会出现自动重命名的冗余字段,建议先把字段名改清晰,比如把table2的平均时长字段改成AvgDuration30d。
接下来分三种常见需求给出实现方案:
1. 按每个itemtype计算自身1天平均与30天平均的标准差
这种场景下,每个itemtype会得到一个对应的标准差结果,代表该类型下两个平均时长的离散程度:
let table1 = view() { requests | where TimeGenerated > ago(1d) | summarize AvgDuration1d = avg(duration) by itemtype }; let table2 = view() { requests | where TimeGenerated > ago(30d) | summarize AvgDuration30d = avg(duration) by itemtype }; table1 | join kind=leftouter table2 on itemtype // 将两个平均值转为数组,再计算标准差 | extend DurationValues = pack_array(AvgDuration1d, AvgDuration30d) | summarize StdDev = stdev_array(DurationValues) by itemtype
2. 计算所有itemtype的两类平均时长整体的标准差
如果需要把所有itemtype的1天平均、30天平均放在一起,计算整个数据集的标准差,可以这么写:
let table1 = view() { requests | where TimeGenerated > ago(1d) | summarize AvgDuration = avg(duration), Period = "1d" by itemtype }; let table2 = view() { requests | where TimeGenerated > ago(30d) | summarize AvgDuration = avg(duration), Period = "30d" by itemtype }; // 合并两个表的所有平均时长数据 union table1, table2 // 计算整体标准差 | summarize OverallStdDev = stdev(AvgDuration)
3. 计算所有itemtype的1天平均与30天平均差值的标准差
如果需求是统计各类型两个平均时长差值的离散程度,用这个写法:
let table1 = view() { requests | where TimeGenerated > ago(1d) | summarize AvgDuration1d = avg(duration) by itemtype }; let table2 = view() { requests | where TimeGenerated > ago(30d) | summarize AvgDuration30d = avg(duration) by itemtype }; table1 | join kind=leftouter table2 on itemtype | extend DurationDiff = AvgDuration1d - AvgDuration30d | summarize StdDevOfDiffs = stdev(DurationDiff)
内容的提问来源于stack exchange,提问作者vpn
相关产品推荐
相关产品推荐

