我对SSRS的性能有两个主要问题。我正在合并10个SSRS报告(10个摘要RDL和10个详细RDL,每个报告具有〜4个Tablix)。每个报告都命中一个存储过程以获取结果。现在,我们将所有Tablix合并到一个RDL中,并创建了一个新参数,用户可以在其中选择要打开的报告,并通过可见性属性显示Tablix。 现在,在性能方面,我想了解什么更好。以下问题:
合并后,在一个RDL中,我们有10个数据集达到10个不同的过程。我是否应该将所有过程合并为一个,并根据用户使用IF Else条件从参数中选择报告来运行过程的该部分。 示例用户选择报告A,然后在过程IF @report = A-A-代码– ELSE IF @report = B-B-代码。 如果这样做,我将能够为10个报告中的每一个维护高速缓存。吗?
对于10个详细RDL,它们又具有自己的10个不同的详细存储过程。将所有详细信息Tablix合并为一个并根据用户从报表参数中选择的报表显示/隐藏Tablix是一个好主意。 基本上,我将通过Action属性将报表名称作为参数传递,然后使用IIF条件显示/隐藏表格。或者我应该保留10个不同的RDL以获得详细报告。我有那个选择。哪些会带来更好的性能。
答案 0 :(得分:1)
我要做的是-假设10个RDL正在运行10个不同的存储过程,请为每个存储过程分配一个隐藏参数。让我们称之为@report_number
(例如)。因此,对于报告一,在存储过程中添加一个where子句以包含and @report_number = 1
,这从技术上应在看到传递了另一个数字后立即停止运行存储过程(对于报告2说2)。等等。
@report_number是在单独的数据集中分配的。
例如
报告1-值= 1
报告2-值= 2
。
。
。
报告10-值= 10
因此,当用户运行报告1时,@ report_number的值1将传递到该数据集。其余数据集不应运行与之关联的过程,因为它们在where位置将没有期望值条款。
希望如此。