7

我在 Sql Server Reporting Services (SSRS) 2008 R2 中运行报表时遇到问题。

在设置站点、创建一些用户并上传一些报告之后,我选择了一个要运行的报告,输入我的参数,然后等待报告呈现......但没有任何反应。我在很短的时间内看到“加载”动画(在 1 到 10 秒之间变化,与报告无关),但它很快就消失了,除了页面顶部的参数外什么也没有留下。根本不呈现任何报告内容。

这发生在我部署到 SSRS 实例的每个报表上,无论大小、参数数量等。大多数报表都有大约八个类似类型的参数,并且它们的布局都是相对表格格式:有几个“部分” ",每个都包含一个可能具有分组和/或重复行的表。平均而言,每个表包含大约六个字段。支持报表数据集的查询并不是很重:在大多数情况下,我可以在半分钟内针对 SQL 运行它们。

我已经检查并实施了以下问题中的解决方案,但他们都没有纠正这个问题。

(与 Safari/Chrome 相关) SSRS 2008 R2 - SSRS 2012 - ReportViewer:报告在 Safari 和 Chrome 中为空白

(与以管理员身份运行浏览器有关) SSRS 2008 - Reporting Services 网页除标题外为空白

我考虑过的其他选项包括直接从计算机而不是通过远程桌面运行报告,以及从网络上的其他计算机而不是托管它们的服务器运行报告。这两种选择都没有持续成功。

然而,我确定的是,这个问题与传递给报告的参数数量直接相关。例如,我的大多数报告都有六个或七个以上的多选参数;它们中的每一个都是在运行时从数据库中填充的。如果用户在参数选择中执行“全选”或以其他方式选择大量选项,则会出现上述问题。但是,如果用户对他们的参数是特定的并且只选择了几个,那么报表就会正确呈现。

使这种情况更加复杂的是它患有“在我的机器上工作”综合症。它发生在某些环境中,但不发生在其他环境中。

如前所述,我可以通过限制所选参数值的数量来运行报告;这适用于任何环境。但是,我很好奇为什么会发生这种情况(可能是内部 SSRS 限制?),以及将来我能做些什么来始终避免它。

4

4 回答 4

2

我遇到了同样的问题,按照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()

解决方案

这使我找到了这个答案来查找和更新 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

于 2014-11-10T06:41:49.530 回答
0

我遇到了与下拉多选参数相同的问题,其中可能值很长(> 100)。检查您的情况并调查哪个参数破坏了报告。

于 2013-10-22T13:17:39.283 回答
0

参数没有内部约束!

第一个建议:轻松调试,如果表返回“无值”,则显示标签


我用 SQL 查询中参数的更正查询语法解决了同样的问题:

...
WHERE t.FieldName = ISNULL (@parameter, t.FieldName)
AND t.FieldName2 = ISNULL (@parameter2, t.FieldName2)
...
于 2013-05-12T11:17:33.520 回答
0

建议

我也想分享我对这个问题的解决方案。经过这么多努力和这么多尝试,我的问题更多在前端,我缺少一段代码,它返回空白页,但报告的服务器运行良好。

使用 AngularHttpResponseMessage从 Web API 返回,最初我的调用是这样的:

$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);});
于 2017-02-08T09:24:08.090 回答