En el post anterior
hablamos de los SCD 0,1 y 2, en esto post veremos algunos otros que en varios
casos son más complicados de implementar.
Además de los SCD 0, 1 y 2 que vimos en el post anterior, que
son las más comunes y fáciles de implementar, existen otras alternativas interesantes
sobre cómo se puede manejar el cambio en las dimensiones cuando se desea
registrar en el DWH dichos cambios. En
esta ocasión nos encargaremos de definir los tipos 3, 4 y 6, los cuales guardan
los cambios de las dimensiones, pero cada uno lo hace de una manera diferente.
Tipo 3(SCD3): En este caso, se desea guardar
la historia de los cambios, pero a diferencia del tipo 2, se guarda solamente
un número finito y predeterminado de cambios, y no se agrega un registro nuevo
en la tabla, sino que se tienen campos extra en la misma fila para guardar los
valores anteriores.
Usualmente se implementa el tipo
3 si tenemos la necesidad de guardar unos pocos cambios, como por ejemplo, las direcciones
de residencia de una persona, en donde podríamos tener tres campos dentro de la
tabla para guardar los últimos tres sitios en donde la persona ha vivido. En este caso, si la persona se vuelve a
mudar, la dirección más antigua se pierde y se guardan solamente las tres últimas.
Sin embargo, es importante
advertir que este método sube la complejidad del desarrollo del ETL, pero tiene
la ventaja de no aumentar el tamaño de la tabla de la dimensión, pues en
ocasiones ciertas tablas de dimensiones pueden ser demasiado grandes, como
suelen ser, por ejemplo, las tablas de
clientes en un banco internacional, y si se desea guardar la historia de los
cambios de algún atributo de la dimensión, se prefiere la complejidad antes que
incrementar el tamaño de la tabla, pues esto podría degradar el performance de
consulta al DWH.
Para ilustrar esto, , si tenemos
la dimensión producto, y queremos guardar el histórico de 2 cambios de precio, la tabla que tendríamos para dicha
dimensión seria como se muestra a continuación:
SK_Producto
|
Codigo_Producto
|
Descripcion
|
Precio_actual
|
Precio_anterior
|
1
|
SANDDAMLUJ0012
|
Sandalia
de Dama de Fiesta
|
20.000,00
|
|
2
|
ZAPCABACUER0018
|
Zapato
Caballero Cuero Cerrados
|
35.000,00
|
|
3
|
ZAPDAMTAC0039
|
Zapato
Dama Tacón Corrido
|
25.000,00
|
15.000,00
|
En dicha tabla podemos notar que
el producto ZAPDAMTAC0039
tiene un precio actual de 25.000,00 y que anteriormente su precio era de
15.000,00. Si ese mismo producto
cambiara ahora su precio a 30.000,00, la tabla se mostraría como sigue:
SK_Producto
|
Codigo_Producto
|
Descripcion
|
Precio_actual
|
Precio_anterior
|
1
|
SANDDAMLUJ0012
|
Sandalia
de Dama de Fiesta
|
20.000,00
|
|
2
|
ZAPCABACUER0018
|
Zapato
Caballero Cuero Cerrados
|
35.000,00
|
|
3
|
ZAPDAMTAC0039
|
Zapato
Dama Tacón Corrido
|
30.000,00
|
25.000,00
|
Nótese como en este caso, ya no tenemos manera de saber que
dicho producto en algún momento tuvo un precio de 15.000,00, pero seguimos
viendo los últimos dos cambios de precio sin agregar ninguna fila estra a la
tabla.
Tipo 4 (SCD 4): En este tipo, se guarda en la tabla original
el último valor, pero se tiene una mini tabla de dimensión que guarda la
historia de los cambios. Y en este caso,
la tabla Fact guarda referencia a las dos dimensiones, es decir a la que
tiene el valor actual y a la que tiene la historia de los cambios.
En la
dimensión que contiene el último valor se encuentran todos los campos de la
dimensión, pero en la que tiene el histórico de cambios solo están el SK de ese
registro, la clave natural y el campo que cambio, con otros dos campos de fecha
que indican el inicio y el fin de la vigencia de dicho valor. Con esto, se preserva la historia de cambios
y no se afecta el performance de consulta, sin embargo sube la complejidad de
los queries cuando se desea consultar la historia de los cambios de dicho
campo. Esto se suele usar cuando se
tiene un campo que es extremadamente volátil y que sufre cambios con una
frecuencia alta.
Siguiendo
con nuestro ejemplo de la tabla de productos, en donde el producto ZAPDAMTAC0039,
ha tenido tres precios distintos, que son 15.000, 25.000 y finalmente 30.000,
tendríamos dos tablas, una con los productos con su precio actual:
SK_Producto
|
Codigo_Producto
|
Descripcion
|
Precio
|
1
|
SANDDAMLUJ0012
|
Sandalia
de Dama de Fiesta
|
20.000,00
|
2
|
ZAPCABACUER0018
|
Zapato
Caballero Cuero Cerrados
|
35.000,00
|
5
|
ZAPDAMTAC0039
|
Zapato
Dama Tacón Corrido
|
30.000,00
|
Y
otra tabla con el histórico de los cambios:
SK_Producto
|
Codigo_Producto
|
Precio
|
Fecha_Inicio_Vigencia
|
Fecha_Fin_Vigencia
|
3
|
ZAPDAMTAC0039
|
15.000,00
|
2015-08-02
|
2015-08-17
|
4
|
ZAPDAMTAC0039
|
25.000,00
|
2015-08-17
|
2015-09-20
|
Nótese
como en la tabla del histórico de cambios solo están los campos pertinentes al
cambio de precios, y los otros campos de la dimensión, como la descripción del
producto no se encuentran en dicha tabla de históricos de precios.
Tipo 6 (SCD 6): Este
tipo es una combinación del tipo 1 el tipo 2.
Se implementa igual que el tipo 2, agregando una fila nueva por cada
cambio en el campo al que se le desea guardar el histórico de cambios, pero
además de esto, se tiene una columna extra en donde se guarda cual es el valor
actual.
Siguiendo con nuestro ejemplo de la dimensión
producto, en donde el producto
ZAPDAMTAC0039 ha tenido tres precios que son 15.000, 25.000
y 30.000, tendríamos la tabla de productos como sigue:
SK_Producto
|
Codigo_Producto
|
Descripcion
|
Precio
|
Fecha_Inicio_Vigencia
|
Fecha_Fin_Vigencia
|
Precio_actual
|
1
|
SANDDAMLUJ0012
|
Sandalia de
Dama de Fiesta
|
20.000,00
|
2015-08-02
|
20.000,00
|
|
2
|
ZAPCABACUER0018
|
Zapato
Caballero Cuero Cerrados
|
35.000,00
|
2015-08-02
|
35.000,00
|
|
3
|
ZAPDAMTAC0039
|
Zapato Dama
Tacón Corrido
|
15.000,00
|
2015-08-02
|
2015-08-17
|
30.000,00
|
4
|
ZAPDAMTAC0039
|
Zapato Dama
Tacón Corrido
|
25.000,00
|
2015-08-17
|
2015-09-20
|
30.000,00
|
5
|
ZAPDAMTAC0039
|
Zapato Dama
Tacón Corrido
|
30.000,00
|
2015-09-20
|
30.000,00
|
Como podemos observar en nuestro ejemplo, todas las
filas del producto ZAPDAMTAC0039, tienen un campo que indica cual es el valor
vigente para el precio, que en este caso es 30.000,00.
Como podemos ver existen muchas propuestas para
manejar el cambio en las dimensiones, cual elijamos implementar, dependerá del
caso particular que estemos modelando.
Well explained . Keep updating
ResponderEliminarCognos TM1 online Course Bangalore