如何在Excel中生成作业编号与周数的全组合表格?
在Power Query中实现作业编号对应多周数的表格方案
核心思路
你要的是作业与周数的全组合(笛卡尔积),再结合原表的对应关系调整,而不是基于现有匹配列的全外连接——之前的操作错在没做交叉,而是用原表自身做匹配合并,自然会出现分开的Null值。
具体操作步骤
第一步:生成独立周数表
新建一个仅包含所有目标周数的表(比如week1、week2、week3)。可以直接用Power Query的「输入数据」手动输入,或者从现有表格的week#列提取不重复值生成。第二步:整理作业表
拿你现有的作业表,只保留Job#列并移除重复项,得到一份只有唯一作业编号的列表(比如Job1、Job2、Job3、Job4)。第三步:交叉合并生成全组合
选中整理后的作业表,点击「合并查询」→「合并为新查询」:- 在合并窗口,选择刚才的周数表,不要选择任何匹配列(直接点击确定)
- 这一步会生成笛卡尔积表:每个作业编号都会对应所有周数,比如
Job1会分别对应week1、week2、week3,Job4也会对应这三个周数。
第四步:匹配原表的对应关系(可选)
如果需要标记哪些是原表中实际存在的对应关系(比如原表只有Job1-week1、Job2-week2、Job3-week3),可以:- 把原表导入Power Query,和交叉生成的全组合表做合并,匹配条件选
Job#和week#同时相等的内连接 - 展开合并后的列,添加自定义列判断:如果展开的列不为空,标记为「已关联」,否则为「无关联」;或者直接保留全组合,按需筛选。
- 把原表导入Power Query,和交叉生成的全组合表做合并,匹配条件选
第五步:处理无对应周数的作业(可选)
如果你希望Job4显示为无对应周数(而不是对应所有周数),可以添加自定义列,判断Job#是否在原表有对应周数,没有的话把week#列设为null,再移除重复项即可。
为什么之前的全外连接没用?
全外连接是基于匹配列把两张表的记录合并,你用原表自身合并时,匹配列是Job#或week#,只会把原表中已有对应关系的记录拼起来,自然会出现分开的Null值,而不是生成所有可能的作业-周数组合。
内容的提问来源于stack exchange,提问作者Marco Dong
相关产品推荐
相关产品推荐

