Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hola a todos:
Estoy creando un modelo de datos a partir de una serie de tablas que me proporciona el cliente; si hago una carga de datos "a pelo", el modelo que a Qlik Sense buenamente se le ocurre es el siguiente:
Completado con errores y/o advertencias
0 error(es) forzado(s)
8 clave(s) sintética(s)
$Syn 1 = ID_MES+FCH_ACTO_COMERCIAL
$Syn 2 = ID_SFID+ID_MES
$Syn 3 = ID_SFID+ID_MES+LINEA_NEGOCIO_NMR
$Syn 4 = ID_SFID+ID_MES+FCH_ACTO_COMERCIAL
$Syn 5 = $Syn 2+$Syn 3
$Syn 6 = $Syn 1+$Syn 2+$Syn 4
$Syn 7 = $Syn 1+$Syn 2+$Syn 3+$Syn 4
$Syn 8 = $Syn 5+$Syn 6+$Syn 7
Bien, la pregunta es ¿cómo de malo sería dejar así el modelo? Según la ayuda oficial:
La presencia de varias claves sintéticas suelen ser un síntoma de un modelo de datos incorrecto, pero no siempre. Sin embargo, un signo inequívoco de que el modelo de datos es incorrecto es la presencia de claves sintéticas basadas en otras claves sintéticas.
Por lo que estoy leyendo, aquí y aquí, que Qlik cree claves sintéticas no es malo per se en términos de rendimiento e incluso asegura que el tratamiento de los valores nulos sea correcto; sin embargo, en este caso llega a crear claves sintéticas a partir de claves sintéticas, que según la ayuda es signo inequívoco de que el modelo de datos es incorrecto.
Por otro lado, hay algunos problemas de redundancia en las tablas, en especial con las fechas, puesto que ID_MES está incluido en FCH_ACTO_COMERCIAL (una tabla incluso incluye un campo ID_ANIO, aunque por suerte no aparece en ninguna otra y no afecta a las conexiones), tal que así:
ID_MES | FCH_ACTO_COMERCIAL |
201912 | 20191201 |
¿Sería estrictamente necesario omitir la carga de ID_MES en aquellas tablas que también incluyen FCH_ACTO_COMERCIAL (algunas tablas sólo incluyen ID_MES como referencia temporal, eso sí)? ¿Mejoraría el rendimiento o la solidez del modelo de datos? Porque se me ocurre que complicaría las presentaciones por mes de esos datos, ¿no? ¿Habría que procesar FCH_ACTO_COMERCIAL a posterior para extraer el mes?
Bien, como solución al problema de las claves sintéticas se me ha ocurrido crear las dos siguientes:
Hash256(ID_SFID, FCH_ACTO_COMERCIAL) as $key1
Hash256(ID_MES, ID_SFID, LINEA_NEGOCIO_NMR) as $key2
La primera podría incluir ID_MES o no.
De manera que el modelo queda:
Completado con éxito
0 error(es) forzado(s)
0 clave(s) sintética(s)
¿Hay algún problema en incluir FCH_ACTO_COMERCIAL en una de mis claves y a la vez usarla como clave en sí para conectar con TABLA_FCH_DIA? ¿El incluir un campo en una de las claves -haciéndolo desaparecer como tal al tener que comentarlo- impide a posteriori utilizarlo en las presentaciones? ¿Se os ocurre una alternativa mejor?
Un saludo y gracias por vuestras aportaciones.
Bueno, como suponía el problema desaparece al desmontar mi modelo y dejar a Qlik hacer el suyo...
He conservado ID_MES_NPS para comprobarlo:
Supongo que en ciertas circunstancias elaborar tu propio modelo pueda ser beneficioso, pero ésta no parece ser una de ellas.
@JavierBlanco wrote:
No entiendo muy bien este punto, ¿te refieres a eliminar ID_SFID y FCH_ACTO_COMERCIAL como claves independientes?
No, de hecho es al revés, tienes que crear el valor de esos campo usando los campos que sí tienen datos, todos los campos de la fila deben tener valor.
@JavierBlanco wrote:Supongo que en ciertas circunstancias elaborar tu propio modelo pueda ser beneficioso, pero ésta no parece ser una de ellas.
Como veas, si te funciona bien déjalo así. Si con el tiempo te piden añadir nuevas tablas y deja de funcionar bien ya dedicarás entonces el tiempo para solucionarlo.