26 de enero de 2015

SSRS

Que es Reporting Services...

SQL Server Reporting Services (SSRS) es una plataforma de informes basada en servidor que nos permite crear y gestionar una amplia variedad de diferentes tipos de informes, y los entregamos en una variedad de formatos.Podemos crear informes básicos que contienen tablas y gráficos, o visualizaciones de datos más complejos, utilizando diagramas, mapas y minigráficos. Nuestros informes pueden sacar sus datos de bases de datos SQL Server, sino también de otras bases de datos relacionales como Oracle, y otros tipos de fuentes de datos multidimensionales o basados ​​en XML, como SQL Server Analysis Services, Teradata, o Parallel Data Warehouse.

Podemos presentar nuestros informes terminados directamente desde el sitio web de Reporting Services, llamado el Administrador de informes , o los usuarios pueden ver directamente en su Web o de aplicaciones basadas en Windows. Los usuarios finales pueden ejecutar informes a petición o programarlos como suscripciones. También podemos instalar SSRS para que los informes se ejecutan desde SharePoint.


Configuración de Reporting Services...

En caso no hayas configurado el Reporting Services al momento de instalar el SQL Server Management Studio with Advanced Services tal como muesro en la imagen


Te tocara configurarlo desde el SQL Server Reporting Services Configuration Manager, primero verifiquemos que el servicio de Reporting Services este en ejecucion


Luego abrimos el SQL Server Reporting Services Configuration Manager, para ello debes abrir esta opción desde el menú inicio 


aceptamos...o para que no te aparezca esta ventana, abre el Configuration Manager de Reporting Services como Administrador


Se abre el cuadro de diálogo Conexión de configuración de Reporting Services para que seleccione la instancia del servidor de informes que desea configurar.

En Nombre del servidor, especifique el nombre del equipo en el que está instalada la instancia del servidor de informes. El nombre del equipo local aparece de forma predeterminada, pero puede escribir el nombre de una instancia de SQL Server remota si desea conectarse a un servidor de informes que esté instalado en un equipo remoto.

Si especifica un equipo remoto, haga clic en Buscar para establecer una conexión.

En Instancia del servidor de informes, seleccione la instancia de SQL Server Reporting Services que desee configurar. Solo las instancias del servidor de informes correspondientes a esta versión de SQL Server aparecen en la lista. No es posible configurar versiones anteriores de Reporting Services.nos aparece una ventana para conectarnos a nuestro servidor de base de datos. En ella indicamos el nombre del servidor y la instancia a la que nos conectaremos, especificamos y luego damos clic en Connect


La conexión se hará a la instancia seleccionada. En este caso, ésta es MSSQLSERVER o la instancia por defecto, luego en el Root del menú verificamos que el servicio esté ejecutándose con los datos que especificamos en la pantalla anterior


En caso de ser necesario especificamos las credenciales de conexión...


En esta ventana se especifica cuál es la dirección URL del servicio Web de publicar los informes y puede consumir a través de un navegador. Se especifica que es el directorio virtual (camino lógico que el sistema va a crear para acceder a los informes) aqui le indicamos el IP y puerto donde se va a utilizar el servicio. Es probable que el puerto 80 no esté disponible por algun servicio del IIS, por lo que es recomendable utilizar algun otro disponible (ej. 82). Seleccionamos el botón de Aplicar o Apply que está abajo a la derecha.


Antes de continuar, si doy click en la direccion URL que aparece en la parte inferior de la ventana, se abrirá el explorador y mostrara los reportes y Dataset que hemos creado en nuestra maquina como un directorio de archivos, en mi caso ya había agregado reportes y Dataset así que la vista del  Web Service URL configurado en la pantalla anterior es asi:


Se nos va a mostrar una pantalla donde le indicamos si se va a crear una nueva base de datos para reporting o se quiere conectar a una ya existente


procedemos con la opción “Report Manager URL”, la cual permitirá configurar el sitio web de administración de los reportes, aquí indicamos el nombre del directorio virtual donde van a estar nuestros reportes y seleccionamos Apply -- tenga en cuenta que hay dos enlaces diferentes, una para especificar el servicio web que muestra los informes como un directorio de archivos y otro es el Report Manager que le permite crear, editar, eliminar informes creados en Visual Studio o Report Builder.


La vista del Report Manager utilizando la configuración anterior queda así...ya tiene algunos elementos con los que he estado trabajando


en caso de ser necesario, puedes configurar el correo electrónico del servidor de informes. Reporting Services incluye una extensión de entrega por correo electrónico del servidor de informes que usa un protocolo simple de transferencia de correo (SMTP) para entregar informes o notificaciones de procesamiento de informes a un buzón electrónico.


Con estas opciones es suficiente para terminar la configuración del Reporting Services y comenzar a crear reportes.


Crear reportes desde Visual Studio...

Antes de crear un informe primero debe aprender a crear un proyecto. Para crear un proyecto debe tener instalado SQL Server Data Tools (SSDT). SSDT ofrece un entorno de desarrollo y diseño para la construcción de la integración de SQL Server (SSIS), Analysis Services de SQL Server (SSAS) y SQL Server Reporting Services (SSRS) proyectos.

En esta entrada se utilizara VS2013 y SQL Server 2014, el primer paso es descargar Microsoft SQL Server Data Tools de este link: https://www.microsoft.com/en-us/download/details.aspx?id=42313


SQL Server Data Tools se considera como la siguiente evolución de Visual Studio basada en herramientas de base de datos que proporciona a los desarrolladores una herramienta única para apoyar las necesidades del desarrollo de bases de datos...algo así como JDeveloper con Oracle.

La herramienta para el desarrollo de proyectos de Business Intelligence en Visual Studio 2008 y versiones anteriores la conocíamos como Business Intelligence Development Studio (BIDS), ahora para Visual Studio 2010, 2012 y 2013 estará bajo el nombre de SQL Server Data Tools, sumándose a este nuevo conjunto de herramientas para el desarrollo de base de datos.

Al crear un proyecto utilizando SSDT, se crea automáticamente una solución. Básicamente, una solución es un contenedor de proyectos. En otras palabras, puede crear una solución que contiene varios proyectos. Estos proyectos incluyen SSAS, SSIS y proyectos SSRS. El proyecto contiene elementos específicos para el tipo de proyecto que cree. Por ejemplo, cuando se crea un proyecto de SSRS, contendrá fuentes de datos, conjuntos de datos e informes.


Lo básico de SSRS...

Una vez instalado el SSDT tendremos una nueva opción en el Visual Studio, en mi caso utilizo el VS2013 asi que al abrir el Visual Studio y escoger crear un nuevo proyecto se tendrán estas nuevas opciones disponibles asi que vamos a utilizar VS2012 Business Intelligence Reporting Services Template ...para avanzar con este post agregamos desde ya el proyecto de reportes que vamos a utilizar con nombre ReporteBlog


al dar click en OK, la primera diferencia que se nota con respecto a un proyecto de Winforms o web es el Solution Explorer, aqui tenemos tres carpetas: Shared Data Sources, Shared Datasets y Reports


  • Orígenes de datos compartidos y Embedded

De manera general, Data Source(fuente de datos) es la información de conexión que el informe utiliza para conectarse a la base de datos. En el desarrollo de SSRS usted tiene dos opciones al crear una fuente de datos(Shared or Embedded) ya sea agregar un Data Source especifico en un informe especifico o para que sea un recurso compartido utilizable por muchos informes, asi pues,  la principal diferencia entre los dos es que la fuente compartida puede ser utilizado por todos los informes en el proyecto, mientras que la fuente Embedded sólo puede ser utilizado por el informe en el que se crea.en la imagen superior, la carpeta Shared Data Sources almacenara las fuentes de datos que van a estar disponibles para todos los reportes que se vayan a crear dentro de la solución.

