
En la anterior entrega de esta serie sobre cómo construir un datawarehouse ya introducía el concepto de las “claves subrogadas”.
Una clave subrogada es un identificador único que se asigna a cada registro de una tabla de dimensión. Esta clave, generalmente, no tiene ningún sentido específico de negocio. Son siempre de tipo numérico. Preferiblemente, un entero autoincremental.
Habitualmente, el sistema operacional ya utiliza sus propias claves, aunque suelen ser de tipo carácter y tienen un sentido específico para los empleados de la compañía. Por ejemplo, el código BCN puede utilizarse para referirse a Barcelona, o el DNI de cada empleado puede ser la clave única de la tabla de empleados. O el código de barras para referirse a un producto. ¿Por qué necesitamos, entonces, crear unos nuevos identificadores en el sistema Business Intelligence? Por varios motivos:
Por supuesto, también se pueden cometer errores al generar una clave subrogada…
Error 8: Crear “smart keys” para relacionar una tabla de dimension con una tabla de hechos.
En ocasiones, nos puede parecer útil aprovechar la lógica que subyace a los elementos para generar nuestras propias claves. Por ejemplo, si queremos crear una jerarquía de ciudades, nunca debemos caer en la tentación de crear una simple concatenación (y generar el código ESP-CAT-BCN para referirnos a Barcelona)… También es un error crear una clave compuesta de varios campos. Aunque en el operacional la terna país-CCAA-ciudad sea única, en el DWH debemos crear una clave subrogada formada por un solo campo entero autoincremental.
Recuerda: Sustituye cualquier clave física por una clave entera numerada secuencialmente desde 1 hasta N.
Categoría: Serie DWH
Palabras clave: DWH
Comentarios: Este artículo tiene 4 comentarios.¡Deja un comentario!
Hola a todos los Bintelligers!!
Revisando esta sección me ha surgido una duda que espero que alguien me resuelva:
Imaginar que tenemos la dimensión cliente en nuestro DW y un campo en ella que es número de hijos (por ejemplo) cuando nosotros hicimos la carga hace un mes tenía sólo un hijo, pero en este mes ha nacido su otro hijo y en el operacional aparece con dos.
Ahora en nuestro datawarehouse queremos mantener el estado último d este cliente, ya que no nos interesa para el supuesto.
Cuando haga la carga en este mes..se me ocurren dos acciones a realizar:
-Se debería eliminar los datos de la dimensión Cliente antes de cargar de nuevo toda la dimensión.
-O sería suficiente con actulizar sólo las modificaciones (p.e en ORACLE existe un statement llamado MERGE para carga en datawarehousing que permite esto), es decir, en este caso, el campo número_de_hijos de la dimensión...si es así,me surge la siguiente duda; si en el multidimensional cada cliente tiene claves subrrogadas y desaparece la clave operacional, como se sabe que cliente es el que hay que actualizar???Leí algo de esto hace tiempo...y no estoy muy seguro, ¿en el staging area podría incluirse una tabla que mantuviera la relacion entre tuplas de cliente en el operacional y en el multidimensional?O lo que estoy diciendo es una tontería...
El hecho de no incluir la información historica de la dimensión Cliente y sólo querer guardar el último estado del cliente violaría ña problematica de las dimensiones lentamente cambiantes???
Saludos de nuevo y gracias,
Isaac BG
Efectivamente, el caso que planteas es el típico problema de las dimensiones lentamente cambiantes (SCD).
Si sólo guardas la información actual, en efecto, desaparecerá el problema.
Según tu negocio, puede ser perfectamente asumible ignorar la historia del número de hijos de tus clientes... Pero si vendes algo relacionado con la infancia, puede ser un dato muy interesante desde el punto de vista analítico...
Es decir, en función de tu negocio, podrás omitir o no ese dato histórico concreto... pero lo que es seguro es que tarde o temprano te encontrarás campos de los que deberás guardar la historia.
Plantea tu DWH asumiendo este verdad inmutable :-)
Y eso implica crear claves subrogadas.
Jejje, la verdad que no sirvo para escritor, parece que no e he expresado del todo bien,jejeje, vuelvo a replantear la duda.
Ok, entonces supongamos que no es importante para mi aálisis, sólo quiero guardar el último estado del cliente.
Ahora sigo teniendo esta duda, si semanalmente hiciese la craga de datos en mi DW..se me ocurren dos acciones a realizar (en la segunda es donde tengo la duda):
-Se debería eliminar los datos de la dimensión Cliente antes de cargar de nuevo toda la dimensión.
-O sería suficiente con actulizar sólo las modificaciones, es decir, en este caso, el campo número_de_hijos de la dimensión. Si es así,me surge la siguiente duda;
" si en el multidimensional cada cliente tiene claves subrrogadas y desaparece la clave operacional, ¿Como se sabe que cliente es el que hay que actualizar???"
Leí algo de esto hace tiempo...y no estoy muy seguro, ¿en el staging area podría incluirse una tabla que mantuviera la relacion entre tuplas de cliente en el operacional y en el multidimensional?O lo que estoy diciendo es una tontería...
Saludos y gracias,
Isaac BG
Preguntas si debes eliminar registros, y cargarlos de nuevo, o si debes actualizar los registros existentes.
Eso no tiene que ver con el modelo de datos (que es de lo que ya hablo en toda la serie), tiene que ver con las estrategias de carga.
La respuesta es que depende, hazlo como quieras, pero hazlo bien... :-)
¿Y de que depende? De la base de datos, del tamaño, de si pueden existir usuarios conectados en el momento de la carga.. En general, yo valoro la sencillez, y eso implica el mismo método para todas las dimensiones, y los scripts lo más cortos y sencillos posibles... aunque a veces es necesario mirar el rendimiento...
¿Y cómo lo hago yo? En los últimos proyectos... ni eliminaba registros, ni los actualizaba... Creaba de nuevo todas las tablas de dimensiones (a través de tablas temporales que finalmente renombraba...)
Seguro que se puede hacer, y se hace, de otros maneras.
También preguntas si puedes mantener una tabla con la relación entre las claves operacionales y las claves subrogadas (entiendo que te refieres a la clave subrogada actual)... Por supuesto que sí, aunque para volúmenes pequeños de información podrías incluso utilizar una vista:
WHERE FECHA_FIN_VIGENCIA='21000101'
Más info en:
http://www.businessintelligence.info/serie-dwh/dimensiones-lentamente-cambiantes-scd.html
Las metodologías Business Intelligence utilizan la información para mejorar la gestión de las empresas.
Gracias al software de BI, los usuarios pueden acceder y analizar los datos con facilidad, y tomar mejores decisiones.