excel 在powerquery中使用公式定义要筛选的列

eoxn13cs  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(145)

我有一个excel源文档,其中有一个任务列表,每个工作日有一列包含任务运行的时间。我想创建另一个文档,从多个源获取信息并合并数据。我的问题是如何只选择今天需要运行的任务。
我创建了下面的代码;其中dayname应该返回每一天的前3个字母(它们是源文档表中的标题),然后过滤该列的非空值。

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"

编辑:源数据示例
| 任务|蒙|图埃|楔形|
| - ------|- ------|- ------|- ------|
| 第一次|上午6时||上午6时|
| 其他|早上5点|早上5点|早上5点|
| 某某|早上7点|上午八时|上午九时|
星期二的示例结果
| 任务|今日|
| - ------|- ------|
| 其他|早上5点|
| 某某|上午八时|
/编辑

xzv2uavs

xzv2uavs1#

如果将数据加载到Power Query中。

那就把它拆下来。

天列标题将透视到属性列中。

属性列值然后可以通过重新格式化为三个字母的日期名称的当前日期进行过滤。

删除属性列并重命名列。

M代码:

let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"task ", type text}, {"mon ", type time}, {"tue", type time}, {"wed", type time}}),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"task "}, "Attribute", "Value"),
#"Filtered Rows" = Table.SelectRows(#"Unpivoted Other Columns", each ([Attribute] = 
Text.Start(
    Text.Lower(
        Date.DayOfWeekName(
            DateTime.Date(DateTime.LocalNow())
        ,"en-us")
    )
,3))),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Attribute"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Value", "Today"}})

在#“重命名列”中

相关问题