如何通过Kusto查询实现与UI中相同的分组(不使用UI)
在Kusto中无需UI实现分组效果的方法
嘿,我来帮你搞定Kusto里不用UI操作的分组需求!其实Kusto的分组逻辑完全可以通过查询语句实现,UI只是用来可视化结果的载体,核心还是靠查询语法来定义分组规则。下面分几种常见场景给你具体举例:
1. 基础维度分组聚合(最常用)
这是最典型的分组场景:按一个或多个字段对数据进行聚合统计(比如计数、求和、平均值等),用summarize + by关键字就能实现。
比如按区域(Region)分组,统计每个区域的订单数量和总金额:
Orders | summarize 订单总数 = count(), 总金额 = sum(Amount) by Region
by后面的字段就是分组依据,你可以放单个或多个字段(多字段用逗号分隔)summarize里可以搭配各种聚合函数:count()、sum()、avg()、max()等
2. 保留分组内的明细数据
如果需要把分组下的所有原始明细数据保留下来(而不只是聚合结果),可以用make_list()、make_bag()这类函数把明细打包成集合:
比如把每个区域的所有订单ID存成列表,同时把每行订单的完整信息打包成字典集合:
Orders | summarize 订单ID列表 = make_list(OrderID), 订单明细集合 = make_bag(pack_all()) by Region
make_list()会将分组内指定字段的所有值拼成一个数组pack_all()会把当前行的所有字段打包成一个键值对字典,make_bag()则把分组内的所有字典聚合到一起
3. 自定义规则分组(非现有字段)
如果需要按自定义逻辑分组(比如数值区间、字符串匹配规则),可以先通过extend创建一个自定义分组字段,再按这个字段分组:
比如把订单金额分成「低额/中额/高额」三个区间进行分组统计:
Orders | extend 金额区间 = case( Amount < 100, "低额", Amount between (100 .. 500), "中额", Amount > 500, "高额" ) | summarize 订单总数 = count() by 金额区间
这里用case()函数实现了自定义的区间判断,生成新的分组字段后再进行聚合。
4. 多层嵌套分组(类似UI的折叠分组)
如果需要实现多层级的分组效果(比如先按区域,再按订单类型),可以用嵌套的summarize语句来构造层级结构:
Orders | summarize 订单类型统计 = summarize 订单总数 = count(), 总金额 = sum(Amount) by OrderType by Region
这个查询会先按OrderType做内层分组统计,再把这些统计结果按Region做外层分组,最终结果里每个区域会对应一组订单类型的统计数据,实现多层分组的效果。
内容的提问来源于stack exchange,提问作者Felix Bodmer
相关产品推荐
相关产品推荐

