我有一个查询来填充报告参数:
select distinct [Source No_] from _report_sales_master
where [Industry] = @Industries
and [posting date] >= dateadd(year,datediff(year,'01/06/2000',@year)-1,'01/06/2000')
and [posting date] < dateadd(year,datediff(year,'01/06/2000',@year),'01/06/2000')
order by [Source No_]
查询会生成一个列表,用于填充多值报告参数。
当我运行查询时,它会生成正确的结果。
当我运行报告时,“Source No_”参数保持为空,无论我选择哪个@year或@industries
当我从查询中删除“发布日期”子句时,参数列表会填充并正常工作。
我错过了什么?
答案 0 :(得分:0)
尝试以'yyyy-mm-dd'
格式输入您的硬编码日期(字符串文字)。我发现以你所拥有的格式输入日期,即dd / mm / yyyy或mm / dd / yyyy,SSRS可以混淆,这是月份,也就是日期。
我在数据库和SSRS级别上使用各种设置进行日期本地化,并发现格式中的任何日期字符串都可能导致问题(我不知道具体原因)。
当您使用字符串文字时,会执行隐式转换以将其解析为以下之一:
time, date, smalldatetime, datetime, datetime2
或datetimeoffset
值。
防止日期错误的另一种方法是使用显式强制转换替换您的字符串文字,例如:
CONVERT(datetime, '2012-06-01', 101)
假设月份= 6月CONVERT(datetime, '2012-01-06', 101)
假设月份= 1月我能想到的另一件事是检查报告中的参数是否设置为[Source No_]
列的正确数据类型。
答案 1 :(得分:0)
将它放入您的数据库并玩游戏:
DECLARE @year DATETIME
SELECT @year = TypeDateTimeInputHere
SELECT dateadd(year,datediff(year,'01/06/2000',@year)-1,'01/06/2000') [GT posting date]
,dateadd(year,datediff(year,'01/06/2000',@year),'01/06/2000') [LT posting date]
我不知道你要用你的大于或等于(GT)和你的不到(LT)逻辑做什么,但我不认为它做你期望的或想要它。每次测试时,我都会得到相同的结果,除非我强制[发布日期]的某个日期不到2000年的1/6。
显然,将“TypeDateTimeInputHere”替换为您知道或期望在[发布日期]中的样本值。