提问人:ForeverLostAtSea 提问时间:7/9/2021 最后编辑:ForeverLostAtSea 更新时间:7/10/2021 访问量:556
Power Query中的重叠时序数据
Overlapping Time Series Data in Power Query
问:
各位Power Query向导大家好,
我有一个与这个问题类似的问题:具有重叠时间范围的时间序列,仅使用Excel Power Query中的最新时间序列,只是我的列不仅仅是日期列,而是日期/时间列。我正在汇集一个文件目录,这些文件看起来像这样并且有重叠的时间,但我只想保留较新的数据,而不是将它们组合在一起:
是否有人有实现此目标的策略,或者这是我应该在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"
答:
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
评论