PowerApps中DatePicker筛选SQL数据源Gallery无数据解决方法
问题根因
该问题和SQL端、DatePicker端的日期显示格式无关,核心原因有两点:
- 若SQL中
Date字段为datetime/datetime2类型,字段值会附带具体时分秒毫秒的时间部分,而DatePicker.SelectedDate返回的是选中日期当天0点的时间戳,直接做相等判断时,所有时间部分非0点的记录都会被判定为不匹配。 - 若直接在Filter中对SQL日期字段调用本地转换函数,会破坏查询委托逻辑,当数据源记录数超过应用配置的单请求返回上限(默认500,最高2000)时,会出现匹配结果不全甚至无结果的问题。
修复方法
推荐方案(支持委托,适配全量数据场景)
使用日期区间匹配逻辑,无需做任何格式转换,查询可直接下推到SQL端执行,无数据量限制,也不会出现时间部分不匹配的问题,将Gallery.Items公式替换为以下内容即可:
Filter( vw_Expenses, Date >= dp_ViewExpensesDateFilter.SelectedDate, Date < DateAdd(dp_ViewExpensesDateFilter.SelectedDate, 1, TimeUnit.Days) )
该逻辑会匹配选中日期0点到次日0点之间的所有记录,无论SQL中存储的日期附带什么时间值,都能正常命中。
小数据量场景简化方案
如果确认vw_Expenses视图的总记录数永远不会超过应用设置的单请求返回上限,可以直接截断日期的时间部分做相等匹配:
Filter( vw_Expenses, DateValue(Text(Date, "yyyy-mm-dd")) = dp_ViewExpensesDateFilter.SelectedDate )
注意:该写法对数据源字段调用了转换函数,无法委托给SQL执行,数据量超限后会出现匹配异常,非必要不选择该方案。
补充说明
日期显示格式仅影响前端的文本呈现效果,不会修改日期类型的底层存储值,调整SQL或DatePicker的显示格式无法解决该匹配问题。
内容的提问来源于stack exchange,提问作者Asha Richardson
相关产品推荐
相关产品推荐

