【问题标题】:SSRS - Can I use the output of one result set to create a second filtered result setSSRS - 我可以使用一个结果集的输出来创建第二个过滤结果集吗
【发布时间】:2018-03-09 08:32:59
【问题描述】:

场景: 我有一段相对厚实的 TSQL 代码,我需要运行它来填充 SSRS 报告参数。要删除值字段中的重复项,我必须运行一次代码以获得一组不同的值。然后,为了获取所有关联的键,我必须使用该值再次运行代码。这实在是太低效了。我希望能够运行一次查询,提示用户选择适当的变量,然后检索所有关联的值,而无需返回数据服务器。

例子:

CREATE TABLE #mydata(
ID INT,
EmployeeName VARCHAR(100),
Dept VARCHAR(100))

INSERT #mydata
VALUES(1,'Jones', 'HR'),
(2,'Smith', 'Finance'),
(3, 'Miller', 'Finance'),
(4, 'Macpherson','HR')

如果我想显示一个参数列表以便某人可以选择部门,然后检索相关的 ID,我目前正在这样做:

查询1A:

select distinct Dept from #mydata 

- 填充参数下拉列表,用户选择存储在@depts 参数中

查询2A:

select ID from #mydata where Dept = @depts.

(我需要 ID 本身,因为它构成了报表中其他级联逻辑的基础)

而我真正想做的是(其中一些显然是伪代码,试图呈现我正在尝试做的事情,请不要更正伪代码!)

查询1B:

select Dept, ID from #mydata

(存储在结果集 $1B 中)

查询2B:

select distinct Dept from $1B

(2B构成参数选择的基础;用户选择的参数存储在@depts中)

查询3B:

select ID from $1B where Dept = @depts

也可以选择

查询1C:

select Dept, ID, rank() over (partition by Dept order by ID) as ranked from #mydata

(存储在结果集 $1C 中)

查询2C: 结果集$1C 由ranked=1 过滤,构成参数选择的基础;用户选择的参数存储在@depts中。

查询3C:

select ID from $1B where Dept = @depts

这似乎是一件相当正常的事情,但我找不到任何描述这种需求或暗示它是 MS 迎合的东西的地方。在我放弃之前,我只是想检查一下其他人是否有这个问题并解决了它!

【问题讨论】:

  • 您可以在 tablix/matrix 级别过滤数据,如果这就是您的意思。如果要过滤更多,只需添加更多过滤器。您不会从 SSRS 中的数据集创建数据集。
  • 我想过滤定义可用参数值的结果集,而不是最终的 tablix。一旦我有了“ID”字段,该表将是我需要做的许多其他活动的最终结果

标签: sql-server reporting-services ssrs-2012


【解决方案1】:

您的要求是有道理的,我同意这是一个相对普遍的要求。无法从报表本身的一个查询中同时获取不同列表和完整数据集。不过有几种方法可以实现这一点。

第一种方法是使用数据库中的一个表来存储结果。例如,如果查询由于业务逻辑或聚合而需要很长时间,则使用计划的存储过程定期将结果保存在单独的表中可能是有意义的。然后,当您运行报表时,您只是在查询这个准备好的数据集。如果由于数据量太大,查询速度很慢,这可能没有多大帮助。

另一个类似的选择是在 SSRS 中使用共享数据集。这是您保存查询以在多个报告中使用的一种方式。一个不错的功能是可以按计划缓存数据。换句话说,该查询将定期自动运行。当您查看报告时,它不会再次访问数据库,它只是检索缓存的数据。

根据数据集的大小以及参数对其的影响,这实际上可能不会使报告速度更快。在报告运行之前可以完成多少工作以及缓存它需要多少存储空间之间总是需要权衡取舍。但根据你的问题,这当然是你应该尝试看看是否可以让它为你工作的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 2014-05-25
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2013-08-04
    相关资源
    最近更新 更多