SSRS - 矩阵报告的 OutOfMemory 异常

SSRS - OutOfMemory exception for Matrix report

我正在尝试通过 SSRS 设计一个 Matrix 报告,以针对另一列(即数据透视表)中的一系列动态值聚合一列。此数据包含超过 1300 万行,因此它是一个大型数据集。

当通过 T-SQL 对此数据执行 PIVOT 时,它能够在大约 1 分钟内聚合所有这些行,但是当让 SSRS 通过Matrix 报告,当我尝试在我的 PC 上预览报告时遇到 OutOfMemory 异常。

返回数据集本身的查询并不复杂,很简单:

SELECT
    ID
    ,Test_Ref
    ,Data_issue_indicator
FROM MyTable

我们尝试对 Test_Ref 中的值求和 Data_issue_indicator(可以是 10),其中是要聚合的值的动态范围;换句话说,我们不能使用标准的 Tablix 报告,因为如果在数据集中引入新的 Test_Ref 值,列的数量随时可能增加。

我正在使用 Visual Studio Enterprise 2019,我的电脑是 Windows 10,i7-8850H,16GB 内存。

是否有解决此问题的建议?

两个想法,假设您计划将报表部署到有内存处理此问题的服务器,并且您更愿意在报表服务器而不是 SQL 上执行此处理服务器出于某种原因:

  1. 不要在 Visual Studio 中测试您 PC 上的功能。设计报表,将其部署到您的报表服务器,然后在那里测试它是否有效。

  2. 在您的 PC 上进行测试时,以某种方式强制它使用小得多的数据集:一个刚好足以验证旋转矩阵是否有效,但又小到您的 PC 内存可以处理它的数据集。

或者更好的是,执行选项 2,然后执行选项 1。

使用SSRS时,建议多抓取一次数据,以防多次使用数据集。但是当您拥有更大的数据集时,需要在您想要实现的目标与您是否需要所有数据之间进行权衡。

所以在这种情况下,我建议使用一个程序来限制您抓取到报告的数据量。

我经历过这种情况,我也不得不这样做,因为超时的不是查询,而是加载到报告中的大量数据导致报告失败。

如果您有 SQL 服务器分析器,您会看到 SQL 已执行并完成,但报告呈现超时。