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

Power Query中重构人员规划表格:按指定人员筛选X/Y值并生成对应日期汇总表

Power Query中重构人员规划表格:按指定人员筛选X/Y值并生成对应日期汇总表

嗨,我来帮你一步步搞定这个Power Query的表格重构需求!你要的是根据选中的人员,筛选出他们标记为X/Y的记录,再按字母分组汇总对应的日期对吧?咱们一步步来:

一、先理清楚咱们的数据源

你已经有两个关键数据源了:

  • 主数据表:包含日期(Date)和PersonA/B/C三列的原始表
  • 人员选择表:带下拉选项的单列表,用来选择要查看的目标人员

二、具体操作步骤(附M代码)

直接给你写好可复用的M代码,每一步我都加上注释,你照着改对应表名就行:

let
    // 1. 加载你的两个数据源(把引号里的表名改成你实际的表名)
    主表 = Excel.CurrentWorkbook(){[Name="你的主数据表名称"]}[Content],
    人员选择表 = Excel.CurrentWorkbook(){[Name="你的人员选择表名称"]}[Content],
    
    // 2. 获取当前选中的人员(动态获取下拉框的选择值)
    varSelectedPerson = Table.FirstValue(人员选择表[你的人员列列名]),
    
    // 3. 只保留主表中的日期列和选中的人员列,删掉其他无关列
    保留目标列 = Table.SelectColumns(主表, {"Date", varSelectedPerson}),
    
    // 4. 筛选出该人员列值为X或Y的行(忽略其他值)
    筛选有效行 = Table.SelectRows(保留目标列, 
        each Record.Field(_, varSelectedPerson) = "X" or Record.Field(_, varSelectedPerson) = "Y"),
    
    // 5. 把选中的人员列重命名为"Letter",方便后续分组
    重命名列 = Table.RenameColumns(筛选有效行, {{varSelectedPerson, "Letter"}}),
    
    // 6. 添加"Person"列,值就是咱们选中的人员
    添加人员列 = Table.AddColumn(重命名列, "Person", each varSelectedPerson),
    
    // 7. 按Person和Letter分组,把对应的日期收集成一个列表
    分组汇总日期 = Table.Group(添加人员列, {"Person", "Letter"}, 
        {{"日期列表", each List.RemoveNulls([Date]), type list}}),
    
    // 8. 把日期列表转换成动态的日期列(比如Date1、Date2...自动生成对应数量的列)
    转换为多列 = Table.AddColumn(分组汇总日期, "日期列记录", 
        each Record.FromList([日期列表], List.Transform({1..List.Count([日期列表])}, each "Date" & Text.From(_)))),
    
    // 9. 展开刚才生成的日期列记录,得到横向排列的日期
    展开日期列 = Table.ExpandRecordColumn(转换为多列, "日期列记录", 
        List.Distinct(List.Combine(Table.Column(转换为多列, "日期列记录") |> List.Transform(Record.FieldNames)))),
    
    // 10. 删掉临时的"日期列表"列,调整列顺序把Person和Letter放最前面
    移除临时列 = Table.RemoveColumns(展开日期列, {"日期列表"}),
    调整列顺序 = Table.ReorderColumns(移除临时列, 
        List.Combine({{"Person", "Letter"}, List.RemoveItems(Table.ColumnNames(移除临时列), {"Person", "Letter"})}))
in
    调整列顺序

三、关键步骤解释

  1. 动态引用选中人员:用Record.Field(_, varSelectedPerson)来获取对应列的值,这样不管选PersonA/B/C都能自动适配,不用硬写列名
  2. 分组收集日期:通过Table.Group把同一个人员+字母组合的日期都攒成列表,避免重复行
  3. 动态生成日期列:把日期列表转成记录再展开,这样不管有多少个日期,都会自动生成Date1、Date2...的列,不用手动加列

你把代码里的表名、列名改成你实际的名称,导入Power Query运行就能得到你想要的结果啦!

备注:内容来源于stack exchange,提问作者Brtrnd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 12:18:04