Skip to main content
Announcements
NEW Customer Portal: Initial launch will improve how you submit Support Cases. FIND OUT MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
JavierBlanco
Contributor III
Contributor III

A vueltas con las claves sintéticas

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

Captura.PNG

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_MESFCH_ACTO_COMERCIAL
20191220191201

 

¿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)

Captura2.PNG

 

¿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.

11 Replies
JavierBlanco
Contributor III
Contributor III
Author

Bueno, como suponía el problema desaparece al desmontar mi modelo y dejar a Qlik hacer el suyo...

Captura4.PNG

He conservado ID_MES_NPS para comprobarlo:

Captura5.PNG

Supongo que en ciertas circunstancias elaborar tu propio modelo pueda ser beneficioso, pero ésta no parece ser una de ellas.

rubenmarin

@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.