【发布时间】:2019-03-19 16:11:49
【问题描述】:
我有两个关于 SSRS 性能的主要问题。我正在合并 10 个 SSRS 报告(10 个汇总 RDL 和 10 个详细 RDL,每个报告有约 4 个 tablix)。每个报告都会点击一个存储过程来获取结果。现在我们已将所有 tablix 合并到一个 RDL 中,并创建了一个新参数,用户可以在其中选择他想要打开的报告,并相应地通过可见性属性显示该 tablix。 现在就性能而言,我想了解什么更好。以下问题:
合并后,在一个 RDL 中,我们有 10 个数据集,涉及 10 个不同的过程。我是否应该将所有程序合并为一个程序,并根据用户使用 IF Else 条件从参数中选择报告来运行程序部分。 示例用户选择报告 A,然后在过程中 IF @report = A --Code for A-- ELSE IF @report = B --Code for B--。 如果这样做,我是否能够为 10 份报告中的每一份保留缓存?
对于 10 个详细信息 RDL,它们又拥有自己的 10 个不同的详细信息存储过程。将所有详细的 Tablix 合并为一个并根据用户从报告参数中选择的报告显示/隐藏 Tablix 是否是个好主意。 基本上,我将通过 Action 属性将报告名称作为参数传递,然后使用 IIF 条件显示/隐藏 tablixs。或者我应该为详细报告保留 10 个不同的 RDL。我有那个选项打开。什么对性能更好。
【问题讨论】:
-
选项2 不会阻止所有的SQL代码被执行,对吧?如果这是正确的,那么我想这取决于。即,这取决于您的 SQL Server 的大小/速度。由于如此复杂,我只想测试这两种情况。
-
关于详细 RDL 的问题 2。我有 10 个不同的数据集访问 10 个不同的存储过程。请告诉我,如果我将所有详细的 tablix 合并为一个,请保持数据集分开并根据用户选择的报告隐藏 tablix。无论 tablix 是否隐藏,所有详细数据集是否仍会同时运行?有什么更好的维护缓存。程序中具有 IF ELSE 条件的一个数据集 OR10 个不同的数据集
-
对,但您只是隐藏用户的结果,对吧?您仍在将结果返回到报表服务器,因此看起来这项工作是不必要的。
-
好的,所以我认为将 RDL 分开会更好。或者我可以将它们合并为一个,包括所有存储过程,并在存储过程中使用 IF ELSE 条件来运行代码部分。这只会运行特定报告的代码。有什么想法吗?
-
组合存储的过程似乎是合乎逻辑的,假设用户不会选择一个选项然后转身选择另一个选项并在等待数据返回客户端时感到沮丧。如果业务案例不会导致这种情况,那么我将合并 procs 或仅编写一个 wrapper 过程,该过程根据用户输入执行适当的过程。我认为无论哪种方式都可行
标签: sql-server reporting-services ssrs-2008 ssrs-2012 ssrs-tablix