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