Como recomendacion, se deberian utilizar siempre de ser posible Shared Data Sources, para ejemplificar mi recomendacion veamos el siguiente escenario: si se produce un cambio que afecta a una fuente de datos especifica (cambio de nombre del servidor, nombre de base de datos, inicio de sesión credenciales, etc ...) esto supondrá que alguien tendrá que actualizar las configuraciones dentro de cada informe. Así que si usted crea 50 informes que incluyen la misma fuente Embedded, usted tendría que abrir cada informe y actualizar el origen de datos afectada. Por otro lado, si los mismos informes utilizan una fuente compartido, sólo tendría que hacerse en un solo lugar el cambio. Además de lo anterior, las fuentes compartidas son publicables y son necesarios para conjuntos de datos de Acciones.

Así como hay dos opciones para definir la fuente de datos(Shared or Embedded) para un reporte también hay dos opciones para crear una fuente de datos, la creas tu siguiendo los pasos para crear una nueva conexión a la base de datos o utilizas una conexión existente.


Lo que se debe tener en cuenta es que al utilizar un Data Source compartido y agregarlo a tu proyecto de reportes, al momento de ejecutar la vista de tu reporte puedes obtener el siguiente error:

Error: Cannot deploy the report because the shared data source '/Data Sources/DataSource1' that the report references does not exist on the report server.

Para evitarlo, antes de utilizar el Data Source en tu reporte debes hacer Deploy sobre este, para eso hay que dar click derecho sobre el Data Source que acabas de agregar y seleccionar Deploy


  • Datasets compartidos y Embedded
Ahora vamos con los Datasets, estos se entienden como una consulta sobre una fuente de datos para obtener sólo los registros que necesita para un informe de SSRS,

Al igual que con una fuente de datos, puede crear un conjunto de datos incrustado o compartido. La ventaja principal de crear un conjunto de datos compartido es que puede ser utilizado por todos los informes en un proyecto de Servicios de Información dado. Además, se puede implementar un conjunto de datos compartido de manera que se expone a los usuarios finales a través de SharePoint o el Administrador de informes.

Sin importar el tipo de conjunto de datos, compartida o incorporado, el concepto sigue siendo el mismo. Un conjunto de datos especifica los datos que se utilizará a partir de un origen de datos. El conjunto de datos incluye una consulta que ofrece una lista de campos que se pueden utilizar en su informe. Si usted planea en la creación de un conjunto de datos compartido debe crear primero una fuente de datos compartida.

Se puede especificar un conjunto de datos especifico para un informe pero como recomendación, se deberian crear Datasets compartidos para los informes de nuestro proyecto, así cualquier cambio solo se realiza en un Dataset y no sobre N-Datasets en N-Reportes.

Los datasets puedes crearlos desde cero o bien puedes utilizar Datasets de otros proyectos y ademas hay otra opcion: puedes utilizar Shared Data Sources o crear tu propia conexión.


De nuevo, se debe tener en cuenta es que al utilizar un Dataset compartido (que ha sido seleccionado y añadido desde otro proyecto o bien que lo hayas importado desde una ubicación en tu servidor) y agregarlo a tu proyecto de reportes, antes de utilizarlo en tu reporte debes dar click derecho sobre el Dataset y seleccionar Deploy


Creando un Reporte...

Lo primero sera agregar un Shared Data Source al proyecto que creamos, para esto damos click derecho en la carpeta Shared Data Sources y seleccionamos Agregar Nuevo Data Source

y obtendremos la siguiente ventana donde especificaremos los datos de la conexión, de momento le colocamos un nombre, le especificamos el motor de base de datos a utilizar y presionamos sobre el botón Edit para configurar la cadena de conexión


de ser necesario, en la pestaña Credenciales al lado izquierdo podemos especificar el usuario y password que requiera la conexión a la base de datos


Así queda el Solution Explorer con el Data Source que acabamos de crear


Pasemos a crear el Dataset para nuestro reporte, damos click derecho sobre la carpeta Shared Dataset y escogemos la opción Add New Dataset


en esta ventana especificamos un nombre para el Dataset, tambien se especifica el Data Source a utilizar, por ultimo y muy importante, podemos especificar si vamos a crear por nuestra cuenta la consulta


Si ya conoces a exactitud la consulta sobre la base de datos que necesitas para tu reporte puedes escribirla en el espacio en blanco, sino puedes utilizar un asistente, para activarlo presiona el boton Query Designer... al final de la ventana anterior

