PowerApps中基于日期时间过滤预订记录的逻辑问题
PowerApps 画廊工位状态颜色显示的时间过滤逻辑问题
我在PowerApps画廊中设置工位状态显示规则:可用工位为绿色,已预订工位为红色。原本仅通过日期过滤Reservation Details记录就能正常实现效果,但加入时间维度后,过滤逻辑出错,已预订工位会错误显示为可用的绿色。
原有可用代码(仅日期过滤)
Switch( LookUp( ForAll( Filter( 'Reservation Details', Date >= FromDate_Dp.SelectedDate, Date <= ToDate_Dp.SelectedDate && 'Booking Status' = 'Booking Status (Reservation Details)'.Booked ), { DeskName: 'Reserved Desk'.Name, BookingStatus: Text('Booking Status') } ), DeskName = ThisItem.Name ).BookingStatus, "Booked", Color.Red, Color.Green )
修改后错误代码(加入时间维度)
尝试加入日期+时间过滤后,逻辑错误导致已预订工位仍显示绿色,代码如下:
Switch( LookUp( ForAll( Filter( 'Reservation Details', 'Start Date Time' >= FromDate_Dp.SelectedDate + Time(Value(FromTimeHour_Ddl.Selected.Value), Value(FromTimeMinutes_Ddl.Selected.Value), 0) && 'End Date Time' <= ToDate_Dp.SelectedDate + Time(Value(ToTimeHour_Ddl.Selected.Value), Value(ToTimeMinutes_Ddl.Selected.Value), 0) && 'Booking Status' = 'Booking Status (Reservation Details)'.Booked ), { DeskName: 'Reserved Desk'.Name, BookingStatus: Text('Booking Status') } ), DeskName = ThisItem.Name ).BookingStatus, "Booked", Color.Red, Color.Green )
问题场景
现有一条2月27日9:00-18:00的工位预订,当用户尝试预订该工位2月27日12:00-13:00时,当前过滤逻辑的第一个&&条件满足,但第二个&&条件不满足,导致工位错误显示为可用的绿色。
需满足核心需求:用户可选择多个日期,且起始、结束时间固定,不能因为修正逻辑而错误阻止不同日期(比如2月28日)的工位预订。
修正后的代码
核心是修改时间段重叠的判断逻辑,正确的过滤规则应判断现有预订的时间段与用户选择的时间段存在重叠,代码如下:
Switch( LookUp( ForAll( Filter( 'Reservation Details', // 时间段重叠判断:现有预订开始 ≤ 用户选择结束,且现有预订结束 ≥ 用户选择开始 'Start Date Time' <= ToDate_Dp.SelectedDate + Time(Value(ToTimeHour_Ddl.Selected.Value), Value(ToTimeMinutes_Ddl.Selected.Value), 0) && 'End Date Time' >= FromDate_Dp.SelectedDate + Time(Value(FromTimeHour_Ddl.Selected.Value), Value(FromTimeMinutes_Ddl.Selected.Value), 0) && 'Booking Status' = 'Booking Status (Reservation Details)'.Booked ), { DeskName: 'Reserved Desk'.Name, BookingStatus: Text('Booking Status') } ), DeskName = ThisItem.Name ).BookingStatus, "Booked", Color.Red, Color.Green )
逻辑说明
这个重叠判断规则能覆盖所有冲突场景:
- 现有预订完全包含用户选择的时间段(如9:00-18:00包含12:00-13:00)
- 用户选择的时间段完全包含现有预订
- 两个时间段部分重叠(如用户选17:00-19:00,现有预订是9:00-18:00)
同时不会误判不同日期的预订:比如用户选2月28日的时间段,现有预订是2月27日,此时End Date Time(27日18:00)会小于用户的开始时间(28日9:00),条件不满足,不会错误标记为已预订。
内容的提问来源于stack exchange,提问作者gymcode
相关产品推荐
相关产品推荐

