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)
Le dépivotage est réalisé ici : TB_DEPIVOT_MOIS = Table.Unpivot(TB_DIM_TYPE, LST_ColonnesExistantes , "Mois_Vente", "Montant")
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")