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

如何在Power Query中筛选下月值为100的'inactive'人员数据

Power Query 动态筛选实现方案

针对你需要筛选Category='inactive'且下月对应列值=100的需求,因为月份列是动态新增的,不能硬编码列名,以下是完整的M语言实现逻辑:

步骤1:分离固定列与动态月份列

先把ID、Name、Category这些固定列和动态月份列拆分,方便后续处理:

let
    源 = 你的数据源, // 替换成实际的数据源步骤名
    // 定义固定列列表
    fixedColumns = {"ID", "Name", "Category"},
    // 提取所有月份列名(排除固定列)
    monthColumns = List.RemoveItems(Table.ColumnNames(源), fixedColumns)

步骤2:处理月份列的顺序与下月映射

把月份列名转换成可计算的日期,确保排序正确,并找到当前最后一个月份的下一个月列名:

// 将月份缩写转成日期(用任意年份做基准,只需要月份顺序)
    monthDates = List.Transform(monthColumns, each Date.FromText("1 " & _ & " 2024")),
    // 按日期排序月份列,保证时间顺序正确
    sortedMonthColumns = List.Sort(monthColumns, (a,b) => Date.FromText("1 " & a & " 2024") > Date.FromText("1 " & b & " 2024")),
    // 获取最后一个月份列
    lastMonth = List.Last(sortedMonthColumns),
    // 计算最后一个月份的下一个月,并转成缩写格式
    nextMonth = Date.Format(Date.AddMonths(Date.FromText("1 " & lastMonth & " 2024"), 1), "MMM"),
    // 检查下月列是否已存在于数据中
    hasNextMonth = List.Contains(monthColumns, nextMonth)

步骤3:添加下月列值的自定义列

如果下月列存在,就提取对应的值;不存在则标记为null:

// 添加自定义列获取下月列的值
    addNextMonthValue = if hasNextMonth then
        Table.AddColumn(源, "下月值", each Record.Field(_, nextMonth))
    else
        Table.AddColumn(源, "下月值", each null)

步骤4:筛选符合条件的行

最后筛选出Category为inactive且下月值等于100的行,可选移除临时列:

// 筛选目标行
    filteredRows = Table.SelectRows(addNextMonthValue, each [Category] = "inactive" and [下月值] = 100),
    // 移除临时的"下月值"列(可选)
    finalTable = Table.RemoveColumns(filteredRows, {"下月值"})
in
    finalTable

核心优势

  • 完全动态适配月份列新增:不管后续加Mar、Apr还是其他月份缩写列,代码都会自动识别最后一个月份并找到下月列。
  • 无需硬编码列名:避免后续新增月份后需要修改代码的麻烦。
  • 兼容下月列未新增的情况:如果下月列还没添加,会自动标记为null,不会筛选出错误数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:34:52