Thursday, May 6, 2010

Carga Dimensiones Lentamente Cambiantes

1 INTRODUCCIÓN
Este documento detalla el modelo de carga a través de Sql Server Integratin Services 2008 para dimensiones históricas.
Microsoft Integration Services es una plataforma para la creación de soluciones empresariales de transformaciones de datos e integración de datos. Integration Services sirve para resolver complejos problemas empresariales mediante la copia o descarga de archivos, el envío de mensajes de correo electrónico como respuesta a eventos, la actualización de almacenes de datos, la limpieza y minería de datos, y la administración de objetos y datos de SQL Server. Los paquetes pueden funcionar por separado o conjuntamente con otros paquetes para hacer frente a las complejas necesidades de la empresa. Integration Services puede extraer y transformar datos de muchos orígenes distintos, como archivos de datos XML, archivos planos y orígenes de datos relacionales, y, posteriormente, cargarlos en uno o varios destinos.

Integration Services contiene un variado conjunto de tareas y transformaciones integradas, herramientas para la creación de paquetes y el servicio Integration Services para ejecutar y administrar los paquetes. Las herramientas gráficas de Integration Services se pueden usar para crear soluciones sin escribir una sola línea de código. También se puede programar el amplio modelo de objetos de Integration Services para crear paquetes mediante programación y codificar tareas personalizadas y otros objetos de paquete.

2 DIMENSIONES HISTÓRICAS
Las dimensiones históricas son aquellas las cuales es requerimiento del negocio mantener la historia de la evolución del negocio el cual permite realizar el análisis de la evolución y los resultados en el momento del tiempo en el cual ocurrieron los cambios.
A través de este documento estaremos realizando un ejercicio de carga de dimensión histórica, también conocidas como Dimensiones Lentamente Cambiantes o por sus siglas en ingles SCD (Slowly Changing Dimension).

2.1 Conceptos Importantes
A continuación se indicarán algunos conceptos que son importantes entender para la realización de la carga de estas dimensiones:
• Sql Server Integration Services: es la herramienta del conjunto de soluciones de Sql Server 2008 para la generación de Business Intelligence.
• Componente Slowly Changing Dimension: es el componente que utilizaremos para realizar la carga de la dimensión lentamente cambiante. A través de un Wizard nos permitirá indicar cuál es la dimensión que utilizaremos y cuales son los campos que queremos que sean históricos.
• Business Key: es la clave del negocio que identifica un concepto, por ejemplo, un producto.
• Subrrogate Key: la clave subrrogada es un campo numérico único que se utilizará como clave del registro de la dimensión. Este tipo de claves permiten mantener la historia y la integridad referencial en el caso de que, por adecuaciones o evolución del negocio, la Business Key de un concepto cambio. También es importante para la mejor performance de las consultas dado ser un campo numérico.
• Atributo Fijo: son campos en los cuales no deben cambiar en el tiempo, por ejemplo, el lugar y fecha de nacimiento de un cliente.
• Atributos Cambiantes: son campos que pueden cambiar con el tiempo pero no es una necesidad del negocio mantener su historia.
• Atributos Historicos: son campos que pueden cambiar con el tiempo pero es una necesidad del negocio mantener su historia, por ejemplo, una sucursal de un banco puede estar bajo una subdirección pero por la propia evolución del negocio cambia a otra subdirección. En el caso de que mantengamos la historia, podremos determinar los ingresos y gastos de esa sucursal en el tiempo, cuanto fue su gasto cuando dependía de la primera subdirección y cuanto en la segunda.
• Current record: es un campo (booleano) que nos indica cual es el registro actual. En el ejemplo anterior de la sucursal, tendríamos dos registros con distintas claves subrrogadas para la misma sucursal pero uno de ellos tendría el campos Current en false y el actual en true, lo cual nos permite saber el registro que es el actual.
• Inferred Members: los miembros inferidos son un caso especial dentro de las dimensiones lentamente cambiantes el cual se utiliza un campo (booleano) que nos permite indicar si el registro está completo o no. Para el mejor entendimiento de este concepto sigamos el siguiente ejemplo:
o Tenemos una dimensión de productos y una factable asociada a esa dimensión en donde se indican las ventas de los productos. La asociación entre la dimensión y la factable se realiza a través de la clave subrrogada de la dimensión.
o La factable se carga diariamente a través de un archivo que llega al datawarehouse con las ventas del dia anterior el cual contiene la clave del negocio del producto de la venta.
o La dimensión de productos se carga mensualmente a través de un archivo que llega al datawarehouse con los productos existentes en el negocio.
o Durante el correr del mes y antes de la llegada del catálogo de productos al datawarehouse se crea un nuevo producto con una nueva clave de negocio y se generan ventas para ese producto.
o Los archivos de ventas que llegan al datawarehouse ya contienen la clave de negocio para ese producto.
o El proceso de carga diario utiliza el archivo de ventas, captura la clave de negocio para los productos y busca, en la dimensión de productos, la clave subrrogada para la clave de negocio correspondiente y con eso realiza el registro en la factable y mantiene la integridad referencial.
En este escenario, el nuevo producto no se encontrará en la dimensión de productos pues el catálogo todavía no llegó al datawarehouse. Para evitar perder el registro y mantener la realidad de las ventas para este producto, el proceso de carga lo que hace es registrar la clave de negocio que viene del archivo de ventas en la dimensión de productos generando su respectiva clave subrrogada. Además, marca el registro como inferido a través de la columna correspondiente y con eso nos permite poder registrar la venta en la factable manteniendo la integridad referencial con la misma.
Al momento de que el catálogo llegue al datawarehouse, el proceso de carga encontrará que ese producto está registrado en la dimensión de productos cómo inferido y procederá a actualizar el registro con los datos que vienen del mismo catálogo.

