【发布时间】:2016-03-25 03:00:21
【问题描述】:
在我的 SSRS 报告中,我已经有一个数据集 A(通过运行 SQL 脚本),参数 P1 使用 A 中的所有记录。现在我想获取 A 的一个子集,并使用另一个参数 P2 来引用它。
是否可以同时获取整个数据集和数据集的子集,并且只运行一次脚本?
我想创建共享数据集是一种可能的方式,但数据集 A 仅供本地使用,不应共享。
【问题讨论】:
标签: reporting-services ssrs-2008-r2
在我的 SSRS 报告中,我已经有一个数据集 A(通过运行 SQL 脚本),参数 P1 使用 A 中的所有记录。现在我想获取 A 的一个子集,并使用另一个参数 P2 来引用它。
是否可以同时获取整个数据集和数据集的子集,并且只运行一次脚本?
我想创建共享数据集是一种可能的方式,但数据集 A 仅供本地使用,不应共享。
【问题讨论】:
标签: reporting-services ssrs-2008-r2
简答
不,这是不可能的。
替代方案
您可以修改查询,使其返回一列用于填充 P1 参数,另一列用于填充 P2。示例:
select 'Foo' P1, 'Foo' P2
union all
select 'Bar', 'Bar'
union all
select 'Foobar', null
返回:
P1 P2
Foo Foo
Bar Bar
Foobar null
使用P1 列填充P1 参数,使用P2 填充P2 参数。
注意子集列(在我的例子中是 P2)的值小于 P1, 如果您的参数设置为允许
NULL值,它将显示 NULL 选择列表中的选项,否则不会。
此解决方案可能对您有用,但如果您只需要在我不确定时运行数据集,我认为 SSRS 将为每个参数运行查询,即使两个参数都是从一个数据集中填充的。
如果这有帮助,请告诉我。
【讨论】:
我实现这一目标的一种方法是分组。如果数据集 A 已经包含您想要的所有内容,您可以使用标准 P2 = TRUE 对该数据集进行分组。这会将数据集 A 分成两组——一组 P2 条件为真,另一组 P2 条件为假。
例如,考虑一个包含两列的数据集,Label 和 Amount。我想将我的数据子集化到Label = "LabelNameOne"。我用表达式=Fields!Label.Value = "LabelNameOne" 围绕我的数据集创建了一个组,然后它会自动为我创建一个子集。假设您希望它在运行时过滤用户选择的参数,您只需在分组表达式中加入该参数:=Fields!Label.Value = Parameters!P2.Value。
【讨论】: