SSRS 临时数据构建

SSRS Temp Data Building

我的问题是关于 SSRS 中数据集执行的顺序。关于我应该做什么,我有一些理论,但我想听听人们的意见。

情况: 我被要求看一份正在慢慢 运行ning 的报告。查看报告后,我注意到它多次重复使用了一个查询,其中的 where 子句略有不同。因此,我构建了一个索引良好的 temp table 和一个构建它的存储过程。一切正常,并且大大缩短了执行时间。

问题: 现在我有 15 个数据集,而不是执行原始的大型查询,而是

select *

在临时数据上有自己的 where 子句。

现在我需要确保存储过程 运行s 在执行所有数据集之前执行一次。我不想对每个查询或 table 添加检查以维护报告数据的 "Last refreshed" 日期时间。我应该注意到存储过程中有来自 SSRS 的参数。 我考虑的是:

A. 向报告中添加一个额外参数,该参数是最后一个参数,并取决于已填写的所有其他参数。这个参数只会调用存储过程,return一个"built date"显示在参数页。我看到的问题是,如果用户随后更改了第一个参数(这是一个日期),那么存储过程 运行 将再次使用新参数,或者它是否有可能永远不会重新执行,直到报告再次加载。

B. 将 SP 创建为数据集,然后对数据集进行排序,以便它们具有单次执行。我的问题是有序执行(可能,我不确定)会破坏报告执行数据集的并行性,这将总体上减慢报告速度。

有没有人遇到过这个问题?如果是这样,你选择了什么,或者有没有更好的选择?

如果我理解正确,每个数据集都是相同的 select 语句,在 where 子句中具有不同的值。如果是这样,您能否将 select 语句放在单个数据集中并使用合适的表达式填充报告,并传递合适的隐藏参数?

所以我改变了我将如何稍微处理这个问题的想法。 我测试了数据集排序,它确实降低了性能,因为它不仅一次执行单个数据集,而且每次都打开和关闭连接。

所以我所做的是改变了我的报告的工作方式,因为每个数据集对正在构建的临时 table 的查询略有不同,主要问题是在数据集开始之前订购构建。

所以我在单个存储过程中进行了一个大型联合查询,并将数据集名称添加为每一行的第一列。这允许我拥有一个数据集,在查询开始时构建临时 table 并在结束时丢弃它。 使用这种方法,我不得不对报告进行一些修改,将正常的字段映射替换为使用 =lookup 函数。

但除此之外,繁重的工作正在卸载到 SSRS 服务器上,我没有更多的排序问题!

卡兹