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

Excel Power Query(M):填充每日工资列及补全缺失薪资求助

解决Excel Power Query中的薪资填充与日薪计算问题

步骤1:将「3 Month Salary」转换为可计算的数值类型

原数据中的薪资带千位分隔符,需先转为数值类型才能计算:

= Table.TransformColumns(源, {{"3 Month Salary", each if _ = "" then null else Number.FromText(Text.Replace(_, ",", "")), type number}})

逻辑说明:把空内容转为null,移除逗号后转成数值,避免后续计算报错。

步骤2:按员工分组填充缺失的薪资值

要保证同一员工的缺失薪资取之前的有效值,需按Name分组后在组内向下填充:

#"分组的行" = Table.Group(薪资转换后的表, {"Name"}, {{"GroupedData", each _, type table}}),
#"填充薪资列" = Table.AddColumn(#"分组的行", "FilledData", each Table.FillDown([GroupedData], {"3 Month Salary"})),
#"展开分组数据" = Table.ExpandTableColumn(#"填充薪资列", "FilledData", {"Date", "3 Month Salary", "Daily Wage"}, {"Date", "3 Month Salary", "Daily Wage"})

核心逻辑:仅在同一员工的行范围内填充有效值,不会跨员工产生干扰。

步骤3:计算「Daily Wage」列

结合日期判断周五的3倍薪资规则:

= Table.AddColumn(薪资填充后的表, "Daily Wage", each 
    let
        baseWage = [3 Month Salary] / 90,
        // 以周日为一周起始,周五对应返回值5;若以周一为起始,周五对应4,需调整判断条件
        dayOfWeek = Date.DayOfWeek([Date], Day.Sunday)
    in
        if dayOfWeek = 5 then baseWage * 3 else baseWage
)

完整可运行代码(适配你的测试数据)

假设源表名为Table1,直接复制到Power Query高级编辑器即可使用:

let
    源 = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"更改列类型" = Table.TransformColumnTypes(源, {{"Date", type date}, {"Name", type text}, {"3 Month Salary", type text}, {"Daily Wage", type any}}),
    #"转换薪资为数值" = Table.TransformColumns(#"更改列类型", {{"3 Month Salary", each if _ = "" then null else Number.FromText(Text.Replace(_, ",", "")), type number}}),
    #"按员工分组" = Table.Group(#"转换薪资为数值", {"Name"}, {{"GroupedData", each _, type table [Date=date, Name=text, 3 Month Salary=number, Daily Wage=any]}}),
    #"填充缺失薪资" = Table.AddColumn(#"按员工分组", "FilledData", each Table.FillDown([GroupedData], {"3 Month Salary"})),
    #"展开数据" = Table.ExpandTableColumn(#"填充缺失薪资", "FilledData", {"Date", "3 Month Salary", "Daily Wage"}, {"Date", "3 Month Salary", "Daily Wage"}),
    #"计算每日工资" = Table.AddColumn(#"展开数据", "Daily Wage", each 
        let
            baseWage = [3 Month Salary] / 90,
            dayOfWeek = Date.DayOfWeek([Date], Day.Sunday)
        in
            if dayOfWeek = 5 then baseWage * 3 else baseWage
    )
in
    #"计算每日工资"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:37:26