Excel / DAX / Power Query:如何筛选 table 以查找在两个日期 window 的 24 小时内填写的记录
Excel / DAX / Power Query: How to filter table to find records that fill within a 24 hour window from two dates
这个问题让我很头疼。甚至不确定它是否可能。
我有 2 个日期列:"Date_of_Call" 和 "Error_Open_Time"
我想过滤此报告以仅显示 Error_Open_Time 在 Date_of_Call 时间 window 的 24 小时内的记录。
示例:
如果 Error_Open_Time = '11/6/2016 1:17:00 PM' 和 Date_of_Call = '11/6/2016 12:00:00 AM',那么这条记录应该显示在过滤器中,因为 Error_Open_Time 属于 24 小时 window。
如果 Error_Open_Time = '12/11/2016 12:35:00 AM' 和 Date_of_Call = '12/10/2016 12:00:00 AM',那么这条记录应该不会出现在过滤器中,因为 Error_Open_Time 不在 24 小时内 window。
此外,如果 Error_Open_Time 日期早于 Date_of_Call 日期,则应将其过滤掉,因为没有必要。
我希望这是有道理的。感谢您的帮助!
您可以在 Power Query 中一起减去日期,这将为您提供持续时间。如果 Error_Open_Time
和 Date_of_Call
列是 Date
或 DateTime
类型,那么这应该可以解决问题:
- 使用公式
[Error_Open_Time] - [Date_of_Call]
添加自定义列
- 将自定义列过滤为 24 小时时间段。您可以执行 "is greater than or equal to"
-1.00:00:00
和 "is less than or equal to" 1.00:00:00
(1 天之间)。
- 删除自定义列
步骤应如下所示:
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each [Error_Open_Time] - [Date_of_Call]),
#"Filtered Rows" = Table.SelectRows(#"Added Custom", each [Custom] >= #duration(-1, 0, 0, 0) and [Custom] <= #duration(1, 0, 0, 0)),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Custom"})
在您的 table 中创建计算列以确定要过滤的记录。
=
IF (
'Table'[Date_of_Call]
= DATE ( YEAR ( 'Table'[Error_Open_Time] ), MONTH ( 'Table'[Error_Open_Time] ), DAY ( 'Table'[Error_Open_Time] ) ),
1,
0
)
然后在您的报告中添加一个过滤器,该过滤器仅使用计算列中等于 1 的值。
如果有帮助请告诉我。
对于 PowerQuery,我会在一行中完成,不需要添加列:
FilterRecords = Table.SelectRows(Source, each ([Error_Open_Time] > [Date_of_Call]) and ([Date_of_Call] + #duration(1,0,0,0) >= [Error_Open_Time]))
这种变体也是可能的:
FilterRecords = Table.SelectRows(Source, each ([Error_Open_Time] > [Date_of_Call]) and (Date.AddDays([Date_of_Call], 1) >= [Error_Open_Time]))
如果需要SQL,则使用
SELECT [Date_of_Call], [Error_Open_Time]
FROM Table
WHERE [Error_Open_Time] > [Date_of_Call]
AND
(DateAdd(day, 1, [Date_of_Call]) >= [Error_Open_Time])
这个问题让我很头疼。甚至不确定它是否可能。
我有 2 个日期列:"Date_of_Call" 和 "Error_Open_Time"
我想过滤此报告以仅显示 Error_Open_Time 在 Date_of_Call 时间 window 的 24 小时内的记录。
示例:
如果 Error_Open_Time = '11/6/2016 1:17:00 PM' 和 Date_of_Call = '11/6/2016 12:00:00 AM',那么这条记录应该显示在过滤器中,因为 Error_Open_Time 属于 24 小时 window。
如果 Error_Open_Time = '12/11/2016 12:35:00 AM' 和 Date_of_Call = '12/10/2016 12:00:00 AM',那么这条记录应该不会出现在过滤器中,因为 Error_Open_Time 不在 24 小时内 window。
此外,如果 Error_Open_Time 日期早于 Date_of_Call 日期,则应将其过滤掉,因为没有必要。
我希望这是有道理的。感谢您的帮助!
您可以在 Power Query 中一起减去日期,这将为您提供持续时间。如果 Error_Open_Time
和 Date_of_Call
列是 Date
或 DateTime
类型,那么这应该可以解决问题:
- 使用公式
[Error_Open_Time] - [Date_of_Call]
添加自定义列
- 将自定义列过滤为 24 小时时间段。您可以执行 "is greater than or equal to"
-1.00:00:00
和 "is less than or equal to"1.00:00:00
(1 天之间)。 - 删除自定义列
步骤应如下所示:
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each [Error_Open_Time] - [Date_of_Call]),
#"Filtered Rows" = Table.SelectRows(#"Added Custom", each [Custom] >= #duration(-1, 0, 0, 0) and [Custom] <= #duration(1, 0, 0, 0)),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Custom"})
在您的 table 中创建计算列以确定要过滤的记录。
=
IF (
'Table'[Date_of_Call]
= DATE ( YEAR ( 'Table'[Error_Open_Time] ), MONTH ( 'Table'[Error_Open_Time] ), DAY ( 'Table'[Error_Open_Time] ) ),
1,
0
)
然后在您的报告中添加一个过滤器,该过滤器仅使用计算列中等于 1 的值。
如果有帮助请告诉我。
对于 PowerQuery,我会在一行中完成,不需要添加列:
FilterRecords = Table.SelectRows(Source, each ([Error_Open_Time] > [Date_of_Call]) and ([Date_of_Call] + #duration(1,0,0,0) >= [Error_Open_Time]))
这种变体也是可能的:
FilterRecords = Table.SelectRows(Source, each ([Error_Open_Time] > [Date_of_Call]) and (Date.AddDays([Date_of_Call], 1) >= [Error_Open_Time]))
如果需要SQL,则使用
SELECT [Date_of_Call], [Error_Open_Time]
FROM Table
WHERE [Error_Open_Time] > [Date_of_Call]
AND
(DateAdd(day, 1, [Date_of_Call]) >= [Error_Open_Time])