Reporting Services, Listados y Ordenaciones

Esta es la segunda parte de la serie sobre construcción de informes en Reporting Services 2008 de Microsoft SQL y que inicie con este artículo, y va a ser mejor que le eches una ojeada porque lo voy a utilizar como base de continuación.

Ahora voy a ir un pasito más adelante y voy a mostraros cómo lo hago para poder ordenar los resultados en tiempo de ejecución, incluyendo los parámetros en el propio informe para que, seleccionando en un combo, que decida el usuario como lo quiere obtener.

Origen de datos compartido


Ya que voy a crear un nuevo informe llamado ListadoOrdenados.rdl, ha llegado el momento de dejar de utilizar un origen de datos por cada informe y crear uno nuevo que pueda ser compartido por este nuevo informe, el anterior y los posteriores que irán llegando según avance los capítulos de esta serie.

Para ello en el Explorador de soluciones selecciono el directorio de Orígenes de datos compartidos, pulso el botón derecho y en el menú contextual le indico que añada uno nuevo. Así se me abre la ventana de configuración, en donde le pongo el nombre y añado la cadena de conexión; igual que si fuera un dataSource local pero que voy a poder compartir con el resto del proyecto. Más adelante hablare de lo que implica en el despliegue del informe.

Un nuevo informe

Ahora añado un nuevo informe al proyecto, pero voy a crearlo por medio de copy&paste, ya que no voy a volver a repetir lo que he realizado en el capítulo anterior. Ahora vamos con los cambios. Lo primero es irme a la ventana de Datos de informe y seleccionar propiedades del origen de datos llamado DataSource1 para que se me abra la ventana en donde voy a realizar las modificaciones. Aquí le voy a cambiar el tipo de conexión de Incrustada a Usar referencia de origen de datos compartido. En el combo voy a elegir DataSourceCompartido, que es el origen de datos que he dado de alta en el epígrafe anterior de este artículo. Y pulso aceptar.

Me voy a Agregar un nuevo conjunto de datos con el objetivo de crear una fuente de datos para el combo en donde el usuario va a poder seleccionar el orden en que quiere obtener el listado.

Conjunto de datos de orden


En la ventana le introduzco un nombre al DataSet, en este caso le he puesto Orden, y le indico que va a ser un conjunto de datos insertado en el informe. Así le puedo indicar cuál es la fuente de datos, que la he configurado más arriba, e introducir la consulta SQL de la que voy a obtener los registros de ordenación.

Aquí voy a utilizar un pequeño truco, que es sacar los índices de la propia tabla Cesta para no tener que liarme mucho al recuperar un listado de índices. Como ves, estoy recuperando un listado de pares (clave, valor) para poder ordenar por Artículo o por Fecha.

Por último y para dejar listo este DataSet de ordenación, actualizo los campos. Dejando que el propio editor de informes inserte los dos que voy a devolver.

Parámetro para el combo


Ahora toca dar de alta el parámetro del informe que voy a utilizar para que me muestre un combo con la lista de campos por los cuales puedo ordenarlo. Para ello botón derecho, menú contextual y añadir parámetro. Con lo cual veo la ventana de propiedades en donde lo primero que hago es ponerle un nombre tal cual Orden y una etiqueta que se me va a ver por delante del combo tal como Campo de ordenación:, o algo así.

Seguidamente pulso la pestaña de Valores disponibles y selecciono el Obtener valores de una consulta para poder configurar el conjunto de datos, el campo de valor y el campo de etiqueta del parámetro. En la pestaña de Valor predeterminado selecciono que obtenga los valores a través de una consulta al conjunto de datos Orden, con el valor del campo Id_orden.

Y, finalmente, edito el DataSet1 para añadirle el código que permite ordenar de acuerdo al valor del parámetro @orden


Select id, articulo, fecha from cesta
order by
   case when @orden = 1 then articulo end,
   case when @orden = 2 then fecha end

Obteniendo como resultado de todas estas operaciones un informe que me devuelve un listado de resultados que puedo ordenar por sus campos de forma dinámica en el propio informe.

Espero que haya sido de utilidad

Más información | MSDN Tutoriales de Reporting Services

Portada de Genbeta