y tendremos la siguiente ventana, puedes agregar tablas desde la opción que aparece en un ovalo en la siguiente imagen


En la ventana anterior creamos nuestra consulta hacia la base de datos, en mi caso utilizare una consulta tan sencilla como: select * from Employee, pero ustedes pueden hacerla tan compleja como su reporte la requiera.


Ahora debemos crear nuestro reporte, para ello click derecho sobre la carpeta Reports y seleccionar Agregar un nuevo item


y en esta ventana seleccionar Report y de nombre ReportBlog, luego presionamos el botón Add


Vamos a obtener la siguiente pantalla en la que diseñaremos el reporte


desde la pestaña Report Data debemos especificar el Data Source y el Dataset que utilizara el reporte, bien podemos crear uno especifico para nuestro reporte o utilizar un Shared Data Source y un Shared Dataset


al seleccionar Add Data Source obtendremos esta pantalla


Ahora toca agregar el Dataset que utilizaremos en nuestro reporte, damos click derecho en la carpeta Datasets y seleccionamos Add Dataset... 


así como al agregar el Data Source aquí también tendremos dos opciones, crear un Dataset especifico para nuestro reporte o utilizar un Shared Dataset, para este ejemplo seleccionaremos el Dataset creado en la carpeta Shared Dataset


Al terminar de especificar el Data Source y el Dataset para nuestro reporte, el Report Data tendra la siguiente apariencia


Ahora vamos a la pestaña Toolbox y agregamos un Table al reporte


En mi caso voy a presentar 5 campos así que agregare 2 columnas mas, ahora nos posicionamos en cada columna y veremos que el asistente de SSRS nos presenta la lista de campos resultado del Dataset que especificamos para el reporte, asi que especifiquemos los datos en cada columna



para ver el resultado de nuestro reporte, damos click en la pestaña Preview



Pero con los pasos anteriores solo hemos creado un reporte, debemos subirlo al servidor, para ello damos click derecho en nuestro proyecto y seleccionamos propiedades, en esta ventana se debe especificar el Target Server URL


En caso no recuerdes cual es tu Web Service URL puedes abrir la configuración de Reporting Services y buscar en la pestaña Web Service URL, la dirección que aparece en la parte inferior es la que debes especificar en las propiedades de tu proyecto de reportes 


Y al presionar F5 se abrirá el explorador web y te mostrara el proyecto de reportes creeado como un directorio de archivos, esta es la vista del 


Igualmente el proyecto de reportes recién creado esta disponible en el Report Manager


en caso no recuerdes cual es tu direccion para el Report Manager, puedes abrir el Manager de configuración de Reporting Services y dar click en la pestaña Report Manager URL




Cargando Reporte en WinForms...

Para mostrar un reporte creado en SSRS lo primero que necesitamos es la URL del web server al que se ha cargado el reporte, al ingresar a esa URL vamos a tener los reportes creados presentados como un directorio de archivos, en este ejemplo utilizaremos la carpeta ReporteBlog


y el reporte que queremos mostrar es ReportBlog


Si le doy click a ReportBlog se muestra el siguiente reporte -muy sencillo- en el explorador web, este reporte lo vamos a mostrar en un WinForms utilizando C#


Creamos un nuevo proyecto de escritorio y creamos un nuevo formulario, a este le agregamos desde el ToolBox un elemento ReportViewer


y para que quede mejor seleccionamos que se ubique en todo el espacio del formulario


Ahora en el evento Load del formulario colocamos el siguiente código, para este ejemplo muestro mi ReportServerUrl y ReportPath pero tu debes especificar los tuyos, teniendo en cuenta que el ReportPath lo puedes obtener desde la url del report server.

private void Form1_Load(object sender, EventArgs e){
 this.reportViewer1.ServerReport.ReportServerUrl =
                            new System.Uri("http://lingonet/ReportServer");
 this.reportViewer1.ServerReport.ReportPath =@"/ReporteBlog/ReportBlog";
 reportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Remote;
 this.reportViewer1.RefreshReport();
          }

El resultado final: