我有一个包含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
答案 0 :(得分:1)
您无法以这种方式处理存储过程中SSRS的多值参数(使用IN()子句)。该方法仅在SSRS中生成SQL查询时有效(不调用存储过程)。
要在存储过程中使用多值参数,必须对存储过程中的参数调用split函数,并加入它以获取结果。
this question中的答案更详细地说明了这一点。