将多值参数传递给另一个参数

时间:2015-04-27 14:39:48

标签: reporting-services

我有一个包含2个参数的报告 - 下拉建筑物(@buildings)和部门(@departments)的选择。选择建筑物后,部门列表仅限于该建筑物内的部门。

当报表参数未设置为单选时,这很简单 - 部门的查询参数设置为@building,因此上述工作正常。

但是,新要求是能够多选建筑物。我已将我的后台查询修改为使用Building in (@building)而不是@building = Building,并将主报告的建筑查询参数更改为=String.Join(Parameters!Building.Value, ","),以便所有内容都正确通过。

但是,将Department参数的Building查询参数更改为此选项会使Department下拉框显示为禁用。将参数设置为=Parameters!Building.Value会使列表生效,但只有在选择了单个建筑物时 - 它才会显示为空列表。

如何设置参数以将多值参数作为参数?

修改:完整详情

主报告查询:

create proc dbo.GetReport (
    @buildings varchar(max), @departments varchar(max)) as
select <columns>
from dbo.MainReport
where Building in (@buildings) and Department in (@departments)

主要报告参数设置:

@buildings: =Join(Parameters!Buildings.Value, ",")
@departments: =Join(Parameters!Departments.Value, ",")

建筑物参数查询:

create proc dbo.GetBuildings as
select <columns> from dbo.Buildings

部门参数查询:

create proc dbo.GetDepartments(
    @buildings varchar(max))
select <columns> from dbo.Departments 
where Building in (@buildings)

部门参数设置:

// This will make the Departments drop-down disabled
@buildings: =Join(Parameters!Buildings.Value, ",")
// So will this
@buildings: =Split(Join(Parameters!Buildings.Value, ","), ",")
// This will only work when only one building is selected
@buildings: =Parameters!Buildings.Value

1 个答案:

答案 0 :(得分:1)

您无法以这种方式处理存储过程中SSRS的多值参数(使用IN()子句)。该方法仅在SSRS中生成SQL查询时有效(不调用存储过程)。

要在存储过程中使用多值参数,必须对存储过程中的参数调用split函数,并加入它以获取结果。

this question中的答案更详细地说明了这一点。