Excel / DAX / Power Query:如何筛选表格以查找在两个date之间填入24小时窗口的logging
让我的头难住这一个。 甚至不知道它是否可能。
我有2个date列:“Date_of_Call”和“Error_Open_Time”
我想过滤这个报告,只显示Date_of_Call时间内的Error_Open_Time在24小时窗口内的logging。
例:
如果Error_Open_Time = '11 / 6/2016 1:17 PM PM'和Date_of_Call = '11 / 6/2016 12:00:00 AM',那么这个logging应该显示在filter中,因为Error_Open_Time落在24小时窗口内。
如果Error_Open_Time = '12 / 11/2016 12:35:00 AM'和Date_of_Call = '12 / 10/2016 12:00:00 AM',那么这个logging不应该出现在filter中,因为Error_Open_Time不属于24小时窗口。
此外,如果Error_Open_Timedate在Date_of_Calldate之前,那么它应该被过滤掉,因为它不是必需的。
我希望这是有道理的。 感谢你的帮助!
你可以在Power Query中一起减去date,这会给你一个持续时间。 如果Error_Open_Time
和Date_of_Call
列是Date
或DateTime
types,那么应该这样做:
- 使用公式
[Error_Open_Time] - [Date_of_Call]
添加自定义列 - 将自定义列过滤为24小时之间。 你可以做“大于或等于”
-1.00:00:00
和“小于或等于”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"})
在表中创build一个计算列以确定要过滤的logging。
= IF ( 'Table'[Date_of_Call] = DATE ( YEAR ( 'Table'[Error_Open_Time] ), MONTH ( 'Table'[Error_Open_Time] ), DAY ( 'Table'[Error_Open_Time] ) ), 1, 0 )
然后在您的报告中添加一个filter,只使用计算列中的值等于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])