Mostrando entradas con la etiqueta modelado dimensional. Mostrar todas las entradas
Mostrando entradas con la etiqueta modelado dimensional. Mostrar todas las entradas

viernes, 29 de abril de 2016

Errores comunes en modelado dimensional para BI/DWH: dimension de encabezado o maestro en estructura maestro/detalle(header/line) PT 1

Similar al anterior artículo: Errores comunes en modelado dimensional para BI/DWH: Estructuras y jerarquías normalizadas  , el presente artículo esta enfocado a arquitectos e ingenieros de datos, específicamente aquellos trabajando en el diseño y construccion de un data warehouse o data mart  haciendo uso de modelado multidimensional.

En el artículo citado se mencionó que existen diferencias en los objetivos y enfoque de un modelo de datos para un sistema transaccional(OLTP) y un modelo de datos análitico( OLAP) y por lo tanto también existen diferencias en los patrones de diseño y las buenas practicas para ambos casos  encontrándose ocasiones en los que una buena practica en un enfoque es un "pecado" en el otro.
El problema esta en que en las universidades y cursos de bases de datos es muy poco tocado el tema de analíticos por lo cual las personas encargadas de realizar un diseño de este tipo, muchas veces desconocen los objetivos, patrones y buenas practicas y realizan el diseño como si se tratase de un modelo transaccional(enfoque que si es tratado a profundidad academicamente)  , muchos otros han aprendido el diseño de analíticos de manera básica a través de otras personas o bien por su cuenta , pero solo conociendo los patrones de diseño básicos por lo cual mezclan ambos mundos.

En el presente articulo atacaremos un error común y la manera recomendada de resolución del mismo.

En un modelo transaccional utilizando el modelo entidad-relación es muy común encontrarse con 2 tablas en relación de uno a muchos en una estructura llamada  "maestro/detalle" en la cual cada registro del maestro o encabezado contiene información  general que es compartida por cada uno de los registros "detalle" asociados.Ejemplos de esto son facturas en los que cada factura(maestro o encabezado)  tiene asociados varios productos(detalles)  o bien ordenes de mantenimiento de equipos en los que cada orden(maestro o encabezado) tiene asociados muchos equipos(detalle),en ambos casos los datos del maestro o encabezado son datos generales y que son compartidos por cada elemento del detalle(por ejemplo numero de factura u orden, o fecha de la operación) .En el mundo transaccional es correcto modelarlo de manera normalizada pensando en los objetivos de reducción de redundancia , facilidad de actualización de datos, integridad referencial  y reducción de consumo de espacio en disco y no olvidando que en este tipo de sistemas operativos, comúnmente un usuario accede y/o actualiza una transacción a la vez, por lo cual en estos sistemas el modelado se hace a través de la estructura mencionada de 2 tablas,1 tabla maestro o encabezado, asociada con una tabla de detalle. Por ejemplo el siguiente modelo de facturación con una tabla para almacenar cada factura y otra tabla de detalle donde se registra para cada factura, que productos fueron vendidos.


Este patrón es muy usado y recomendado para el mundo transaccional , mas no así en el mundo multidimensional donde comúnmente no se accede una sola transacción a la vez si no posiblemente miles y ademas buscamos agilidad, simplicidad , menor cantidad de enlaces(joins) y tiempos de respuesta mas eficientes. Lamentablemente este patrón es muy utilizado ya que representa de manera correcta las relaciones entre los datos y es la manera en la que los diseñadores de modelos de datos se sienten mas cómodos. Esto nos al primero de los 2 patrones a evitar. 

Replicar la tabla maestro(o encabezado) como una dimensión y el detalle como una fact table en el modelo multidimensional

El primer patrón a evitar consiste en prácticamente crear una copia de la tabla de encabezado, como una dimensión en el modelo multidimensional, y el detalle como una fact table. Aun que si es muy común y recomendado  tener una tabla  de detalle como base para  una fact table, es mala practica que esta fact table sea una copia fiel de la tabla detalle y la tabla de encabezado sea una dimensión . Ejemplo:

Hacerlo de esta forma hace que se pierdan muchos beneficios de un modelo multidimensional bien diseñado, como el uso de dimensiones centralizadas,integradas, únicas y compartidas entre diversos modelos(lo cual permite hacer un analisis drill across entre múltiples procesos de negocio) ya que la información contextual o descriptiva  estaría "incrustada" dentro de la dimensión de encabezado, o bien  a través de un doble enlace entre fact table->dimension encabezado -> Dimension descriptiva , lo cual como se menciono en el anterior post también es un patrón a evitar. Ejemplo(Como podemos ver esto ya nisiquiera tiene la famosa forma de estrella):

