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_TimeDate_of_Call列是DateDateTimetypes,那么应该这样做:

  1. 使用公式[Error_Open_Time] - [Date_of_Call]添加自定义列
  2. 将自定义列过滤为24小时之间。 你可以做“大于或等于” -1.00:00:00和“小于或等于” 1.00:00:00 (在1天之间)。
  3. 删除自定义列

步骤应该如下所示:

#"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])