You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在KQL中实现交叉乘积连接并展示全组合计数(含零值)

KQL实现所有Value A/Value B组合的计数(含0值)

解决这个问题的核心是先生成所有可能的Value A和Value B组合,再和原表的实际统计结果做左连接,最后把不存在组合的计数替换为0。具体步骤和代码如下:

实现步骤

  1. 提取Value A和Value B的所有唯一取值
  2. 交叉连接两个取值集合,生成全部可能的组合
  3. 统计原表中每个(A,B)组合的实际出现次数
  4. 左连接全组合表与统计结果,用coalesce()将空值计数转为0

示例代码

假设你的表名为YourTable,字段为ValueA和ValueB:

// 获取ValueA的所有唯一值
let distinct_A = YourTable | distinct ValueA;
// 获取ValueB的所有唯一值
let distinct_B = YourTable | distinct ValueB;
// 生成所有可能的A+B组合
let all_combinations = distinct_A | join kind=cross (distinct_B);
// 统计原表中各组合的实际计数
let actual_counts = YourTable 
    | summarize Count = count() by ValueA, ValueB;
// 左连接并填充0值
all_combinations
| join kind=leftouter (actual_counts) on ValueA, ValueB
| project ValueA, ValueB, Count = coalesce(Count, 0)
| sort by ValueA, ValueB

代码说明

  • kind=cross:实现两个集合的交叉乘积,确保生成所有A和B的组合,不受原表数据存在性影响
  • leftouter连接:保留全组合的每一行,不存在的组合会在Count字段返回null
  • coalesce(Count, 0):将null值替换为0,满足不存在组合计数为0的需求

如果已知Value A和Value B的固定取值(比如都是1-5),可以直接用range生成取值集合,无需从表中提取:

let distinct_A = range ValueA from 1 to 5 step 1;
let distinct_B = range ValueB from 1 to 5 step 1;
let all_combinations = distinct_A | join kind=cross (distinct_B);
let actual_counts = YourTable 
    | summarize Count = count() by ValueA, ValueB;
all_combinations
| join kind=leftouter (actual_counts) on ValueA, ValueB
| project ValueA, ValueB, Count = coalesce(Count, 0)
| sort by ValueA, ValueB

内容的提问来源于stack exchange,提问作者Samson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 07:13:20