SSRS Visual Studio 2017(SSDT)日期参数格式及数据匹配问题问询
解决SSRS报表日期参数无返回数据的问题
这问题我之前帮同事解决过好几次,核心原因就是你选的日期参数默认会带上00:00:00的时间戳,而你的数据源日期是包含具体时分秒的——比如2020-10-01 14:30:00,当你用@EndDate = 2020-10-01去匹配时,系统会把它当成2020-10-01 00:00:00,自然查不到当天非凌晨的数据。下面给你两种靠谱的解决方法,还有参数格式的设置技巧:
一、调整查询语句(最推荐的方案)
直接在数据源的SQL查询里处理时间部分,确保覆盖全天的数据:
方案1:将日期字段转换为纯日期类型
如果用的是T-SQL,把带时间的字段转换成DATE类型,再和参数匹配:
SELECT * FROM 你的表名 WHERE CAST(你的日期字段 AS DATE) BETWEEN @StartDate AND @EndDate
这样不管字段里的时间是几点,都会被转换成当天的日期,和你选的参数完全匹配。
方案2:给结束日期加1天,用小于条件
这种方式更高效(避免字段转换导致索引失效),把结束日期的范围扩大到下一天的凌晨:
SELECT * FROM 你的表名 WHERE 你的日期字段 >= @StartDate AND 你的日期字段 < DATEADD(DAY, 1, @EndDate)
比如你选的@EndDate是2020-10-01,这个条件就会包含所有小于2020-10-02 00:00:00的数据,也就是2020-10-01全天的所有记录。
二、设置报表参数的格式和类型
确保你的日期参数是正确的类型和显示格式:
- 打开Visual Studio的报表参数面板,找到
@StartDate和@EndDate,把数据类型设置为Date/Time(不要用字符串类型)。 - 在参数的“格式”选项里输入
yyyy-MM-dd,这样参数显示的时候就是你要的格式,同时日历选择器也能正常使用,不会显示多余的时间部分。
额外检查点
如果还是没数据,你可以先在数据库里直接执行SQL语句,把参数替换成具体的日期(比如'2020-10-01'和'2020-10-02'),看看能不能查到数据,排除数据源本身的问题。
内容的提问来源于stack exchange,提问作者Kenshin H
相关产品推荐
相关产品推荐

