Denormalización: Informatica PowerCenter

En entradas anteriores se expuso cómo llevar a cabo una normalización en Informatica PowerCenter. El objetivo de este artículo es el proceso inverso, realizar una denormalización mediante el objeto Aggregator Transformation de PowerCenter.

Aggregator

El aggregator es una transformación que permite realizar sobre un set de datos, distintas operaciones que requieren su agregación. Ejemplos de estas funciones son COUNT, AVG, FIRST, LAST y MIN, entre otros. Las propiedades más importantes de este objeto PowerCenter son:

Ports (In, Out): Entendemos como puerto, cualquier campo mapeado al objeto, tanto de entrada como de salida
Group By: Activado en aquellos campos que forman parte de la clave de agregación
Datatype: Cuando se crean los puertos, se les debe asignar el tipo de dato y precisión que corresponde

Propiedades

De acuerdo a la imagen anterior:

  1. Nombre de la transformación
  2. Nombre del campo creado
  3. Tipo de dato del campo creado
  4. Permite activar el campo como clave en la agregación
  5. Crear un nuevo campo

 

La operación de denormalización tiene sentido cuando queremos evitar redundancia en los datos o queremos representarlos de manera agregada, por ejemplo. De esta manera, se facilita también la explotación de los datos por las herramientas reporting.

En la siguiente imagen vemos como ejemplo un set de datos y su resultado al realizar una denormalización por la clave VENDEDOR:

Para realizar correctamente esta operación, es necesario ordenar el flujo de datos previamente a la agregación. Los datos han de ordenarse por los mismos campos que serán clave de agregación, es decir, propiedad Group By activa. Esto lo conseguimos insertando en nuestro mapping un objeto Sorter Transformation antes del aggregator, activando la propiedad Key en dichos campos.

Una vez tenemos nuestro Sorter Transformation, colocamos el Aggregator Transformation y arrastramos los campos que deseamos pasen por la transformación para después modificar sus propiedades:

Según el ejemplo de datos previo, tendremos como Key en la ordenación el campo VENDEDOR, al cual habilitaremos la opción Group By en el aggregator. Los otros dos campos (SEMANA, MONTO) los pondremos como puertos de entrada:

Ahora tenemos todo preparado para realizar la denormalización, así que creamos cuatro campos nuevos (cuatro semanas) con el mismo tipo que MONTO y en cada uno añadiremos el cálculo:

FIRST(MONTO, SEMANA = i)

Lo que logramos así, es generar un único registro con cuatro columnas para cada VENDEDOR, cada una de las cuales con el MONTO asociado a cada SEMANA (1, 2, 3 o 4).

Al final, solo tendremos que mapear los campos de salida a nuestro Target, quedando nuestro Mapping de la siguiente forma:

En posteriores entradas seguiremos abordando más tips para el desarrollo de ETLs.