domingo, 24 de junio de 2012

SSIS Cargando archivos Excel

 

Siempre hay quienes comienzan a hacer algo nuevo y este post está dedicado a estas personas, en concreto a Claudio. Un compañero de los foros de Integration Services en castellano que se preguntaba como podía conseguir resolver su proceso mediante paquetes ETL de SSIS.

 

Escenario

el asunto es que yo tengo una consulta, esta consulta me trae unos datos los cuales los tengo que poner en un excel con la fecha de la generacion y enviarlo a una persona, la idea es crear un paquete que permita mediante algun proceso crear el archivo excel con el nombre del dia(ejemplo ventas_19-06-2012.xls), mas que nada seria para automatizar un par de tareas que debo realizar diariamente

 

Una Solución

Por que siempre hay varios caminos para llegar al mismo sitio. Para este caso he sugerido utilizar una plantilla de libro Excel como destino de datos, que vamos a copiar con una tarea File System para generar un nuevo archivo con la fecha de la consulta que será el destino de los datos obtenidos mediante la misma (consulta)

Vamos con los detalles…

Es nuestro paquete ETL añadimos un DataFlow, con un origen OLEDB source con la consulta que vamos a realizar contra el origen de datos. Para esta entrada utilizaré la base de datos AdventureWorks para realizar esta consulta:

SELECT [ProductID],[Name],[ProductNumber],[MakeFlag],[FinishedGoodsFlag],[Color]
FROM [Production].[Product]

En el archivo Excel que vamos a utilizar como plantilla creamos las columnas necesarias para mapear con los datos de origen:

image

Hay que tener clara la versión de Excel a utilizar, dependiendo de esto podremos utilizar el componente Excel Destination (hasta Excel 2007) o nos veremos obligados a utilizar OLEDB Destination en caso de Excel 2010. En este caso la versión es 2007.

Añadimos un componente Excel Destination. Conectamos la salida de datos del OLEDB Source a la entrada del destino Excel y editamos este componente para establecer el archivo destino y el mapeo de datos.

Creamos una nueva conexión que apuntamos al archivo plantilla:

image

Una vez finalizada la conexión realizamos el mapeo de datos entre las columnas del origen de datos y el archivo Excel:

image

Y finalizamos la edición del componente de destino. Hasta ahora fácil, no hemos hecho nada especial para generar archivos dinámicamente en función de la fecha pero hemos conseguido establecer los metadatos que necesitan los componentes en el flujo de datos.

En las propiedades de este componente (en el panel de propiedades, F4 teniendo seleccionado el componente Excel Destination), hay que cambiar la propiedad ValidateExternalMetadata a false. Es importante este cambio para poder ejecutar el paquete sin que exista previamente el archivo sobre el que vamos a volcar los datos:

image

El siguiente paso es cambiar algunas propiedades en el administrador de conexión del archivo Excel, en concreto vamos a poner la atención en Delay Validation, que vamos a establecer a True. Observar la propiedad ExcelFilePath, que modificaremos más adelante mediante una variable que proporcionará el nombre de fichero para cada ejecución a través de Expressions:

image

Nos volvemos a la pestaña de ControlFlow y creamos una variable para generar el nombre del archivo en cada ejecución. Para esto hay que asegurarse de que tenemos seleccionado el lienzo y no el componente DataFlow que añadimos antes, para que el ámbito de esta variable sea del alcance de todo el paquete. Para acceder al panel de variables puede hacer clic derecho sobre el lienzo y seleccionar la opción variables. Crearemos la variable vNombreArchivo de tipo string y sin asignación de valor:

image

Seleccionamos la variable y pulsamos F4 para mostrar su panel de propiedades. En la propiedad EvaluateAsExpression seleccionamos el valor True y en Expressions vamos a añadir una expresión que conformará el valor de esta variable

image

En el editor de expresiones generamos una para construir un nombre de fichero en función de la fecha de proceso. Yo he utilizado la siguiente:

"C:\\Consultas2Excel\\Consulta_" + (DT_STR,20,1252) ( (DT_I8) (YEAR( @[System::StartTime] )) * 100000000 + MONTH(@[System::StartTime])*1000000 + DAY(@[System::StartTime]) * 10000 + datepart("hh",@[System::StartTime] ) * 100 + datepart("mi",@[System::StartTime] )   ) + ".xlsx"

image


Ya tenemos un nombre dinámico para nuestro fichero destino. Ahora solo falta que ese fichero exista y lo vamos a conseguir con una tarea File System Task que añadimos al ControlFlow y establecemos restricciones de precedencia, conectando la salida de ejecución correcta de File System Task con el DataFlow que ya teníamos:


image


Editamos la tarea File System para modificar sus propiedades. Lo primero es asegurar que la operación es Copy File. Establecemos los siguientes valores por propiedad






















PropiedadValor
OperationCopy File
IsDestinationPathVariableTrue
OverwriteDestination(evaluar la necesidad de sobreescribir el archivo de destino si existe en la operación de copia)
IsSourcePathVariableFalse
SourceConnection(Nueva conexión a nuestro archivo plantilla) c:\PlantillaDestino


image


En el panel de conexiones, buscamos la conexión a Excel que utiliza nuestro destino en el DataFlow y accedemos a las propiedades, en concreto Expressions y añadimos una expresión para la propiedad ExcelFilePath. Escribimos @[User::vNombreArchivo]


image


Y listo!


Ya tenemos un paquete que lee datos de una consulta y lo vuelca en un fichero Excel nuevo que genera en cada ejecución:








imageimage
 image


 


Conclusión


Como también vimos en la entrada SSIS Dinamizando propiedades de componentes, el uso de variables facilita en gran medida operaciones de asignación dinámica de propiedades de componentes, tareas, DataFlow, ControlFlow… Además, podríamos utilizar configuraciones de paquetes (en package deployment model) o parámetros y entornos (project deployment model) para exponer estas variables y asignarles valor previa ejecución del paquete.


Si tienes cualquier duda o quieres obtener el paquete ETL  desarrollado durante esta entrada, deja un comentario.

martes, 19 de junio de 2012

Microsoft anuncia su tablet Surface para Windows 8

 

Hace varias semanas que Microsoft anunció que iban a hacer un evento en Los Angeles en el que darían nuevas, una noticia muy importante, pero no aclararon nada más.

Hace unos minutos, Steve Ballmer ha comenzado haciendo un repaso histórico de como Microsoft ha apostado por el software a lo largo de su existencia, pero recordando que ha creado el hardware necesario cuando no existía para aportar la funcionalidad que no encontraba en los productos existentes rememorando el primer ratón (mice) diseñado para Windows 1

“Much like Windows 1 needed the mouse, we wanted to give Windows 8 it's own hardware”

Fuente http://live.theverge.com/microsoft-live-blog-tablet-announcement/

Pues bien, para soportar la funcionalidad que se le puede exigir a Windows 8 han anunciado, atención, el desarrollo de una nueva tablet llamada Surface

 

Recordarán que hace unos años Microsoft diseñó la Surface, una mesa interactiva que inspiró al director de la película Minority Report para la realización de algunas escenas, en las que Tom mueve imágenes con las manos enguantadas en un dispositivo que le permitía trasladarlas, ampliarlas, etc…

http://mashable.com/2011/12/23/microsoft-surface-2-2/

La tablet Surface hereda la tecnología desarrollada para su hermana mayor. La tablet es un dispositivo de unas 1.5 libras, menos de 14 milímetros y ensamblada en una carcasa de magnesio ultra compacta y ultra rígida (VaporMG case) con una pantalla de 10.6 pulgadas que hará que los movimientos realizados sobre ella resulten naturales. Vendrá provista de cámara, un lápiz digital que permitirá escribir directamente en la pantalla, conexión USB2, conector magnético para acoplar cubiertas que a la vez hacen de teclado con trackpad, etc..

Surface tablet Surface tablet 2
surface tablet 3 surface gallery_5_large

 

Existirán versiones con chips ARM e INTEL:

 

image

Página oficial de la tablet Surface:

http://www.microsoft.com/surface/en/us/default.aspx

Nota oficial de prensa:

http://www.microsoft.com/en-us/news/press/2012/jun12/06-18announce.aspx

Video promocional (descarga):

http://t.co/xM3jtdkX

 

Yo quiero una Win8 Pro!!

Risa 

¿Dónde se compra, que precio tiene? Habrá que esperar, pero me da en la nariz que estará disponible en el lanzamiento de Windows 8. Ya veremos

miércoles, 13 de junio de 2012

SSIS Capturar duplicados en el flujo de datos

duplicate_rows

 

 

Introducción

Es muy común encontrarnos con escenarios en los que tenemos que consumir orígenes de datos que contienen duplicados, tanto por columnas clave como por filas completas. Integration Services ofrece componentes que permite eliminar los duplicados (componente Sort), pero en esta entrada vamos a centrarnos en un diseño que nos permita capturar las filas duplicadas por columnas clave para su posterior tratamiento, utilizando la menor cantidad de código posible (componente Script).


Este artículo ha sido publicado en el blog BICorner de SolidQ. Pulsa aquí para continuar leyendo.

jueves, 7 de junio de 2012

Bye bye Summit 2012 Madrid #SQSummit

 

Personalmente cada año que pasa desde que tengo la oportunidad de acudir a este evento, tanto como asistente o como ponente, pienso que la experiencia profesional vivida alcanza cotas que serán difíciles de superar, pero como digo me pasa cada año. No son solo lo temas técnicos que se tratan y de los que por supuesto no dejo de aprender, sino las reorientaciones conceptuales a las que me veo sometido en muchas ocasiones por los que son ahora mis compañeros, los debates abiertos que se generan durante las charlas, la inestimable aportación y puntos de vista que tienen los asistentes al trasladar los contenidos expuestos a su casuística particular y que muchas veces se encuentran identificadas más personas.

Desde aquí quiero agradeceros a todos los que habéis estado allí. A los asistentes por vuestra participación y aportación, un valiosísimo punto de vista que nos mantiene “en línea”. A mis compañeros por su calidad y generosidad técnica y personal. Incluso a la organización externa por esos cafés calientes en cada break que nos mantuvieron confortablemente activos tanto dentro como fuera de las salas.

Me vuelvo a casa con la cabeza caliente de ideas y de ganas de que llegue el próximo Sonrisa

Entradas populares