En reporting services existe la propiedad de multivalues la cual nos permite que dado un conjunto de valores disponibles sean estos desde un procedure o desde una lista ingresada manualmente escoger uno o mas de esos valores, el problema esta cuando tratamos de enviar esos valores a un procedure debido a que reporting services ve a los elementos seleccionados como los elementos de un arreglo y ese tipo de parametros por lo poco que he leido no es posible utilizarlos pero eso no nos libra de tener que encontrar una forma de sacarle provecho a esta util propiedad, una posible forma (la cual he probado y me ha funcionado) es la siguiente:
Si el valor que se va a comparar en la base es un string
al parametro <param1> le asignamos como valor por defecto una expresion la cual será ="'" & Join(Parameters!<param2>.Value, "','") & "'" esto hace que <param1> tenga por valor los elementos elegidos de <param2> en forma la forma 'valor0','valor1','valor3' en el caso de que se seleccionaran los valores 0, 1 y 3 si fueran otros los indices estos valores variarian
si fuera un grupo de enteros seria
=& Join(Parameters!<param2>.Value, "','")
con esto nos damos cuenta que podemos formar el valor a comparar en el procedure esto es
select ....
from ....
where parametro in (<param1>)
ahora debemos modificar el procedure para que el valor del parametro de entrada sea un varchar de longitud n porque n eso depende de la cantidad maxima de datos a seleccionarse recordemos que se han añadido , y 's si queremos ganar unos cuantos characteres podriamos añadir las 's en el procedure
además recordemos que el valor que es utilizado por el in no puede ser un string formateado porque en ese caso el lo tomara como si fuera 1 unico valor; como resolver ese problema? utilizando una ejecucion dinamica
esto es exec(<query>) donde query es un string con un query valido en este caso un select
entonces nuestro procedure un select que sería ejecutado y ese conjunto de filas retornado al dataset del reporting services.
esto sería
create procedure SelectDinamicoParametroMultivalor
@parametroEntrada varchar(50)
as
begin
declare @select varchar(100), @from varchar(100), @where varchar(100);
set @select = '<select>'; --el select del query a ejecutar
set @from =' <from>'; -- el from
set @where = ' where <parametro> in (' + @parametroentrada + ')'; -- el where
exec (@select + @from + @where);
end;
Notese que deje un espacio en blando al iniciar el from y el where esto es debido a que al concatenar los string puede dar un mensaje de error y seria porque el from quedaria unido a ultimo valor del select y en el caso del where con el del from
Espero les sea de utilidad y si tienen otra forma de implementacion me agradaria que la compartan