如何在Power Query中基于Product和Weekday两列拆分主表?
在Power Query中按Product和Weekday双条件拆分主表的实现方法
完全可以基于**Product(产品)和Weekday(工作日)**两个条件拆分主表,以下是具体实现步骤:
步骤1:将主表导入Power Query编辑器
打开Excel,点击「数据」选项卡 →「从表格/区域」,选中你的主表并勾选「我的表格有标题」,进入Power Query编辑器。
步骤2:生成唯一分组键
为了区分每个Product+Weekday的组合,先添加一个组合列:
- 点击「添加列」选项卡 →「自定义列」
- 在公式框输入:
[Product] & "_" & [Weekday],将新列命名为GroupKey(比如ProductA_周一这种格式)
步骤3:按分组键拆分数据
选中GroupKey列,点击「转换」选项卡 →「分组依据」,设置参数:
- 分组依据:
GroupKey - 新列名:
SubTable(自定义名称即可) - 操作:选择「所有行」
点击确定后,你会得到一个两列表:一列是唯一的GroupKey(每个对应一个Product+Weekday组合),另一列SubTable里是该组合对应的完整子表数据。
步骤4:导出子表到独立工作表(或保留为查询)
场景1:批量导出到Excel工作表
如果需要把每个子表单独存为工作表,可通过以下方式实现:
- 选中
SubTable列,点击「转换」→「展开」→「到新行」,让每个子表单独成行。 - 点击「主页」→「关闭并上载至」,选择「仅创建连接」并勾选「加载后编辑查询」。
- 进入高级编辑器,替换末尾代码实现批量生成工作表(示例代码如下,需适配你的表结构):
let Source = Excel.CurrentWorkbook(){[Name="主表名称"]}[Content], 添加分组键 = Table.AddColumn(Source, "GroupKey", each [Product] & "_" & [Weekday]), 分组数据 = Table.Group(添加分组键, {"GroupKey"}, {{"子表数据", each _, type table}}), 批量生成工作表 = List.Accumulate(Table.ToRecords(分组数据), null, (state, current) => let 工作表名称 = current[GroupKey], 清理数据 = Table.RemoveColumns(current[子表数据], {"GroupKey"}), 加载到工作表 = Excel.Worksheets.Add(工作表名称).Range("A1").Resize(Table.RowCount(清理数据), Table.ColumnCount(清理数据)).Value = Table.ToList(清理数据, each _) in state ) in 批量生成工作表
场景2:在Power Query中保留独立查询
如果只需要在Power Query里保留多个子查询,可:
- 完成步骤3的分组后,打开高级编辑器,提取每个分组为单独查询(示例思路):
let Source = Excel.CurrentWorkbook(){[Name="主表名称"]}[Content], 添加分组键 = Table.AddColumn(Source, "GroupKey", each [Product] & "_" & [Weekday]), 分组数据 = Table.Group(添加分组键, {"GroupKey"}, {{"子表数据", each Table.RemoveColumns(_, {"GroupKey"})}}), 获取分组列表 = Table.Column(分组数据, "GroupKey"), 生成子查询 = List.Map(获取分组列表, (key) => Table.SelectRows(分组数据, each [GroupKey] = key){0}[子表数据]) in 生成子查询
- 打开查询管理器,将每个子查询重命名为对应的
Product_Weekday格式即可。
步骤5:验证结果
检查每个子表的数据是否仅包含对应Product和Weekday的记录,确保无遗漏或错误。
内容的提问来源于stack exchange,提问作者P3P0
相关产品推荐
相关产品推荐

