我在使用Sql Server Reporting Services(SSRS)2008 R2运行报表时遇到问题。
设置网站,创建一些用户并上传一些报告后,我选择要运行的报告,输入我的参数,然后等待报告呈现......但没有任何反应。我看到“加载”动画很短的时间(不论报告如何都会在1到10秒之间变化),但很快就会消失,除了页面顶部的参数外什么都没有。根本不会呈现任何报告内容。
这发生在我部署到SSRS实例的每个报表上,无论大小,参数数量等等。大多数报表大约有八个类似类型的参数,它们的布局都是相对表格格式:有几个“部分”,每个部分包含一个可能具有分组和/或重复行的表。平均而言,每个表包含大约六个字段。支持报表数据集的查询并不是非常重要的:在大多数情况下,我可以在半分钟内针对SQL运行它们。
我已在以下问题中检查并实施了解决方案,但均未纠正此问题。
(与Safari / Chrome相关) SSRS 2008 R2 - SSRS 2012 - ReportViewer: Reports are blank in Safari and Chrome
(与以管理员身份运行浏览器相关) SSRS 2008 - Reporting Services Webpage is Blank except for headers
我考虑过的其他选项包括直接从计算机运行报告,而不是通过远程桌面运行报告,以及从网络上的其他计算机运行报告,而不是托管它们的服务器。这两种选择都没有取得一致的成功。
然而,我所确定的是,此问题与传递给报告的参数数量直接相关。例如,我的大多数报告都有超过六个或七个多选参数;它们中的每一个都在运行时从数据库填充。如果用户执行“全选”或在参数选择中选择大量选项,则会出现上述问题。但是,如果用户特定于其参数并且仅选择少数,则报告将正确呈现。
这种情况进一步复杂化的是,它遭受了“我的机器上工作”综合症。它发生在某些环境中,但不会发生在其他环境中。
如上所述,我可以通过限制所选参数值的数量来运行报告;这适用于每个环境。然而,我很好奇为什么会发生这种情况(可能是内部SSRS限制?),以及我将来可以做些什么来始终如一地避免它。
答案 0 :(得分:1)
我遇到了同样的问题,按照 Alex Zakharov 的建议,我发现一个参数大约有700行,默认选中它们。取消选择几行立即解决了我的问题,但这对于生产版本来说并不令人满意。
查找 lrb (\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\LogFiles\
)建议的日志文件,我发现以下错误消息:
ERROR: HTTP status code --> 500
-------Details--------
System.Web.HttpException: The URL-encoded form data is not valid. --->
System.InvalidOperationException: Operation is not valid due to the current state of the object.
at System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded()
这导致我this answer找到并更新web.configs,在下面添加代码行,然后重新启动服务。
<appSettings>
<!-- default is 1000 -->
<add key="aspnet:MaxHttpCollectionKeys" value="2000" />
</appSettings>
我必须在2个地方更新,因为SSRS为报表管理器和报表服务器提供了单独的网站:
\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\web.config
\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportManager\web.config
答案 1 :(得分:0)
参数没有内部限制!
第一个建议: 如果表返回“无值”,则可以轻松调试,显示标签
我使用SQL查询中参数的更正查询语法解决了同样的问题:
...
WHERE t.FieldName = ISNULL (@parameter, t.FieldName)
AND t.FieldName2 = ISNULL (@parameter2, t.FieldName2)
...
答案 2 :(得分:0)
我遇到了同样的问题,下拉多选参数带有可能值的长列表(&gt; 100)。检查您的情况并调查哪个参数会破坏报告。
答案 3 :(得分:0)
建议
我也想分享我对这个问题的解决方案。经过这么多的努力和如此多的尝试,我的问题更多的是在前端,有一段代码,我错过了返回空白页,但服务器报告运行良好。
使用Angular从Web API返回HttpResponseMessage
,最初这是我的调用方式:
$http.get(url + 'Report/getUsersReport?CustomerId=' + searchCriteria.customerId + '&fromDate=' + searchCriteria.fromDate + '&toDate=' + searchCriteria.toDate).then(getContractsForBackOfficeReportComplete, function (err, status) {defered.reject(err);});
并添加此行代码{ responseType: 'arraybuffer' })
后:
$http.get(url + 'Report/getUsersReport?CustomerId=' + searchCriteria.customerId + '&fromDate=' + earchCriteria.fromDate + '&toDate=' + searchCriteria.toDate, { responseType: 'arraybuffer' })(getUsersReportBackOffice, function (err, status) {
defered.reject(err);});