De esta forma se tendría una tabla dimensional que crece a un ritmo bastante elevado(similar al de la fact table) y un análisis de este proceso de negocio implicaría el acceso a 2 tablas voluminosas(en lugar de una tabla voluminosa y pequeñas tablas dimensionales) .Si se desea analizar solo la información contextual o descriptiva(por ejemplo: listado de clientes o sucursales) sería necesario recorrer toda la tabla(con posiblemente millones de registros) en vez de recorrer una única tabla pequeña, esto puede degradar el rendimiento y tiempo de respuesta. 

Además de esto el campo de enlace(o llave) entre ambas tablas, sería un campo incremental y único que no se repetiría en la fact table , lo cual haría que sea imposible utilizar técnicas de compresión (como por ejemplo compresion bytedict en amazon redshift) o indices bitmap(Sybase IQ) que si podrían ser utilizadas si se manejara como pequeñas dimensiones con pocos valores repetidos muchas veces.

En este post hemos hablado del primer patron a evitar para relaciones maestro detalle, en el siguiente post se explicara el segundo patrón ademas de presentarse un esquema de datos recomendado para  modelar estas relaciones de manera eficiente. Nuevamente estas no son recomendaciones o ideas generadas únicamente por mi persona, si no por los expertos en la materia y creadores del modelado multidimensional. 

Autor: Luis Leal



jueves, 18 de febrero de 2016

Errores comunes en modelado dimensional para BI/DWH: Estructuras y jerarquías normalizadas

El actual articulo esta orientado a ingenieros y arquitectos de datos(principalmente para personas encargadas del diseño y/o construcción de data warehouse siguiendo un modelado multi-dimensional) por lo cual se asume y recomienda familiaridad con la materia.

Existen en la industria buenas prácticas , tips y patrones de diseño comprobadas a lo largo del tiempo y con muchos casos de éxito , pero de igual forma existen malas practicas, errores y acciones a evitar cuando se aborda la tarea de diseñar un modelo de datos para apoyar a la toma de decisiones .

Dentro de estos errores , es muy común el que se presenta en este articulo y también se presentará el método recomendado para manejarlo. Ojo, las ideas propuestas acá(y por los expertos de la industria) entran en conflicto con las buenas prácticas de diseño de modelos de datos que se enseñan religiosamente en universidades y cursos de bases de datos, por lo cual se recomienda terminar de leer el post antes de dejarlo a medias pensando que lo que en el se dice es incorrecto.

El error es: modelar estructuras y jerarquías normalizadas. 

A lo largo de mi experiencia me he encontrado con este error en múltiples ocasiones ,incluso siendo realizado por arquitectos de datos experimentados , pero a que se debe? Principalmente a que como se menciono , esta práctica se evangeliza y se trata religiosamente en universidades y cursos de bases de datos y comúnmente los arquitectos de datos incursionan en el diseño de un modelo de datos de toma de decisiones sin tener en cuenta las diferencias(incluso sin un entrenamiento adecuado) en el enfoque y objetivos de un modelo de datos transaccional(comúnmente relacional) y un modelo analítico(toma de decisiones, descubrimiento de patrones y conocimiento).

En un modelo transaccional , el modelo se realiza pensando en objetivos tales como: captura de información,reducción de redundancia, integridad referencial , disminución de espacio de almacenamiento y para esto se recurre comúnmente a un modelo entidad/ relación normalizado, en el cual se modelan entidades del mundo(o negocio) y las relaciones entre las mismas.

Por otra parte en un modelo analítico , el diseño se realiza con objetivos tales como: consumo de información,toma de decisiones, análisis de indicadores del negocio, facilidad de consumo y entendimiento por parte de usuarios no técnicos, velocidad de acceso a la información ,aplicar pocos o ningún calculo y formulas durante el consumo(durante el query, y hacerlo en el ETL) y que el query sea lo mas "limpio" posible  y es acá donde entra en conflicto el enfoque analítico con el transaccional  ,ya que en el modelo analítico no se modelan entidades y sus relaciones, si no procesos de negocio, las métricas generadas por el proceso  y el contexto o puntos de vista de análisis del proceso y sus métricas(dimensiones)  .En este caso es permitido y altamente RECOMENDADO el tener estructuras de datos redundantes , no normalizadas y sacrificar  la disminución de espacio de almacenamiento .

