我一直在试图解决这个问题,并希望这里的人可能已经解决了同样的问题。
我的 SSRS 报告有一些动态设置的默认参数。发生的情况是,当第一次打开报告页面(这些报告从自定义 Web 应用程序运行)时,“主”报告存储过程被触发一次,只是为了获取这 2-3 个动态参数,即使没有其他数据来自此时会显示该 sproc(如果这看起来有点矫枉过正,那就是……我从设计它们的前同事那里继承了这些报告)。因此,由于有 2-3 个动态参数,因此报表旨在从查询中获取这些默认值。因此,当用户最终运行报表时,主存储过程(为简单起见,简称为“report_getReportData”)在呈现到页面之前已经运行了大约 3-4 次。
我所做的是,在 report_getReportData 存储过程中,在执行我的 select * 语句以显示所有报表数据之前,我创建了一个物理表来保存 2-3 个默认值,并在报表中创建了一个新数据集来运行一个只从这个物理表中选择值的新 sproc,没有别的,所以结果是 getReportData sproc 只触发一次,而我的新 sproc,让我们称之为“report_getTwoParameters”为每个参数触发一次,但时间成本可以忽略不计,因为只是做一个快速选择语句。
这解决了整体报表性能的问题,但由于现在涉及到一个物理表(report_getReportData 从临时表返回数据),我们面临多个用户无法同时运行此报表的问题。所以我想我的帖子有两个问题:
1)有没有办法解决让报告必须运行report_getReportData只是为了设置2-3个参数的主要问题 - 比如可能将从sproc返回的结果集“多播”到几个不同的数据集或什么?
2)如果我们决定保留使用物理表的解决方案,是否有人对此有任何替代解决方案,以便用户能够同时运行报告但避免碰到同一个物理表?