Slowly Changing Dimension y SQL Azure DWH 2

En el Post pasado (http://blog.iwco.co/2018/09/20/slowly-changing-dimension-y-sql-azure-dwh) John J Bocachica nos habla sobre como crear una dimensión lentamente cambiante en Azure data warehouse, utilizando un intervalo entre fechas para los registros (Fecha Inicio Vigencia y Fecha Fin Vigencia), mediante esta solución el indicador que nos marca cual es el registro vigente corresponde al que no tiene una fecha de fin vigencia. Para explicarlo mejor lo veremos con el siguiente ejemplo:

alt

En esta dimensión de clientes podemos identificar que el cliente David Burgos vivió en la calle 678C del 3/21/2018 hasta el 8/4/2018, y actualmente se encuentra viviendo en la Calle 111C desde el 8/4/2018, puesto que este registro no tiene fecha final de vigencia.

Manejar la dimensión lentamente cambiante (SCD) de esta manera nos brinda mas información de análisis puesto que nos ofrece el periodo que estuvo vigente el registro y podría llegar a obtenerse información de utilidad para su negocio a la hora de tomar decisiones.

Sin embargo no es esta la única manera de manejar una SCD, en este post veremos otra posibilidad en la cual únicamente le colocaremos al registro un indicador (Flag) de si es vigente (Ultimo) o no (Viejo) de la siguiente manera:

alt

Pare esto utilizaremos la misma ETL relacionada en el post anterior:

Control Flow: alt

Data Flow: alt

Como podemos ver la ETL es completamente igual a la del anterior post, el único cambio que tendremos sera a nivel metodológico de manejo de las filas en la dimensión.

De la misma manera utilizaremos el elemento LookUp para comparar las filas existentes en la dimensión con las de la fuente actualizada a través de su BK y poder aislar los registros completamente nuevos en (LookUp No Match Output), y los ya existentes (LookUp Match Output).

La diferencia con la metodología anterior se encuentra a la hora de insertar en las filas nuevas las columnas Flag y Fecha (elemento "Agregar Fecha y Flag" en la ETL), y lo que realizaremos de la siguiente manera:

alt

En este ingresaremos una columna nueva la cual sera el Flag donde especificaremos que este nuevo registro es el "Ultimo", y tendremos que ingresar una fecha y hora del momento de ingresar el registro esto lo necesitaremos posteriormente para realizar el cambio de los registros viejos a "Viejo".

Una vez ejecutado el data flow que inserta los registros nuevos y que cambiaron, debemos ejecutar un script que actualice el flag de los registros anteriores que quedaron inválidos o viejos y para esto utilizamos el componente "Execute SQL Task" de la siguiente manera:

alt

Ejecutando el siguiente Script:

UPDATE [Dim_SCD_Test] SET Flag = 'Viejo' FROM [dbo].[ValidiosDimSCDTest] WHERE [ValidiosDimSCDTest].BK_Real = [Dim_SCD_Test].BK_Real AND [ValidiosDimSCDTest].Fecha > [Dim_SCD_Test].Fecha AND [Dim_SCD_Test].Flag = 'Ultimo'

Nota aclaratoria: Note que el script anterior utiliza ta tabla ValidosDimSCDTest, este tabla corresponde a una vista de de la dimensión [dbo].[DimSCDTest], Creada de la siguiente manera:

CREATE view [dbo].[ValidiosDimSCDTest] as select * from [dbo].[Dim_SCD_Test] where [Flag] = 'Ultimo' GO

Esta misma vista debe ser la que utilicemos en el elemento look up.

Finalmente nuestra dimensión siempre que se ejecute el paquete queda actualizada de la siguiente manera:

alt