Power Query中的重叠时序数据

Overlapping Time Series Data in Power Query

提问人:ForeverLostAtSea 提问时间:7/9/2021 最后编辑:ForeverLostAtSea 更新时间:7/10/2021 访问量:556

问:

各位Power Query向导大家好,

我有一个与这个问题类似的问题:具有重叠时间范围的时间序列,仅使用Excel Power Query中的最新时间序列,只是我的列不仅仅是日期列,而是日期/时间列。我正在汇集一个文件目录,这些文件看起来像这样并且有重叠的时间,但我只想保留较新的数据,而不是将它们组合在一起:

清单 A
List A

清单 B
List B

是否有人有实现此目标的策略,或者这是我应该在Power Query之外做的事情,例如python?

非常感谢您能提供的任何见解!


let
    Source = Folder.Files("C:\Users\xxxx\OneDrive\Documents\Atom Projects\10MinOrtho\2. Orthometric\2021-06\10MinOrthos"),
    #"Filtered Hidden Files1" = Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true),
    #"Invoke Custom Function1" = Table.AddColumn(#"Filtered Hidden Files1", "Transform File (2)", each #"Transform File (2)"([Content])),
    #"Renamed Columns1" = Table.RenameColumns(#"Invoke Custom Function1", {"Name", "Source.Name"}),
    #"Removed Other Columns1" = Table.SelectColumns(#"Renamed Columns1", {"Source.Name", "Transform File (2)"}),
    #"Expanded Table Column1" = Table.ExpandTableColumn(#"Removed Other Columns1", "Transform File (2)", Table.ColumnNames(#"Transform File (2)"(#"Sample File (2)"))),
    #"Changed Type" = Table.TransformColumnTypes(#"Expanded Table Column1",{{"Source.Name", type text}, {"Column1", type date}, {"Column2", type time}, {"Column3", type number}}),
    #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"Source.Name"}),
    #"Merged Date and Time" = Table.CombineColumns(#"Removed Columns", {"Column1", "Column2"}, (columns) => List.First(columns) & List.Last(columns), "Merged"),
    #"Sorted Rows" = Table.Sort(#"Merged Date and Time",{{"Merged", Order.Ascending}})
in
    #"Sorted Rows"

Excel 时序 PowerQuery 重叠匹配

评论

0赞 horseyride 7/9/2021
目前尚不清楚您为什么突出显示您所做的那些,您想要保留哪一组,以及为什么
0赞 ForeverLostAtSea 7/10/2021
很抱歉,我有一系列 25+ 文件,它们与上述两个文件有相似的重叠。我希望将它们全部合并为两列,一列是日期时间,另一列是浮点值。我想保留第二个文件(时间较新)中的重叠数据,并从第一个文件中剥离重叠数据。然后,我需要它遍历文件夹中的所有文件,对所有文件完成相同的过程。
0赞 Ron Rosenfeld 7/10/2021
我已经展示了如何处理你提出的重叠的冒险问题。您应该能够对下载的每个文件重复该操作。
0赞 ForeverLostAtSea 7/10/2021
嘿罗恩,感谢您的快速回复!这显然是一个愚蠢的问题,但是尽管我对VBA有很好的了解,但Power Query对我来说是超级新的,但无论如何,这部分代码去哪儿了?我已经添加了我在问题中使用的其余代码。我需要设置变量吗?一次将它们放入两个文件中?再次道歉,但这是一个学习的过程。
0赞 Ron Rosenfeld 7/10/2021
我没有收到您对自己问题的评论的通知。如果您对我的答案有疑问,请将其作为该答案的评论发布。我的回答是针对您发布的信息,显示了两个列表,并且按照您的要求,展示了处理问题的策略。我想你可以将你的真正问题概念化为将你已经下载的数据与传入的文件进行比较。因此,我会按日期顺序循环浏览您的文件,并在合并新数据之前从您以前的数据中删除相关行。

答:

0赞 Ron Rosenfeld 7/9/2021 #1

你没有确切地描述你想用重叠的时间做什么。

我建议

  • 从列表 A 中删除与列表 B 位于重叠区域中的条目。
  • 这可以通过基于列表 B 中首次列出的简单过滤器来完成
    • 我假设列表 B 是按日期/时间排序顺序排列的。如果没有,则需要进行小的代码更改
  • 然后附加两个列表

M代码

let
    Source = Excel.CurrentWorkbook(){[Name="ListA"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date/Time", type datetime}, {"Value", type number}}),
    Source2 = Excel.CurrentWorkbook(){[Name="ListB"]}[Content],
    #"Changed Type2" = Table.TransformColumnTypes(Source2,{{"Date/Time", type datetime}, {"Value", type number}}),

//overlap starts at the first date from the second list
overlapStart = #"Changed Type2"[#"Date/Time"]{0},

//Filter list A to end before start time in List B
    filteredA = Table.SelectRows(#"Changed Type", each [#"Date/Time"] < overlapStart),

//now combine the two lists
    combLists = Table.Combine({filteredA,#"Changed Type2"})

in
    combLists

列表 A 和 B
enter image description here

组合的
enter image description here