Azure Analytics中KQL的iff函数使用及条件化summarize实现咨询
Azure Analytics中KQL的iff函数使用及条件化summarize实现咨询
嗨,我来帮你搞定这个KQL的问题~你想根据EventResults是否为"Success"来分别统计成功和失败的相关数据,这个需求完全可以实现,不过不是像传统编程语言那样写if-else分支来执行两个不同的summarize,而是要在同一个summarize里用条件聚合的方式来处理,我给你具体讲讲怎么做:
首先,KQL里的summarize是对分组后的整个数据集做聚合操作,没法直接拆分出两个分支分别执行不同的summarize逻辑,但我们可以用countif(专门的条件计数函数)或者嵌套iff在聚合函数里,来分别统计符合条件的数据。
比如你想要的效果,可以写成这样:
// 替换成你的表名 YourEventTable | summarize // 统计成功事件的数量 SuccessCount = countif(EventResults == "Success"), // 统计失败事件的数量 FailCount = countif(EventResults != "Success"), // 只收集成功事件对应的用户集合 SuccessUsers = makeset(iff(EventResults == "Success", User, "")), // 只收集失败事件对应的用户集合 FailedUsers = makeset(iff(EventResults != "Success", User, "")) by SrcDvcIpAddr, bin(TimeGenerated, timeframe) // 可选:移除集合里的空字符串,让结果更整洁 | extend SuccessUsers = set_remove(SuccessUsers, ""), FailedUsers = set_remove(FailedUsers, "")
这里给你解释下关键部分:
countif比count(iff(...))更简洁,专门用来统计满足条件的行数;- 对于
makeset,我们用iff判断:如果是成功事件,就取对应的User值,否则填空字符串,最后用set_remove把空字符串从集合里删掉,避免无效数据; - 你之前疑惑
iff只能用在extend里?其实不是的,iff可以嵌套在很多函数里使用,包括聚合函数,只要是需要做二元条件判断的场景都能用。
另外,如果你的逻辑更复杂(比如不止成功/失败两种情况),可以用case函数替代iff,用法类似,只是支持多分支判断。
这样写的好处是,同一个SrcDvcIpAddr和时间窗口下的成功、失败数据会放在同一行结果里,方便你对比查看,完全能达到你想要的分别统计的效果~
备注:内容来源于stack exchange,提问作者Crablemet
相关产品推荐
相关产品推荐

