Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[POWERQUERY] :: Dépivoter un tableau colonnes en lignes pour une meilleure conception et exploitation des TCD

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

oguruma

XLDnaute Impliqué
Bonsoir le Forum,
ce post a pour objectif de montrer les intérêts de dépivoter les colonnes d'un tableau en ligne.

Exemple :
Nous avons les ventes de produits ventilées sur 12 mois de manière horizontal comme ceci


Ce type de fichier de données en source est assez courant.
Ici nous avons des mois mais cela peut être des catégories de produits, des régions ou toutes autres types.
Attention pour que le dépivotage ait un sens il faut toutes les colonnes à dépivoter aient toutes les mêmes type de données.

Un nettoyage des colonnes sera recommandé. Pour cela voir les mes posts qui traitent de ce sujet.
Ici et Ici

Avec ce type de présentation la manipulation des mois sera très difficile si on souhaite obtenir des TCD comme ceux-ci sans trop aller dans les détails de présentations










Vous avec certainement donc vite compris la nécessité de dépivoter les colonnes mois en ligne pour obtenir ceci



Voici le code (reprise des posts précédents)
PowerQuery:
let
    Source = Csv.Document(File.Contents("D:\DATA\DATA_FORMATIONS\DATA_RECHERCHES_EXCEL\__DATA_SOURCE\__SOURCE_CSV_03\VENTES_SUR_12_MOIS.csv"),[Delimiter=";", Columns=18, Encoding=1252, QuoteStyle=QuoteStyle.None]),
    TB_PROMOTE = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),

    // ********************************************************************************
    // Liste des colonnes à traiter - pour les isoler des autres colonnes
    // ********************************************************************************
    LST_ListeMois = {"Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"},

    // *********************************************************************************************
    // On ne garde que les colonnes qui existent réellement dans la table pour éviter les erreurs
    // *********************************************************************************************
    LST_ColonnesExistantes = List.Intersect({LST_ListeMois, Table.ColumnNames(TB_PROMOTE)}),

    // *********************************************************************************************
    // Utilisation de List.Accumulate - on boucle sur les 12 mois
    // *********************************************************************************************
    TB_TRANSFORM_MOIS = List.Accumulate(
        LST_ColonnesExistantes,
        TB_PROMOTE,
        (tableEnCours, nomColonne) =>
        let
            // On gère le point décimal
            TB_REPLACE=Table.ReplaceValue(tableEnCours,".",",",Replacer.ReplaceText,{nomColonne}),             

            // On force les N/A à 0
            TB_REPLACE_NA=Table.ReplaceValue(TB_REPLACE,"N/A","0",Replacer.ReplaceText,{nomColonne}),             

            // Recherche et remplacement des K et M dans les valeurs et calculs en valeurs
            TB_TRANSFORM_COL=Table.TransformColumns(TB_REPLACE_NA, {
                {nomColonne, each fnConvertGrandNombre(_)}
            }),
            // Après conversion de la colonne on transforme en nombre décimal
            TB_TRANSFORM_TYPE=Table.TransformColumnTypes(TB_TRANSFORM_COL,{{nomColonne, type number}})
        in
            // Fin de la transormation des valeurs pour chaque mois
           TB_TRANSFORM_TYPE
    ),
    
    // *********************************************************************************************
    // On transforme la colonne ID
    // *********************************************************************************************
    TB_PREFIX = Table.TransformColumns(TB_TRANSFORM_MOIS, {
        {"ID_Transaction", each "ID-" & Text.Select(Text.From(_), {"0".."9"}), type text} }),

    // *********************************************************************************************
    // On transforme la colonne dimension
    // *********************************************************************************************
    TB_DIM_SPLIT = Table.SplitColumn(
        TB_PREFIX,
        "Dimensions",
        Splitter.SplitTextByDelimiter("x", QuoteStyle.Csv),
        {"Largeur", "Longueur", "Hauteur"}
    ),
    TB_DIM_TYPE = Table.TransformColumnTypes(TB_DIM_SPLIT, {
        {"Largeur", Int64.Type}, {"Longueur", Int64.Type}, {"Hauteur", Int64.Type}
    }),

    // *********************************************************************************************
    // Dépivotage des colonnes mois - plus pratique pour une utilisation des dans TCD
    // *********************************************************************************************

    TB_DEPIVOT_MOIS = Table.Unpivot(TB_DIM_TYPE, LST_ColonnesExistantes , "Mois_Vente", "Montant")
in
    TB_DEPIVOT_MOIS


Le dépivotage est réalisé ici : TB_DEPIVOT_MOIS = Table.Unpivot(TB_DIM_TYPE, LST_ColonnesExistantes , "Mois_Vente", "Montant")
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Power Query Power Query
Réponses
26
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…