Kusto中如何拆分逗号分隔列唯一值生成新行并统计关联计数
Kusto 查询实现方案
核心实现逻辑
整个查询完全对齐提出的计算规则,拆分4个可独立调整的步骤完成计算:
- 提取全量固定Shop枚举值,确保每个令牌匹配全部5个可选店铺,不会因为某类组合无数据就漏行
- 从原表Tokens列拆分所有逗号分隔的字符串,提取全量去重后的独立令牌,自动适配空Tokens的场景
- 逐行拆分原表的Tokens值,按「单个令牌+对应店铺」维度聚合计数,拿到每一组组合的真实匹配行数
- 做令牌与店铺的全量交叉匹配,关联上聚合后的计数,无匹配的组合计数默认填充为0,输出最终结果
可直接套用的查询代码
// 替换为你实际的业务表名,此处为示例结构 let SourceTable = datatable(Tokens:string, Shop:string)[ "a", "P", "a,b", "Q", "c,d,e", "P", "c", "R", "c,d", "Q" ]; // 提取表内全量不重复的Shop值(共5个固定可选值,自动提取无需手动维护) let AllShops = SourceTable | distinct Shop; // 提取全量去重后的独立令牌,自动过滤空Tokens产生的无效空值 let AllDistinctTokens = SourceTable | mv-expand Token = split(Tokens, ",") | where isnotempty(Token) | distinct Token; // 计算每个「令牌+Shop」组合对应的原表匹配行数 let TokenShopAgg = SourceTable | mv-expand Token = split(Tokens, ",") | where isnotempty(Token) | summarize Count = count() by Token, Shop; // 生成最终结果:全量令牌匹配全量Shop,关联对应计数 AllDistinctTokens | cross join AllShops | left join TokenShopAgg on Token, Shop | project DistinctTokens = Token, Shop = Shop, Count = coalesce(Count, 0)
可调整的适配点
- 如果你的Shop枚举值是固定硬编码的5个值,不需要从表里动态提取,可以替换
AllShops的定义为手动枚举,示例:let AllShops = datatable(Shop:string)["P", "Q", "R", "S", "T"]; - 如果Tokens列的分隔符不是逗号,可以调整
split(Tokens, ",")里的分隔符参数适配实际场景 - 如果需要保留空值对应的令牌统计,删除
where isnotempty(Token)过滤条件即可
内容的提问来源于stack exchange,提问作者Shivam Raina
相关产品推荐
相关产品推荐

