En ocasiones podemos querer ejecutar un informe de reporting tras una carga de SSIS y dejarlo en una carpeta compartida o quizá enviarlo por correo sin crear una suscripción de reporting. En este post vamos a proponer una posible solución haciendo uso de SSIS y del Report Server Web Service.

Lo primero que necesitamos es desplegar nuestro informe en el servidor de reporting. En nuestro caso hemos creado un sencillo informe que se conecta a la base de datos “AdventureWorks2014” y que únicamente recibe un parámetro “Country”.

Ejecutar un informe de reporting desde SSIS
Informe desplegado

A continuación, necesitamos crear el paquete SSIS que generará el informe y lo almacenará en la ruta que decidamos. Para realizar lo que queremos nuestro paquete necesitará un “Script Task”.

Ejecutar un informe de reporting desde SSIS
Script Task

Sobre este paquete definiremos una serie de variables que necesitaremos utilizar en nuestra tarea para generar el informe:

Destination: es la ruta donde queremos que nuestro paquete deje el informe generado.

ReportParameter: es el parámetro que como comentamos arriba necesita nuestro informe, el parámetro “Country”.

ReportPath: es la ruta en nuestro servidor de informes donde se encuentra desplegado nuestro informe.

Ejecutar un informe de reporting desde SSIS
Variables

En el menú general de nuestra nueva tarea “Genera Report” añadiremos las variables que acabamos de crear como “ReadOnlyVariables” y a continuación iremos a editar script.

Lo primero que tendremos que hacer será añadir la referencia al servicio web de reporting para poder utilizarlo posteriormente en nuestro código, para ello hacemos botón derecho sobre References seguido de Add Service Reference.

Ejecutar un informe de reporting desde SSIS
Añadimos la referencia al Web Service

En el siguiente menú vamos a Advanced…

Ejecutar un informe de reporting desde SSIS
Menú 1

Seguido de Add Web Reference…

Ejecutar un informe de reporting desde SSIS
Menú 2

Finalmente en este menú añadiremos la URL del endpoint que permite la ejecución de nuestro informe. En esta URL están expuestas las clases y métodos que incluye el servicio web del servidor de informes. El nombre del endpoint es “ReportExecution2005”, y es común tanto para el modo nativo como para el modo integrado de Sharepoint aunque las URL variarán ligeramente. En nuestro ejemplo el servidor está configurado en modo nativo.

También tenemos que añadir un nombre para nuestro servicio web, en nuestro caso “ReportServerService”.

Ejecutar un informe de reporting desde SSIS
Referencia al Web Service

Ahora que ya hemos añadido nuestra referencia al servicio Web de reporting, ya podemos usarlo para escribir nuestro código y así crear nuestro informe en la ruta que hayamos decidido.

Añadimos el siguiente código a la sección Main de nuestro “Genera Report”…

public void Main()
{
            try
            {
                //Create as many params as the report needs
                var param = new ParameterValue[1];
                param[0] = new ParameterValue();
                param[0].Name = "Country";
                param[0].Value = Dts.Variables["User::ReportParameter"].Value.ToString();

                //Prepare report to execute
                var executionService = new ReportExecutionService();
                executionService.Credentials = System.Net.CredentialCache.DefaultCredentials;

                var reportPath = Dts.Variables["User::ReportPath"].Value.ToString();

                executionService.LoadReport(reportPath, null);
                executionService.SetExecutionParameters(param, "es-es");

                //Rendering arguments
                var format = "EXCEL"; 
                string encoding;
                string mimeType;
                string extension;
                Warning[] warnings = null;
                string[] streamIDs = null;
                byte[] result = executionService.Render(format, null, out extension, out mimeType, out encoding, out warnings, out streamIDs);

                //Create File
                var createdReport = File.Create(Dts.Variables["User::Destination"].Value.ToString(), result.Length);
                createdReport.Write(result, 0, result.Length);
                createdReport.Flush();
                createdReport.Close();

                Dts.TaskResult = (int)ScriptResults.Success;
            }
            catch (Exception ex)
            {
                Dts.TaskResult = (int)ScriptResults.Failure;
            }
}

Por último ya podemos ejecutar nuestro paquete y ver que el informe se genera correctamente en la ruta deseada.

Ejecutar un informe de reporting desde SSIS
Resultado final

En conclusión como comentamos anteriormente esta solución nos permite por ejemplo depositar informes en una ruta compartida, o quizá por medio de otras tareas en nuestro paquete SSIS enviar los informes generados por correo electrónico…

0 Shares:
1 comment
  1. Hola! Estoy probando implementar tu solución pero estoy teniendo problemas con las credenciales.
    Cómo podría setear las credenciales?
    Al debuggear veo que las defaultCredential y defaultCredentialNetwork están vacías, pero no logro setearles.
    Gracias!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You May Also Like
Leer más

Excel Power BI – Herramientas y sistemas BI

En esta entrada dedicamos el espacio del blog a descubrir las capacidades que nos ofrece Power BI como plataforma de Selfservice BI (BI de Autoservicio). Presentamos Power Query, Power Pivot, Power View y Power Map. Por ultimo comentamos las opciones colaborativas que presenta esta plataforma.

Excel conectado a Analysis Services y la propiedad MDX Missing Member Mode

Encontramos muchas veces Excel como herramienta que los usuarios utilizan para pre cocinar datos, crearse informes, navegar cubos… En esta entrada voy a compartir una experiencia reciente, en un escenario en el que Excel es la aplicación cliente para mostrar datos de un cubo, algo bastante común. Lo que no resulta tan común es Excel muestre un error cuando puedo ejecutar la misma consulta MDX en SQL Server Management Studio.
Leer más

Autenticación Integrada en Azure Database con SSIS

En muchos escenarios se nos presenta la necesidad de usar autenticación integrada para acceder a los orígenes de datos necesarios para alimentar nuestro sistema analítico. Con el uso cada vez más extendido de Azure, como al menos parte de nuestra infraestructura, algunos de estos orígenes van a estar alojados en bases de datos en Azure. En este caso vamos hablar de un error real que hemos tenido en la configuración y uso de la autenticación integrada contra bases de datos Azure con SSIS.