按 Header 日期动态删除 Power Query 中的列
Dynamically Remove Columns In Power Query By Header Dates
我有一个查询 table 数据已在 Power Query 中合并。结果是两年内每个人的每月百分比,如下所示。我想在月份结束时从 table 中动态删除月份。因此,从 8 月 1 日开始,当我刷新时,7 月将从电源查询 table 中删除。
合并查询Table:
Name
Jul-21
Aug-21
Sept-21
Bob
.10
.20
.10
Amy
.30
.40
.10
我查看了 StackOver,有一个 post 与我想要完成的类似:
post 中建议删除超过三年的列 headers 的代码是:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
final = Table.SelectColumns(Source, List.Select(Table.ColumnNames(Source),
each try Date.From(_) >= Date.AddYears(Date.From(DateTime.FixedLocalNow()),-3)
otherwise true))
in
final
我进入 Power Query 中的高级编辑器,试图将其调整为我想要执行的操作,但代码不起作用,也没有删除任何列。这甚至在调整代码以不删除当前月份之前。
let
Source = Table.Combine({Merge1, Merge2}),
final = Table.SelectColumns(Source, List.Select(Table.ColumnNames(Source),
each try Date.FromText(_) >= Date.From(DateTime.FixedLocalNow())
otherwise true))
in
final
我已经尝试了 每次尝试 Date.From(_) 和 每次尝试 Date.FromText(_),两者都没有删除任何列。在我的任何测试中,我都没有改变等式的 Date.From(DateTime.FixedLocalNow()) 部分。
我曾尝试搜索在线资源以了解此代码的工作原理以及使用 Microsoft 的支持站点来了解 Table.SelectColumns 和 List.Select,但我还没有找到合适的资源可以分解如何理解上面的代码,所以这让我很难理解我需要做哪些改变才能让它工作。
到目前为止,我了解到 List.Select 正在确定将包含在 Table.SelectColumns[=47 中的列=] 功能。 List.Select 正在创建所有列 headers 的列表,然后测量它们的文本(由 Date.FromText(_ ) 函数转换成一个日期)针对当前日期使用 each try 和 otherwise 捕获所有 non-date headers 并确保它们也包括在内。
但我不明白为什么方程没有删除任何过去的日期列或如何调整函数(一旦它起作用)以不删除当前月份。对于这两个问题,我将不胜感激。如果有帮助,我可以将 link 分享到完整的电子表格。
怎么样
Table.SelectColumns(Source, List.Select(Table.ColumnNames(Source),
each try
Date.StartOfMonth(Date.FromText(Text.Start(_,3)&"/01/"&"20"&Text.End(_,2)))
>= Date.StartOfMonth(Date.From(DateTime.FixedLocalNow()))
otherwise true))
我有一个查询 table 数据已在 Power Query 中合并。结果是两年内每个人的每月百分比,如下所示。我想在月份结束时从 table 中动态删除月份。因此,从 8 月 1 日开始,当我刷新时,7 月将从电源查询 table 中删除。
合并查询Table:
Name | Jul-21 | Aug-21 | Sept-21 |
---|---|---|---|
Bob | .10 | .20 | .10 |
Amy | .30 | .40 | .10 |
我查看了 StackOver,有一个 post 与我想要完成的类似:
post 中建议删除超过三年的列 headers 的代码是:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
final = Table.SelectColumns(Source, List.Select(Table.ColumnNames(Source),
each try Date.From(_) >= Date.AddYears(Date.From(DateTime.FixedLocalNow()),-3)
otherwise true))
in
final
我进入 Power Query 中的高级编辑器,试图将其调整为我想要执行的操作,但代码不起作用,也没有删除任何列。这甚至在调整代码以不删除当前月份之前。
let
Source = Table.Combine({Merge1, Merge2}),
final = Table.SelectColumns(Source, List.Select(Table.ColumnNames(Source),
each try Date.FromText(_) >= Date.From(DateTime.FixedLocalNow())
otherwise true))
in
final
我已经尝试了 每次尝试 Date.From(_) 和 每次尝试 Date.FromText(_),两者都没有删除任何列。在我的任何测试中,我都没有改变等式的 Date.From(DateTime.FixedLocalNow()) 部分。
我曾尝试搜索在线资源以了解此代码的工作原理以及使用 Microsoft 的支持站点来了解 Table.SelectColumns 和 List.Select,但我还没有找到合适的资源可以分解如何理解上面的代码,所以这让我很难理解我需要做哪些改变才能让它工作。
到目前为止,我了解到 List.Select 正在确定将包含在 Table.SelectColumns[=47 中的列=] 功能。 List.Select 正在创建所有列 headers 的列表,然后测量它们的文本(由 Date.FromText(_ ) 函数转换成一个日期)针对当前日期使用 each try 和 otherwise 捕获所有 non-date headers 并确保它们也包括在内。
但我不明白为什么方程没有删除任何过去的日期列或如何调整函数(一旦它起作用)以不删除当前月份。对于这两个问题,我将不胜感激。如果有帮助,我可以将 link 分享到完整的电子表格。
怎么样
Table.SelectColumns(Source, List.Select(Table.ColumnNames(Source),
each try
Date.StartOfMonth(Date.FromText(Text.Start(_,3)&"/01/"&"20"&Text.End(_,2)))
>= Date.StartOfMonth(Date.From(DateTime.FixedLocalNow()))
otherwise true))