【发布时间】:2019-02-10 14:49:24
【问题描述】:
在 SSRS 中,预览中的日期时间参数与部署的报告不匹配。这是别人遇到过的吗? RDL 代码是相同的。是不是有时候,本地预览只是功能的模拟?是不是因为预览中的显示有时会用到缓存数据?
我有一个 SSRS 报告,当我在本地 Visual Studio 中预览它时,日期显示为 2/10/2019,但当 RDL 代码部署在服务器上时,日期显示为 2/7/2019。 日期时间变量基于报告上的一个参数,称为 rundate,它的默认值为 2/10/2019。 所以我认为在预览模式下本地发生的报表服务器上应该发生同样的事情。
报告有四个数据集,作为测试,我将每四个数据集设置为具有设置 rundate 值的 SQL 行,如下所示: SET @rundate = '2019-02-10' 但是在报表服务器上,当我加载报表时,它会抛出这个错误: 必须声明标量变量“@rundate”。必须声明标量变量“@rundate”。 它位于级联选项卡式错误消息中,如下所示: 客户端渲染期间发生错误。 报告处理过程中发生错误。 数据集“第三数据集”的查询执行失败。 必须声明标量变量“@rundate”。必须声明标量变量“@rundate”。
那么,为什么它在本地运行而不是在服务器上运行? “ThirdDataset”是我在这里给出的假名。实际名称已编辑。但是,我注意到如果它们按字母顺序运行,这将是第一个运行的数据集。所以这让我想到一个问题:为什么报告不承认这是一个参数,为什么它抱怨它没有被声明?
============
更新:
我已将运行日期设置为报表中数据驱动订阅的一部分,如下所示:
SELECT convert (date, DATEADD (DAY, -2 , SYSDATETIME())) 作为运行日期
这是两天前的事。由于今天是 2/11/2019,所以传递给服务器上 SSRS 报告的 rundate 参数应该是 2/9/2019。
为了好玩,为了测试这一点,我将默认值 rundate 参数设置为 8/8/2018,希望数据驱动的报告能够正确设置它。
在 Visual Studio 的本地预览模式下,设置为显示 [@rundate] 表达式的文本框显示 8/8/2018,这是我所期望的,但数据集旨在运行此参数。由于 sql 不应该从旧数据库中检索任何内容,因此预览模式下的图形和图表应该完全为空。他们为什么要显示数据?!
接下来,让我们看看电子邮件订阅提醒的内容。它的日期是 2/11/2019 12:00:00 AM。如果数据驱动订阅的运行方式应该是应该运行的,那么它的日期应该是 2019 年 2 月 9 日
SELECT convert (date, DATEADD (DAY, -2 , SYSDATETIME())) 作为运行日期
为什么这不起作用?
在 SSRS 服务器上,RDL 文件的参数默认值为 2/11/2019 12:00:00 AM,但为什么报告会得到这个默认值?我做错了什么,我该如何解决?
作为测试,我将此默认日期/时间参数设置为 12:12:34 以查看会发生什么。它透露,是的,这是发送到报告的日期时间戳。所以我取消选中“具有默认值”框
然后,我注意到在数据驱动订阅的第 5 步中,如果不做一点小改动,我就无法进入 Next >:
那么,应该怎么办?它会显示古怪的 8/8/2018 价值吗?会显示两天前的日期吗?
【问题讨论】:
-
“参数不匹配”是什么意思?如果用户使用部署的报告输入的值与您在开发工具中输入的值不同,那么这些值当然“不匹配”。
-
您的开发预览中的月份和日期是否反转为已部署的报告?
-
我已经更新了原帖
-
@xarzu 你能显示你的Sql语句吗?那里似乎出了点问题
标签: reporting-services ssrs-2008 rdl