Entonces entrando en materia(y es acá donde los arquitectos de sistemas y datos encontraran difícil de digerir y aceptar el material)  y  viendo ejemplos reales del error y su solución  , manejaremos 2 situaciones comunes :


  1. Modelado de productos y categorías.
  2. Modelado de información geográfica(en este ejemplo estado y ciudad)
  • Enfoque transaccional: En este enfoque se modelan entidades y sus relaciones,para el primer caso identificando 2 entidades : producto y categoría y la relación entre ambas(un producto pertenece a una categoría y en una categoría se agrupan muchos productos).. Para el segundo caso se identifican 2 entidades: estado y ciudad  y la relación entre ambas(una ciudad pertenece a un estado, un estado contiene muchas ciudades).  Para ambos casos esta es una relación de jerarquía , a nivel físico este diseño implicaría 2 tablas por jerarquía y una llave foránea como relación entre las mismas.A continuación se presenta un modelo ER simplificado(se ha dejado de lado otras entidades y otros atributos de las entidades mostradas con fines de ejemplo)


  • Enfoque analítico(dimensional): En este enfoque se modelan procesos de negocio, las métricas generadas por los mismos, y el contexto(descripción,puntos de vista) llamado dimensión en el que se generan las métricas. Para estos 2 ejemplos en vez de 4 entidades(2 para información de producto y 2 para información geográfica) se tienen únicamente 2 dimensiones(seleccionando siempre el nivel mas granular o mas bajo en la jerarquía) , y cada dimensión contiene toda la información de la jerarquía representada , para estos 2 ejemplos , tendríamos que la dimensión de producto, tiene como atributo la categoría del mismo, y la dimensión de ciudad tiene como atributo el estado al que pertenece,esto genera redundancia y rompe reglas de normalizacion  ya que para este ejemplo la categoría se repetiría muchas veces(1 por cada producto en la categoría),pero como se mencionó esto es permitido y recomendado con fines de generar simplicidad de consumo(query fácil de construir) y tiempos de respuesta mas ágiles(query eficiente) ya que ni la base de datos, ni el usuario final debe realizar costosas uniones innecesarias(joins) entre múltiples tablas en la jerarquía. Algo que viene a la mente al arquitecto de datos acostumbrado a modelar de manera relacional , es que esto también genera  un mayor costo en disco pero se deben tomar 2 cosas en cuenta:
    1. El mayor costo de disco es permitido y es el precio a pagar por la simplicidad y tiempo de consumo de datos.
    2. Comúnmente los modelos analíticos son implementados sobre bases de datos columnares(como Amazon Redshift o SAP Sybase IQ), diseñadas con este tipo de modelado en mente y utilizando internamente estructuras como bitmaps(o indices bitmap) para almacenar una única vez cada valor diferente de la columna y acceder al valor a través del bitmap,logrando así una compresión significativa. Crear un modelo normalizado(y jerarquías con múltiples tablas) en un motor columnar, es desperdiciar y desaprovechar  las capacidades(Y la alta inversión económica!)   y enfoque del mismo.


          Podemos concluir entonces, que es recomendable no tener(o tener un mínimo) jerarquías de múltiples tablas(y las relacione entre ellas) y tener únicamente una tabla con el nivel mas bajo de la jerarquía y agregar el resto de datos de la jerarquía como atributos de la tabla,Y tener un único nivel de unión(de  fact table a la dimensión) aun que esto represente generar redundancia y romper normalizacion.

Esta recomendación no es algo generado por mi persona, lo recomiendan los expertos de la industria(incluso los creadores del modelado dimensional) como podemos ver en las siguientes referencias. Espero que esto sea de utilidad para generar mejores modelos analíticos.

Ver mistake #1

Ver rule#6

O bien, en el libro "The data warehouse toolkit", capitulo 8 ,pagina  398 ver : Mistake #8
Autor: Luis Leal

lunes, 16 de noviembre de 2015

Business Intelligence, Data Warehousing, Modelado Dimensional: ¿Que es desde un punto de vista no técnico?

