Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour,
Je vous propose un tutoriel sur la modélisation sur la modélisation en étoile (plus de tutoriel sur : www.qlikdiscovery.com)
Ce tutoriel s'inscrit dans une série de tutoriels sur la modélisation en étoile dans QlikView.
Le modèle de données en QlikView doit être en étoile pour qu'il soit cohérent et performant. Dans le cas contraire, QlikView créera des tables de synthèse (ce qui est fortement déconseillé).
Une des solutions à cette problématique, est de concaténer (unir) ces deux tables (par exemple) pour en créer une seule table. QlikView permet d'unir deux tables même si elles n'ont pas les mêmes noms et nombres de colonnes (contrairement à UNION en sql). Dans les prochains tutoriels, nous verrons d'autres astuces pour garder notre schéma en étoile.
Pour concaténer deux tables dans QlikView, on a deux façons de faire.
1- Forcer la concaténation de deux tables avec l'agrégat "Concatenate" si les tables ne contiennent pas les mêmes colonnes.
2- Concaténer deux tables qui contiennent les mêmes nom de colonnes en les identifiant avec une colonne Flag.
Voyons voir...
1- Forcer la concaténation de deux tables avec l'agrégat "Concatenate" si les tables ne contiennent pas les mêmes colonnes.
QlikView permet d'unir deux tables de colonnes différentes en forçant la concaténation avec l'agrégat "Concatenate". Cet agrégat vient toujours devant les instructions LOAD et SQL. Voir exemple ci-dessous.
| [Ventes et Achat]: LOAD Ventes_key, MontantVentes, RemiseVente, ProduitVendu_key, QuatitéVendue, PrixUnitaireVente From Table_ventes;
Concatenate LOAD Achat_key, MontantAchats, RemiseAchats, ProduitAcheté_key, QuatitéAchetée, PrixUnitaireAchat From Table_achats; |
Le résultat et le suivant :
Ainsi, le nombre de ligne de cette nouvelle table est égale à la somme des lignes de la table ventes et ceux de la table achats.
2- Concaténer deux tables qui contiennent les mêmes noms de colonnes en les identifiant avec une colonne Flag
Pour simplifier davantage notre modèle de donnée, nous allons cette fois ci mettre les données (de même type) de la table "ventes" et de la tables "achats" dans une même colonne. On ajoutera une colonne flag pour identifier les deux tables.
| [Ventes et Achats]: LOAD Ventes_key as ID, Montant, Remise, Produit_key, Quatité, PrixUnitaire, 'Ventes' as TypeOpération From Table_ventes;
LOAD Achat_key as ID, Montant, Remise, Produit_key, Quatité, PrixUnitaire, 'Achats' as TypeOpération From Table_achats; |
Cette fois, nous n'avons pas besoin de l'agrégat "Concatenate" car les noms des colonnes des deux tables sont tous identiques.
Important : La colonne "TypeOpération" va nous permettre d'identifier les tables, notamment lors de expressions, en utilisant "L'analyse d'ensemble ou le SET Analysis".
Voila le résultat:
Cette fois, le nombre de colonne de la table résultante est égale au nombre de colonne d'une des tables plus une colonne Flag.
On remarque que cette présentation est plus simple. Néanmoins, n'oubliez pas que dans ce cas vous devez à chaque fois utiliser le SET Analysis lors de vos expressions. Par exemple, si vous voulez calculer la somme des montants de ventes vous ne pouvez pas faire un simple sum(Montant) (ce qu'est possible avec la méthode 1). Dans ce cas vous êtes obligé de faire : sum( {$<TypeOpération= {Ventes}>} Montant).
Voila, je vous laisse choisir le méthode qui convient le mieux à votre problématique.
Si vous avez besoin de plus d'éclaircissements ou des questions, n'hésitez pas ...
Lotfi BENKHIDER
Merci pour ce tutoriel, Lotfi !
Merci pour ce tuto,
j'aurais en revanche besoin de concatener deux tables dont certains des noms de colonnes sont identiques mais pas tous. J'utilise la fonction script concatenate. Malheureusement les colonnes ayant les mêmes noms sont doublées dans la table qui en résulte (vu en faisant un store en csv avant la fin du script de chargement).
Du coup je perd une des colonnes à l'usage
Par exemple:
Table1:
Load
Symbole_Unite , Quantité, Lot , Libelle1
From [Lib://Sources/source1.qvd]
Table2:
Load
Symbole_Unite, Valeur_numérique, Libelle2
From [Lib://Sources/source2.qvd]
Puis:
Concatenate(Table1)
load
*
Resident Table2;
Drop table Table2;
J'ai en résultat une table:
Table1:
Symbole_Unite , Quantité, Lot , Libelle1, Symbole_Unite, Valeur_numérique, Libelle2
Comment faire pour que les colonnes identiques fusionnent?
A+
Bonjour.
J'ai l'impression que tu as besoin de joindre les tables ?
Essaye d'utiliser la commande Join à la place de concatenate.
Désolé mais ce post est incomplet Imprécis et trompeur.
Je conseille d'utiliser l'aide concernant les jointures entre tables.
J'ai besoin de rassembler deux tables en ne fusionnant pas les lignes (2 lignes dans chaque table donnent 4 lignes dans la table rassemblé) et je voudrais que les données de chaque table inscritent dans des colonnes homonymes se retrouvent dans la même colonne de la table finale.
En plus fastidieux je vais m'orienter vers un concatenate suivi d'un load qui va alimenter une nouvelle colonne en piquant dans les deux colonnes à rassembler.
Tres étrange comme comportement. Lorsque l'on force le concatenate les champs identique fusionne automatiquement, il n'y a rien à faire.
PPetite question pour essayer de cerner le problème :
Si tu ne fais que charger tes tables, elles sont bien liées entre elles par le champ Symbole_Unite ?