Otra situación que seguramente más de uno de nosotros se ha encontrado es el tener que pivotar una tabla, bien en T-SQL o mediante el componente “Pivot” de SSIS, a veces, bien por volumen de datos o por que el origen es un transaccional, en el cual no podemos realizar esta operación, podríamos recurrir a la siguiente alternativa.
Igual que hicimos con el artículo del “Unpivot síncrono” vamos a mirar poco a poco en que consiste la solución para montar un pivot síncrono.
- Estructura: tendremos una tabla que contendrá tres campos:
Por un lado tendremos el NIF del cliente, por otro el campo “LineaNegocio” nos indica el mes de la línea de negocio para ese cliente y el campo ValorLN contendrá el nombre de dicha línea de negocio.
- Contenido: tendremos dos clientes, uno con tres líneas de negocio y otro con dos.
SELECT
[NIFCliente]
,[LineaNegocio]
,[ValorLN]
FROM [dbo].[LineasDeNegocio_Pivot]
Dicho esto, veremos como pivotar el contenido de esta tabla creando para ello una solución en SSIS.
En la siguiente imagen se muestra la estructura general del Data Flow que hemos implementado:
La primera consideración que deberemos de tener en cuenta es que deberemos de tener el origen ordenado por el campo que mantendremos para nuestra tabla final, en nuestro caso por el NIF, a continuación se muestra la obtención de los datos desde nuestro origen:
Veamos un poco más detenidamente las funciones que cumplen los distintos componentes en nuestro Data Flow:
- Derived Column: en el primer “Derived Column” (Division) implementaremos tres campos nuevos, tantos como distintas líneas de negocio podamos tener en nuestro origen, para nuestro ejemplo hemos considerado solamente tres líneas de negocio:
- Conditional Split: dividiremos el flujo de los datos según la Línea de negocio que estemos tratando en el registro que le llega como origen, generando por lo tanto tres flujos distintos (M1, M2 y M3):
- Merge Join
- Primer Join: en este “Merge Join” cruzaremos a nivel de NIF y con “Left Outer Join” los registros que llegan por los distintos flujos del “Conditional Split” (M1 y M2) y obtendremos solamente el NIF y las dos columnas que nos indican los distintos valores de las distintas líneas de negocio:
- Primer Join: en este “Merge Join” cruzaremos a nivel de NIF y con “Left Outer Join” los registros que llegan por los distintos flujos del “Conditional Split” (M1 y M2) y obtendremos solamente el NIF y las dos columnas que nos indican los distintos valores de las distintas líneas de negocio:
- Segundo Join: Cruzaremos los datos a nivel de NIF, por un lado el flujo procedente del “Primer Join” y por el otro el flujo M3 que proviene del “Conditional Split”:
Una vez dicho esto y llegados a este punto, obtendríamos 4 cuatro campos, por un lado el NIF y por el otro tres campos que indican el valor de la línea de negocio para cada uno de los meses (M1, M2 y M3):
Espero que sirva de ayuda.