Actualmente , en una era dominada por la información y la tecnología que facilita el acceso(y creación) de la misma,es muy común encontrarse con los términos "Business Intelligence"(inteligencia de negocios,inteligencia empresarial) y "Data Warehouse"(y otros relacionados como "Data Mining", "Big Data","Data Science"), desafortunadamente existe muy poca información relacionada a estos temas desde un punto de vista no técnico , la mayoría de información esta enfocada a personas del área de tecnologías de la información(TI) o informática y comúnmente se encuentra explicado en función de términos tales como  : Bases  de datos,SQL,query,ETL y otros que no pertenecen al vocabulario y conocimiento de un usuario de negocio(tal como un gerente o un tomador de desiciones).

¿Que es un sistema BI/DWH desde un punto de vista de negocio, y que beneficios tiene al mismo? De manera resumida , es un sistema destinado a apoyar,facilitar y eficientar la toma de decisiones. Se basa en el hecho de que la información de una empresa/organización, es uno de sus activos mas importantes pero lamentablemente es también comúnmente uno de los mas desaprovechados debido a las complejidades técnicas que se presentan en su almacenamiento( y acceso a los mismos). Es allí donde entramos en juego las personas encargadas del diseño y construcción de sistemas de BI/DWH.Nuestro trabajo es utilizar nuestro conocimiento técnico(diseño y administración de sistemas y bases de datos,programación y desarrollo de sistemas) para investigar, limpiar ,reorganizar e integrar los datos de una organización con el fin de entregar a los usuarios de negocio un punto único  de acceso a los mismos para tomar decisiones de manera mas acertada y fundamentada en hechos reales del negocio, esto teniendo presentes en todo momento 2  objetivos fundamentales de diseño:


  • Simplicidad y facilidad de acceso:  Se busca eliminar toda complejidad inherente de los sistemas y bases de datos de una organización para que la información pueda ser consumida sin problema(y sin necesidad de conocimiento técnico como el lenguaje SQL o las estructuras de datos internas) por cualquier tomador de decisiones en cualquier momento y pueda manipular la información a su gusto(cruces de información,ordenamientos,rankings,tendencias,análisis estadísticos y matemáticos, análisis predictivos,etc) sin solicitar ninguna manipulación o formateo al personal experto en informática. 
  • Agilidad y velocidad: En el pasado( y desafortunadamente aún en muchas empresas) ,cuando a un tomador de decisiones le surgía una pregunta de negocio, este solicitaba informes al personal de informática y estos debían preparar la información en un informe, este proceso tomaba mucho tiempo y para cuando la pregunta de negocio era respondida, ya era demasiado tarde(se habían perdido oportunidades de negocio o mejoras) , o bien surgían otras que debían esperar mas tiempo en ser respondidas. Un sistema de BI/DWH debe resolver este problema al permitir al usuario responder preguntas de negocio de manera rápida y en tiempo real cuando las preguntas o necesidades de información surgen, sin tener que solicitar apoyo a informática y de este modo, obtener ventajas competitivas.
Cabe resaltar que en la actualidad ,existe la mala percepción de que una organización que desarrolla informes/reportes o que copia(tal cual) sus datos desde sus sistemas fuente a un área dedicada a consulta ,ya ha adoptado BI,esto no es cierto y se pierden muchos beneficios incluidos los 2 objetivos fundamentales mencionados.

Con esto ya podemos diferenciar los sistemas BI/DWH de los sistemas operativos de una organización.

  • Sistema operativo(operacional o transaccional): Sistema dedicado a facilitar(y registrar) las operaciones y transacciones de un negocio , tales como: ventas, inventarios, contabilidad y todas las operaciones del día a día de un negocio.Pueden ser sistemas complejos o archivos de texto o excel. Son el timón que fija el curso de una organización.
  • Sistema de BI/DWH: sistema enfocado a la toma de decisiones, destinado a facilitar el consumo de información . Con la analogía del timón, son sistemas para monitorear  las acciones realizadas por el timón y medir el desempeño para tomar decisiones del rumbo  a seguir.
El sistema de BI/DWH debe ser visto por los usuarios como la fuente verídica e integrada de la información de la organización y servir de fuente para aplicaciones analíticas,predictivas y estadísticas o de minería de datos.
Existen muchas herramientas de BI por diversos fabricantes según diversas necesidades pero 
la base para un sistema de BI es el modelado dimensional, del cual hablaré en otra ocasión.

Espero que esta lectura resulte interesante y logre captar la esencia de un sistema de BI.

Muchas gracias!