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

如何在Power Query中用公式定义列筛选当日需执行的任务?

如何用Power Query筛选Excel中当日需执行的任务

我有一份Excel源文档,包含任务列表及各工作日任务执行时间列,希望创建新文档整合多源数据,现需筛选出当日需执行的任务。我编写了一段Power Query代码,用dayname返回日期的前三个字母(对应源文档表头),尝试筛选该列非空值,同时提供了示例源数据与周二的预期结果。

原代码如下:

let
    Source = Excel.Workbook(File.Contents("C:\\document.xlsx"), null, true),
    Table1_Table = Source{[Item="Table1",Kind="Table"]}[Data],
    dayname= Text.Start(Date.DayOfWeekName(),3),
    #"Changed Type" = Table.TransformColumnTypes(Table1_Table,{{"Task", type text}, {"Mon", type any}, {"Tue", type any}, {"Wed", type any}, {"Thu", type any}, {"Fri", type any}, {"Sat", type datetime}, {"Sun", type datetime}}),
    #"Filtered Rows" = Table.SelectRows(#"Changed Type", each ([dayname] <> null))
in
    #"Filtered Rows"

示例源数据

taskmontuewed
First6 am6 am
other5 am5 am5 am
xxx7 am8 am9 am

周二的预期结果

tasktoday
other5 am
xxx8 am

原代码存在的问题

  1. 动态列引用错误:[dayname]无法正确引用变量dayname对应的列,Power Query中需用Record.Field(_, dayname)来根据变量名获取列值。
  2. 筛选条件不完整:仅判断<> null无法排除空文本(Excel空白单元格常为空文本而非null)。
  3. 类型转换不合理:示例中的时间格式(如"6 am")不是标准datetime类型,设为datetime会导致解析错误。
  4. 未匹配预期结果结构:原代码未移除多余列,也未将当日列重命名为"today"。

修正后的代码

let
    Source = Excel.Workbook(File.Contents("C:\\document.xlsx"), null, true),
    Table1_Table = Source{[Item="Table1",Kind="Table"]}[Data],
    // 指定英文区域确保星期缩写与表头一致,避免本地化差异
    dayname = Text.Start(Date.DayOfWeekName(DateTime.LocalNow(), "en-US"), 3),
    // 统一将时间列设为文本类型,适配am/pm格式
    #"Changed Type" = Table.TransformColumnTypes(Table1_Table,{{"Task", type text}, {"Mon", type text}, {"Tue", type text}, {"Wed", type text}, {"Thu", type text}, {"Fri", type text}, {"Sat", type text}, {"Sun", type text}}),
    // 同时排除null和空文本,筛选当日有任务的行
    #"Filtered Rows" = Table.SelectRows(#"Changed Type", each not (Record.Field(_, dayname) = null or Record.Field(_, dayname) = "")),
    // 仅保留Task和当日列
    #"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows", {"Task", dayname}),
    // 将当日列重命名为"today",匹配预期结果
    #"Renamed Columns" = Table.RenameColumns(#"Removed Other Columns", {{dayname, "today"}})
in
    #"Renamed Columns"

关键修正说明

  • 使用Record.Field(_, dayname)实现动态列的正确引用。
  • 筛选条件同时检查null和空文本,确保所有空白任务都被排除。
  • 统一时间列为文本类型,避免格式解析错误。
  • 增加移除多余列和重命名步骤,完全匹配预期结果的结构。
  • 给Date.DayOfWeekName指定"en-US"区域,确保星期缩写(如Tue)与表头一致,不受系统语言设置影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:25:36