2.2 Proceso de Carga
El proceso de carga para las dimensiones lentamente cambiantes seguirá los siguientes pasos:

2.2.1 Extracción de los datos desde el origen
Cargaremos los datos del origen a través de un componente de Integration Services dependiendo del formato. Estos componentes se encuentran en la barra de herramientas dentro de la opción Data Flow Sources. En el ejemplo abajo el origen es un archivo en Excel. Arrastramos el componente Excel Sources dentro de la región Data Flow y indicamos la localización del archivo:





2.2.2 Inserción de los datos en el destino
La inserción de los datos en el destino se realizará a través del componente Slowly Changing Dimension:

Para eso, en el menú de herramientas, dentro de la opción Data Flow Transformations arrastramos el Slowly Changing Dimension.
Hacemos doble click dentro del componente y nos muestra la pantalla de bienvenida. Luego de eso marcamos el botón Next.

En la pantalla Select a Dimension Tables and Keys procederemos a indicar cual es la tabla de destino que queremos cargar en la opción Tableo or View. Luego de eso se mostrarán las columnas de la tabla. En este momento debemos indicar cual es la clave de negocio en la columna Key Type con la opción Business Key. Luego de realizar esto marcamos el botón Next:


En la pantalla Slowly Changing Dimension Columns indicamos el comportamiento de cada columna los cuales pueden ser: Fixed Attribute, Changing Attribute y Historical Attribute:



En la pantalla Fixed and Changing Attribute Options indicaremos el comportamiento para estas dos opciones. En el ejemplo abajo indicamos que si una columna fue indicada como Fixed (no cambio con el tiempo) el proceso de carga fallará:


En la pantalla Historical Attribute Options indicaremos cómo controlaremos la histórica de la columna, los cuales pueden ser a través de una columna booleana o a través de un rango de fechas. En este ejemplo utilizamos una columna denominada IsRowCurrent booleana y indicamos el valor cuando es actual y el valor cuando ya no lo es:


En la pantalla Inferred Dimension Members se indica si se utiliza o no el miembro inferido. En este ejemplo no usamos el miembro inferido:


Terminando tenemos la pantalla de fin y marcamos finish. Esto genera los componentes necesarios para los pasos indicados anteriormente:


De los componentes indicados anteriormente su funcionamiento se explica a continuación:
1. Recupera los datos del origen
2. Configuración del componente SCD indicando el comportamiento de los campos. Pueden haber los siguientes comportamientos:
a. Nuevo registro: en este caso el componente SCD para los datos directamente a insertarlos en el destino.
b. Registro existentes sin cambios: en el caso de que el registro ya exista en la base de datos y no se encontraron diferencias entre el actual y el nuevo el SCD no realiza ninguna acción.
c. Registro existentes con cambios: pueden haber tres comportamientos del SCD:
i. Columnas tipo Fixed: si la columna es fija el resultado dependerá de lo que se indicó en la pantalla Fixed and Changing Attribute Options. En el ejemplo indicado anteriormente, el resultado será la falla del componente.
ii. Columnas tipo Changing: el resultado será la realización de un UPDATE del registro con el nuevo valor.
iii. Columnas tipo Historical: el resultado será la realización de un UPDATE en donde la columna ISROWCURRENT se pasa a false indicando que el registro ya no es actual y la inserción de un nuevo registro generando una nueva clave subrrogada y la columna ISROWCURRENT con valor en true.

No comments:

Post a Comment