【发布时间】: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