Power Query中如何筛选最近120分钟的DateTime数据?
解决Power Query筛选最近120分钟数据的问题
问题排查与修正点:
- 步骤引用错误:筛选步骤
#"Filtered Rows1"中,你引用的是#"Changed Type",但Datum/Tid列是在#"Added Custom"后新增,并在#"Changed Type1"中转为datetime类型的,必须引用#"Changed Type1"才能获取正确的时间列。 - 持续时间计算错误:
#duration(0,1,20,0)代表1小时20分钟,而你需要的是120分钟(2小时),正确写法应为#duration(0,2,0,0),或更直观的Duration.FromMinutes(120)。 - 初始语法错误:你最初尝试的
Duration.Minutes(DateTime.LocalNow() -(120))逻辑错误,Duration.Minutes是提取持续时间的分钟数,而非创建持续时间,不能直接用于时间减法。
修正后的完整代码:
let Source = Table.Combine({tab_Silosar, tab_Mjölk, tab_Grädde, tab_Restmjölk, tab_Gränsmjölk, tab_SötGränsmjölk, tab_Permeat, tab_Pastörer, tab_Filråvara, tab_Hydrolys, tab_Syrning}), #"Filtered Rows" = Table.SelectRows(Source, each ([Tank] <> null)), #"Reordered Columns" = Table.ReorderColumns(#"Filtered Rows",{"ID", "Streckkod", "Datum", "Tid", "Tank", "Produkt", "Fett", "Protein", "TS", "Laktos", "SNF", "Glukos", "pH", "Nitrat", "Nitrit", "Temp", "Ålder", "Volym", "LoS", "UTS", "Konsistens", "Antibiotika", "Sign", "Kommentar"}), #"Changed Type" = Table.TransformColumnTypes(#"Reordered Columns",{{"ID", type any}, {"Streckkod", type text}, {"Datum", type date}, {"Tid", type time}, {"Tank", type text}, {"Produkt", type text}, {"Fett", type number}, {"Protein", type number}, {"TS", type number}, {"Laktos", type number}, {"SNF", type number}, {"Glukos", type number}, {"pH", type number}, {"Nitrat", type number}, {"Nitrit", type number}, {"Temp", type number}, {"Ålder", type number}, {"Volym", Int64.Type}, {"LoS", Int64.Type}, {"UTS", Int64.Type}, {"Konsistens", Int64.Type}, {"Antibiotika", type text}, {"Sign", type text}, {"Kommentar", type text}}), #"Added Custom" = Table.AddColumn(#"Changed Type", "Datum/Tid", each [Datum]&[Tid]), #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"Datum/Tid", type datetime}}), #"Filtered Rows1" = Table.SelectRows(#"Changed Type1", each ([#"Datum/Tid"] >= DateTime.LocalNow() - #duration(0,2,0,0))) in #"Filtered Rows1"
可选简化写法:
用Duration.FromMinutes(120)替代#duration,代码可读性更强:
#"Filtered Rows1" = Table.SelectRows(#"Changed Type1", each ([#"Datum/Tid"] >= DateTime.LocalNow() - Duration.FromMinutes(120)))
提示:若需避免时区偏差,可将
DateTime.LocalNow()替换为DateTime.UtcNow(),同时确保Datum/Tid列使用UTC时间格式。
内容的提问来源于stack exchange,提问作者WeAreOne
相关产品推荐
相关产品推荐

