Comment éviter les clés synthétiques sous Qlikview

Sous Qlikview, les références circulaires sont à bannir pour éviter les effets de bord quand il s’agit de concevoir le bon model de données. Si vous avez à faire à plusieurs tables de fait (de tables contenant des indicateurs, des mesures) sous Qlikview, il existe un type de modélisation qui permettra d’éviter ces effets de boucle et éviter les clés synthétiques.

La parade consiste à créer une modélisation avec une table centrale de liens. Cette table centre de liens va s’occuper de faire la jonction entre vos nombreuses tables de faits et vos tables de dimensions, sans avoir de doubles références et d’effets de bord indésirables compromettant la qualité de vos données ainsi que la performance de votre application Qlikview.

qlikview-logo

La création d’une table de clés pour éviter les clés synthétiques

Le script suivant est entièrement à adapter mais permettra de comprendre le rôle de cette table centrale de liens. Cette table de liens va contenir toutes les dimensions pour chaque table de fait avec, pour chaque table de fait, un champ supplémentaire qui sera la concatenation de vos autres dimensions. Voici l’exemple et les explications concrètes.

Dans un premier temps vous allez intégrer comme d’habitude vos tables de fait dans Qlikview avec la création d’un champ concatené.

fact_1:
select dim_1,dim_2, concat(dim_1,dim_2) as key_1, sum(transactions) as nb_transactions
from my_table;

fact_2:
select dim_1,dim_4, dim_8, concat(dim_1,dim_4,dim_8) as key_2, sum(transactions)as nb_transactions
from my_table;
// et ainsi de suite pour vos autres tables de fait... 

Dans un second temps, vous allez créer la table de liens qui contiendra les clés concaténées crées précédemment ainsi que les dimensions de chaque table. En fait, il ne faudrait prendre que les champs en doublon et pas toutes les dimensions, mais on simplifie dans l’exemple en prenant toutes les dimensions.

link_table:
load distinct key_1,dim_1,dim_2 resident fact_1;
load (concatenate) distinct key_2, resident fact_2;
// et ainsi de suite

Dans une troisième étape, vous allez venir supprimer via une commande drop les dimensions des tables de fait.

drop fields dim_1, dim_2 from fact_1;
drop fields dim_1, dim_4, dim_8 from fact_2;
// etc ...

Maintenant vos tables de fait ne vont plus contenir que la clé synthétique que vous avez créée lors de la première étape. Vous pourrez ensuite venir loader vos autres tables de dimension.

Vous pouvez en apprendre plus sur cette technique de chargement de données sous Qlikview permettant la multiplication des tables de fait sans la génération d’auto-jointure ou de références circulaires en consultant ce site, ce site et ce site. L’exemple sert juste à illustrer le process de création mais vous devrez adapter cette structure à votre cas concret.

Likez la page pour ne rater aucun article!