0

您好所有电源查询向导,

我对这个问题有一个类似的问题:Timeseries with overlaps timeframes, using only the most recent in Excel Power Query,除了我的列不仅仅是一个日期列,而是一个日期/时间列。我正在汇集一个看起来像这样并且具有重叠时间的文件目录,但我只想保留较新的数据而不是将它们组合在一起:

清单 A
清单 A

清单 B
清单 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"

4

1 回答 1

0

您没有准确描述要对重叠时间做什么。

我建议

  • 从列表 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
在此处输入图像描述

结合
在此处输入图像描述

于 2021-07-09T14:26:39.613 回答