Power Apps中TODAY()与SharePoint日期列匹配失效问题
问题场景
我使用以下Power Apps代码检查SharePoint列表shift_data中是否存在匹配生产线、班次和当日日期的记录:
ClearCollect( colContextShift, ShowColumns( Filter( Filter( Filter( shift_data, production_line = ProductionLineCombo.Selected.Value ), shift_number = ShiftCombo.Selected.Value ), shift_dt = Today() ), "ID" ) );
列表中的shift_dt是日期类型列,默认值设为当日日期(不含时间),但即使存在匹配记录,shift_dt = Today()的判断始终不生效,移除日期过滤条件后代码可正常返回结果,且已确认SharePoint与Power Apps的时区设置一致。
补充:将shift_dt = Today()替换为IsToday(shift_dt)后能正确过滤出结果,但会触发委托警告。
问题原因
SharePoint的日期列即使设置为仅日期格式,实际存储时仍会附带默认的时间值(如00:00:00);而Power Apps的Today()函数返回的是仅包含日期部分的对象,直接用=比较时,底层会因时间部分的隐性差异导致匹配失败。
IsToday()函数会忽略时间部分仅判断日期是否为当天,因此能匹配成功,但该函数目前不支持SharePoint的委托查询,当列表记录数量超过Power Apps的非委托查询限制(默认500条,最大2000条)时,会漏掉超出范围的记录。
解决方案
使用范围过滤替代直接相等判断,既保证匹配准确性,又支持委托查询:
ClearCollect( colContextShift, ShowColumns( Filter( shift_data, production_line = ProductionLineCombo.Selected.Value, shift_number = ShiftCombo.Selected.Value, shift_dt >= Today(), shift_dt < DateAdd(Today(), 1, Days) ), "ID" ) );
逻辑说明
shift_dt >= Today():筛选出日期大于等于当日00:00:00的记录shift_dt < DateAdd(Today(), 1, Days):筛选出日期小于次日00:00:00的记录- 两者结合可精准匹配所有当日的记录,不受
shift_dt时间部分的影响,同时该写法完全支持SharePoint委托查询,不会触发警告,也能处理超过非委托限制的大列表。
内容的提问来源于stack exchange,提问作者sabukaru
相关产品推荐
相关产品推荐

