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.fr)

     

    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