我正在尝试通过 SSRS 设计一个Matrix
报表,以聚合另一列(即透视表)中一系列动态值的列。此数据包含超过 1300 万行,因此它是一个大型数据集。
通过 T-SQL 对此数据进行PIVOT
时,它能够在大约 ~1 分钟内聚合所有这些行,但是当让 SSRS 通过Matrix
报表为我执行透视时,我在尝试在电脑上预览报表时出现内存不足异常。
返回数据集本身的查询并不复杂,它非常简单:
SELECT
ID
,Test_Ref
,Data_issue_indicator
FROM MyTable
我们尝试对Test_Ref
中的值进行Data_issue_indicator
的总和(可以是1
或0
),其中有一个动态的值范围要聚合;换句话说,我们不能使用标准的Tablix
报告,因为如果将新的Test_Ref
值引入数据集,列的数量可以随时增加。
我使用的是Visual Studio Enterprise 2019,我的PC是Windows 10,i7-8850H,内存为16GB。
有没有解决这个问题的建议?
使用 SSRS 时,建议多次使用数据集时获取更多数据一次。 但是,当您拥有更大的数据集时,需要在您想要实现的目标与是否需要所有数据之间进行权衡。
因此,在这种情况下,我建议使用一个过程来限制您抓取到报告的数据量。
我经历过这种情况,我不得不做同样的事情,因为不是查询超时,而是加载到报表中的大量数据使报表失败。
如果您有 SQL 服务器探查器,您将看到 SQL 已执行并完成,但报表呈现超时。
两个想法,假设您计划将报表部署到具有处理此问题的内存的服务器,并且出于某种原因,您更愿意在报表服务器而不是 SQL 服务器上执行此处理:
-
不要在 Visual Studio 中测试电脑上的功能。 设计报表,将其部署到报表服务器,然后在那里对其进行测试以查看其是否有效。
-
在PC上进行测试时,强制它以某种方式使用更小的数据集:一个刚好足够大的数据集来验证枢轴矩阵是否正常工作,但又足够小,以至于PC的内存可以处理它。
或者更好的是,先做选项 2,然后做选项 1。