martes, 25 de junio de 2013

Parámetros múltiples con SSRS

Recientemente he tenido que preparar unos informes en Reporting Services que requerían seleccionar un parámetro múltiple, similar al que se puede ver en la imagen a continuación:

En principio, lo lógico es considerar realizar una variación en la consulta que alimenta este reporte, en el sentido de añadir un IN a continuación de la clausula WHERE:

Pues bien, cuando utilizamos como fuente un procedimiento almacenado es necesario realizar algunos pasos más para que podamos tener nuestro filtro múltiple.

En primer lugar hay que generar una función en T-SQL que nos permita separar las distintas partes de una cadena que será lo que enviemos como parámetro:


CREATE FUNCTION [dbo].[FnSplit]
(
--@List nvarchar(2000),
--@SplitOn nvarchar(5)
@List nvarchar(MAX),
@SplitOn nvarchar(MAX)
)
RETURNS @RtnValue table
(
Id int identity(1,1),
Value nvarchar(100)
)
AS
BEGIN
While (Charindex(@SplitOn,@List)>0)
Begin
Insert Into @RtnValue (value)
Select
Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
End

Insert Into @RtnValue (Value)
Select Value = ltrim(rtrim(@List))
Return
END
Una vez creada esta función:

necesitaremos modificar la clausula WHERE de nuestra consulta principal:



 Como podéis ver reemplazamos la sentencia:

--BANCO_MAEB IN (@BANCO_MAEB)

 por:

(BANCO_MAEB) collate database_default IN(SELECT Value FROM dbo.FnSplit(@BANCO_MAEB,','))

 
Por último, debemos hacer algunos cambios en nuestros reportes:

Nos aseguramos que nuestro parámetro admite entradas múltiples:



En las propiedades de nuestro dataset principal configuramos la sección de parámetros, tal y como se muestra a continuación:


Como nuestro parámetro debe aceptar múltiples entradas lo configuramos haciendo uso de la función Join para vincular los parámetros múltiples separados con una coma:

=Join(Parameters!BANCO_MAEB.Value,",")


Y ya estaría. Parece un poco enrevesado pero en cuanto tengáis la función FnSplit creada, el resto es bastante sencillo.


Saludos.

José Antonio.

1 comentario:

  1. Jose gracias a ti pude realizar esto porque los demás foros no hablan de crear una función cuando tienes un procedimiento almacenado por otro lado tengo una consulta si tengo dos dataset como puedo tener en un textbox el field por que me sale error de agregacion

    ResponderEliminar