Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
lotfiblo
Creator
Creator

Schema en etoile, Part1. Concaténation de tables

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

www.qlikdiscovery.fr

Use Qalyptus for your Qlik Sense on-premise and Qlik Sense SaaS Reporting
Connect with me on Linkedin
Labels (1)
7 Replies
Sabine_Benaroche
Employee
Employee

Merci pour ce tutoriel, Lotfi !

lotfiblo
Creator
Creator
Author

C'est toujours un plaisir de partager sur QlikCommunity.

Use Qalyptus for your Qlik Sense on-premise and Qlik Sense SaaS Reporting
Connect with me on Linkedin
Not applicable

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+

benleroy
Partner - Contributor II
Partner - Contributor II

Bonjour.

J'ai l'impression que tu as besoin de joindre les tables ?

Essaye d'utiliser la commande Join à la place de concatenate.

benleroy
Partner - Contributor II
Partner - Contributor II

Désolé mais ce post est incomplet Imprécis et trompeur.

Je conseille d'utiliser l'aide concernant les jointures entre tables.

Not applicable

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

sfatoux72
Partner - Specialist
Partner - Specialist

‌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 ?