jueves, 15 de octubre de 2015

Slowly Changing Dimensions


Por Rut Almoguera 

                                           

En el post anterior definimos el concepto de “Surrogate Key”, y mencionamos cuáles son las ventajas de su uso.  En esta ocasión vamos a explicar el concepto de “Slowly Changing Dimension”,  para lo cual es necesario tener claro el concepto de “Surrogate Key”.

“Slowly Changing Dimensions” o “Dimensiones de cambio lento en el tiempo” (o también SCD por sus siglas en inglés) se refiere a que las dimensiones NO permanecen estáticas en el tiempo, sino que sus atributos sufren cambios, y con frecuencia se desea guardar un registro de esos cambios.

En un DataWarehouse es necesario aplicar el concepto de SCD para hacer seguimiento de los cambios en los atributos de dimensión, con el fin de informar el estado correcto de los datos en un momento determinado. Es por esto que el SCD se define por cada atributo de la dimensión.

Para poder comprender este concepto, veamos primero los tres primeros tipos de SCD que existen:

Tipo 0 (SCD0): El atributo o columna de la dimensión no permite que se le hagan actualizaciones. Por ejemplo, imaginemos que tenemos una dimensión CLIENTES, en donde tenemos un campo que representa el número de seguridad social de la persona (número de CI en Venezuela, o el SSN en USA), dicho atributo “jamás” debería poder ser cambiado, por lo tanto se definiría como SCD0.

Tipo 1(SCD1): El atributo o columna si puede cambiar en el tiempo, pero solo se desea conocer el último valor, sin guardar un histórico de sus cambios.  Un ejemplo de este comportamiento, podría ser el número telefónico de un cliente, en donde es poco probable que se requiera conocer los números anteriores para contactarlo.

Tipo 2(SCD2): El atributo o columna en la dimensión puede sufrir cambios y se desea guardar un histórico de dichos cambios. Pues sus cambios son relevantes para el análisis del negocio.  Por ejemplo imaginemos el precio de un producto, del cual se desea conocer su valor en un momento determinado del tiempo y no solo saber el precio actual.  Es en este caso, diremos que dicho atributo tiene SCD2.

Para comprender como influye el uso de los “Surrogate Key” en la definición de los SCD de los atributos de la dimensión, veamos cuales son las técnicas que se utilizan para implementarlos:

Implementación SCD0:  En este caso, simplemente cualquier cambio que sufra el campo en la tabla origen, será ignorado por el ETL, y no se actualizara en la dimensión.

Implementacion SCD1:  En este caso, simplemente se sobrescribe el valor viejo del atributo con el valor nuevo (UPDATE).

Implementacion SCD2:  En este caso, dado que se desea guardar la historia, el registro anterior en la dimensión debe ser marcado como “NO VIGENTE” (bien sea con un campo extra de vigencia o con dos campos para la fechas de inicio de vigencia del registro y otro para la fecha de fin del registro), e insertar un registro nuevo en la tabla de la dimensión, usando la misma clave del negocio, pero con un “Surrogate Key” nuevo, marcando dicho registro como “VIGENTE”.

Para comprender mejor este caso vamos a imaginarnos que tenemos una dimensión de los productos (DIM_PRODUCTO), la cual tiene el precio de los productos, y que se desea guardar el cambio histórico del precio de los mismos.

La tabla de PRODUCTOS el día 2 de agosto del 2015 tiene los siguientes registros:

Codigo_Producto
Descripcion
Precio
SANDDAMLUJ0012
Sandalia de Dama de Fiesta
20.000,00
ZAPCABACUER0018
Zapato Caballero Cuero Cerrados
35.000,00
ZAPDAMTAC0039
Zapato Dama Tacón Corrido
15.000,00

En este caso, como se tendrá que manejar SCD2 para el campo Precio, se agregaron en la dimensión  dos campos que representan la fecha del inicio de vigencia del registro y la fecha de fin de vigencia del registro, quedando la tabla DIM_PRODUCTO como se muestra a continuación:

SK_Producto
Codigo_Producto
Descripcion
Precio
Fecha_Inicio_Vigencia
Fecha_Fin_Vigencia
1
SANDDAMLUJ0012
Sandalia de Dama de Fiesta
20.000,00
2015-08-02
2
ZAPCABACUER0018
Zapato Caballero Cuero Cerrados
35.000,00
2015-08-02
3
ZAPDAMTAC0039
Zapato Dama Tacón Corrido
15.000,00
2015-08-02

Como se puede observar en el ejemplo, el campo Fecha_Fin_Vigencia está vacío, pues todos los precios están vigentes. Pero ahora asumamos que el precio del último artículo (ZAPDAMTAC0039 ) sube a 25.000,00 el día 17 de agosto del 2015.  En la tabla PRODUCTO en el origen tendríamos lo siguiente:

Codigo_Producto
Descripcion
Precio
SANDDAMLUJ0012
Sandalia de Dama de Fiesta
20.000,00
ZAPCABACUER0018
Zapato Caballero Cuero Cerrados
35.000,00
ZAPDAMTAC0039
Zapato Dama Tacón Corrido
25.000,00

Ahora en la tabla de la dimensión, como ha cambiado el precio de un producto, se debe agregar una fila nueva, pues el campo precio es SCD2.  La tabla de la dimensión quedara como se muestra a continuación:

SK_Producto
Codigo_Producto
Descripcion
Precio
Fecha_Inicio_Vigencia
Fecha_Fin_Vigencia
1
SANDDAMLUJ0012
Sandalia de Dama de Fiesta
20.000,00
2015-08-02
2
ZAPCABACUER0018
Zapato Caballero Cuero Cerrados
35.000,00
2015-08-02
3
ZAPDAMTAC0039
Zapato Dama Tacón Corrido
15.000,00
2015-08-02
2015-08-17
4
ZAPDAMTAC0039
Zapato Dama Tacón Corrido
25.000,00
2015-08-17

Como podemos notar, se ha insertado una fila nueva con un “Surrogate Key” nuevo (4), con el nuevo precio, y la fila anterior (que tiene el “Surrogate Key” 3) ha sido pasada a NO VIGENTE, pues se lleno el campo “Fecha_Fin_De_Vigencia” con la fecha del 17 de agosto del 2015, que fue cuando dicho registro termino su vigencia.

Es importante destacar que las herramientas de ETL registran correctamente los hechos (FACTS) tomando en cuenta solamente los registros vigentes acorde a la fecha del evento.

No hay comentarios:

Publicar un comentario