Más de una vez nos hemos encontrado en la situación de tener que unpivotar una tabla, teniendo así que recurrir o bien al componente “Unpivot” de SSIS o incluso a tener que guardar los datos en tabla y realizar posteriormente una lectura de esta misma utilizando T-SQL para unpivotarla, con los problemas que ambas soluciones nos puedan conllevar con un gran volumen de datos.

Dentro del ejemplo que queremos mostrar, lo primero que deberemos hacer es ver la estructura de la tabla y su contenido:

– Estructura: tendremos una tabla que contendrá cuatro campos

UNPIVOT “SINCRONO”

Por un lado tendremos el NIF del ciente, y por otro tres columnas que nos indican las líneas de negocio de los tres últimos meses asociadas a ese cliente.

– Contenido: para este ejemplo solamente tendremos una línea para que la visualización de los datos sea lo más entendible posible.

SELECT [NIFCliente]
,[LineaNegocio_M1]
,[LineaNegocio_M2]
,[LineaNegocio_M3]
FROM [dbo].[LineasDeNegocio]

UNPIVOT “SINCRONO”

Una vez vista la estructura y contenido de las tablas, deberemos entender el problema y la solución. El problema surge en querer unpivotar las columnas de la tabla que nos indican las líneas de negocio respecto del cliente, y la solución la veremos sobre un paquete de SSIS donde no utilizaremos el componente UnPivot.

Comenzaremos dentro de un “Data Flow” con un “Ole DB Source” para leer los datos de la tabla (en nuestro caso en SQL Server 2008), estos datos los replicaremos mediante un “MultiCast” en tres buffers distintos para manejar las tres líneas de negocio mediante “Derived Column”, que posteriormente uniremos con el componente “Union All” de una manera un tanto peculiar que luego explicaremos más a fondo.

Esta sería la estructura de nuestro “Data Flow”:

UNPIVOT “SINCRONO”

Veamos un poco más detenidamente la función que cumplen los tres “Derived Column” y el “Union All” en la construcción del “Unpivot”.

  • Derived Column: en cada uno de los tres generaremos una columna derivada llamada IdLineaNegocio que contendrá los valores “M1”,”M2” y “M3” para que podamos identificar el mes al que corresponde cada línea de negocio asociadas a un cliente.
    • Línea de negocio M1:
      UNPIVOT “SINCRONO”
    • Línea de negocio M2:
      UNPIVOT “SINCRONO”
    • Línea de negocio M3:
      UNPIVOT “SINCRONO”
  • Union All: aquí no deberemos conservar los tres outputs que nos pondría este componente tal y como lo entiende por la entrada de datos que tiene, deberemos borrar las tres salidas referentes a las líneas de negocio:
    UNPIVOT “SINCRONO”

Y crear solamente una única salida para las líneas de negocio que sin embargo contedría los tres valores de entrada, quedando la estructura interna del componente como en la siguiente figura:

UNPIVOT “SINCRONO”

Una vez hecho todo esto, ya tendríamos unpivotada nuestra tabla inicial:

UNPIVOT “SINCRONO”

Espero que sirva de ayuda.

 

0 Shares:
Deja una respuesta

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

You May Also Like

Un paseo por Azure ML Services 

Azure ML y sus recursos han expandido enormemente las posibilidades para los desarrolladores de Machine Learning y los Científicos de Datos para obtener datos, analizarlos, entrenar modelos y publicarlos. Acompañame en éste artículo para conocer los elementos básicos y saber cómo puedes aprovechar la potencia de Azure para tus desarrollos ML.

PowerApprízate

En un mundo que se mueve rápido, la capacidad de reacción ante la toma de decisiones es primordial. Te enseñaremos a llevar tus datos allá donde vayas, visualizarlos como necesites y tomar el control. Para ello PowerApps permite visualizarlos como necesites y tomar el control. Para ello PowerApps permite integrar la suite de aplicaciones de Microsoft, de una manera ágil e intuitiva.