SSIS – Unpivot con un Script

Muchas veces necesitamos invertir la posición de algunas filas y columnas de entrada para guardarlas en destino. Aclararé un poco más este asunto con un ejemplo, supongamos que tenemos los datos con la siguiente estructura:



Supongamos que por algún motivo necesitamos que esa estructura cambie y adopte la siguiente:



Lo que hemos hecho en la segunda tabla es crear una fila (Row) por cada columna de la primer tabla (excepto la columna ID), entonces por ejemplo, para la primer fila de la primer tabla tenemos 3 filas en la segunda tabla, una para cada columna. Las columnas de la segunda tabla representan lo siguiente:
ID: Código de Cliente, equivalente a la columna ID de la primera tabla.
Columna: indica el número de columna del dato puesto en la columna “Valor” en la primera tabla.
Valor: indica el valor de una determinada columna en la primera tabla.

Ahora…. Como podemos hacer esto en una package de SSIS???
Lo que debemos hacer es agregar en el Data Flow un componente Script de tipo Transformación, posteriormente vincularlo con el componente que le proporcione los datos de entrada y crear los Outputs que necesitamos de salida. Para comprender mejor el asunto, voy a aclarar que lo los Inputs que necesitamos son los campos listados en la primera tabla, mientras que los Outputs son los correspondientes a la segunda tabla. Posteriormente colocaremos el siguiente código dentro del Script:

'Fila para la Columna 1 = Columna Cliente
With Output0Buffer
.AddRow()
'ID es el OUTPUT para el Campo ID y Row.ID es el Input
.ID = Row.ID
.COLUMNA = 1
.VALOR = Row.Cliente
End With
'Fila para la Columna 2 = Columna Categoria
With Output0Buffer
.AddRow()
'ID es el OUTPUT para el Campo ID y Row.ID es el Input
.ID = Row.ID
.COLUMNA = 2
.VALOR = Row.Categoria
End With
'Fila para la Columna 3 = Columna Deuda
With Output0Buffer
.AddRow()
'ID es el OUTPUT para el Campo ID y Row.ID es el Input
.ID = Row.ID
.COLUMNA = 3
.VALOR = Row.Deuda
End With

Damos Ok en el script y lo unimos al destino que corresponda para que se produzca la importaci[on de los datos al destino deseado.
Eso es todo, es más simple de lo que parece… y ya saben, si tienen dudas solo escriban comentarios. Ciao!

0 comentarios: