jueves, noviembre 19, 2009

Multi-Values en Parametros de Reporting Services

Eso pues, a modo de experiencia personal, ya que me costo un mundo crear un multi value en los parametros con SQL Server Bussiness Intelligence Developmen Studio (SSBIDB). Primero, la razón de porque usar esto y no directamente las herrmiantas ofrecidas por Sharepoin para crear el reporte, es porque la interface es muy limitada.
El problema en mi caso para no usar Reporting Service de Sharepoin fue que necesitaba crear un reporte sacando datos de varias tablas de una BD, y esta herramienta solo me deja sacar datos de una sola usando el DataSource que es el que se conecta a la BD y luego crear el modelo asociado a este DataSource.Alli entonces use SSBIDB, donde si se puede hacer esto, el problema fue solicionar que los parametros de busqueda fueran multi-values porque buscando a llamando a SanGoogle toda la información que encontre no se acomodaba a lo que buscaba.

Bueno, partamos, primero hay que abrir la aplicacion SSBIDB, ya saben inicio->Progrmas->Microsoft SQL 2005->SSBIDB.



Lugo vamos y creamos un nuevo proyecto, Report Server Project Wizard.








Si necesitan de un id y pass para ingresar a la BD en el botón Credential se abre otra ventana donde se ingresan estos datos. Por defecto estan las de Windows.Luego crean el Data Set de conección a la BD, le ponen un nombre, eligen el tipo (SQL SERVER) y escriben el Connection String, si no cachan como, tal como me paso a mi, recomiendo esta página. Donde hay muchos tips para crear estas conecciones.


En la siguiente ventana deben escribir la consulta SQL para traer los datos que se van a mostrar, en este punto ya hay algo IMPORTANTE... En el Where hay que escribir lo siguiente:


WHERE (nom1 IN (@nom1) AND nom2 IN(@nom2) AND nom3 IN(@nom3) AND nom4 IN(@nom4) AND nom5 IN(@nom5) AND nom6 IN(@nom6))

Estos son los parámetros que se utilizaran para la consulta nom1, nom2, etc. He aquí uno de los problemas que tuve, porque en la mayoría de las páginas que encontré la información en vez de IN usaban el = .

Luego en la siguiente pantalla eligen que quieren usar, una matriz o una tabla, yo elegí tabla. En la siguiente eligen las tablas que quieren mostrar y las agregan en "DETAILS>". Despues eligen como quieren que se vea. En la siguiente ya se puede dar "Finish"

Ahora se puede ver que hay 3 tags, Data, Layout y Preview. En Layout vemos el diseño de la tabla que creamos, el orden en el que aparecerán, ahí se puede cambiar, agregar o quitar columnas. Para agregar botón derecho, agregar columna, y después se arrastra desde la izquierda la columna de la BD que se quiere agregar.

Si se fijan en el DataSource que hemos creado, aprietan el botón ... que se ve en la imagen más abajo, y se van a la pestaña Parámetros, vemos que cada uno de los parámetros creados tiene un "Value" igual a "=Parameters!(nombreParametro).Value Esto no hay que cambiarlo, ya que en muchas páginas se dice que hay que poner lo siguiente en el "Value":
Join(Parameters!(nombreParametro).Value,","). ESTO NO SIRVE, no funciona después el filtrado por parámetros.

Ya después de esta aclaración sigamos...


En Data vemos el Query que hemos creado en el Data Set. Aquí esta el otro paso IMPORTANTE...

Seleccionamos, como se ve en la imagen un "New DataSet", crearemos uno para cada uno de los parámetros (sí, esos a los que les pusimos @ en el dataSet creado antes).

En la ventana siguiente tienen la opción de cambiarle el nombre (recomiendo usar los mismos nombres que en los parámetros para no perderse). Se deja el mismo DataSource que ya hemos creado, y en Query se escribe lo siguiente (dependiendo del parámetro elegido).

SELECT DISTINCT nombreColumna FROM nombreTabla ORDER BY nombreColumna

Distinct para que no nos repita los datos en el parámetro y Order By es para que los ordene!

Esto es necesario, repito, para cada uno de los parámetros que hemos creado.

Ahora si quieren que en la tabla se agrupe por algún campo, deben hacer lo siguiente. Como se ve en la imagen, con la Pestaña "Layout" seleccionada elegir la fila de los "Values" en la tabla, luego en la sección de Propiedades en la parte inferior Izquierda, buscar "Data" y en "Grouping" apretar el botón ...

En la siguiente ventana ponen un grupo para el gripo y en Expresión ponen el
=Field!nombreAagrupar.Value y dan OK


Ya estamos casi casi listos, falta un pequeño detalle, que pasa cuando queremos elegir más de un elemento del parámetro? O todos.... ? Para esto tenemos que ir al menu Report-->Report Parameters (en el menu superior, entre Format y Tools).



Aquí les aparece una ventana como la de la imagen (No tan rayada con rojo ;-) ). Eligen en la izquierda un parámetro creado. Eligen el tipo de dato en Data type, en Promp ponen el nombre que aparecera definiendo al parámetro. Si quieren que acepte más de un dato en el filtro marcar Multi-Values. Luego tienen que macar from query para saber de donde sacará los datos el filtro, eligen el DataSource correspondiente, y el campo, como creamos uno DataSource para cada parámetro solo nos aparecerá uno por cada uno. Finalmente en Defaul Values es para que el filtro esté pre-llenado, elegimos tambien el DataSource y el campo.

Y ESTAMOS LISTOS.....


Ahora le damos a la PESTAÑA "PREVIEW" y listo, tendremos una pantalla como la que sigue.