[Power Query] Additionner 2 tableaux col par col en fonction de la 1

Bonjour,

J'ai 2 tableaux similaires :

  • dans chacun des 2 une première colonne avec des "noms" dans un ordre différent,
  • des colonnes avec des intitulés qui ne diffèrent que par un préfixe, mais dans un ordre identique,
  • ces colonnes garnies de nombres.

Ce que je veux :

  • Faire un tableau de recap avec les en têtes sans préfixes,
  • cumulant les données des 2 tableaux pour toutes les colonnes en fonction des en-têtes de lignes.

Un classeur test, mais le plus fidèle possible à la structure du vrai.

Je suis parvenu à modifier les noms des champs en supprimant les préfixes, mais pour cela,

j'ai dû redescendre les headers sur la première ligne

transposer la table pour les avoir en colonne

fractionner la colonne ...

retransposer etc..

Il doit surement y avoir plus simple (je n'ai pas trouvé l'inverse de table.prefixcolumn)

Ensuite, quand j'ajoute les 2 tables, si je veux grouper par la première colonne, je ne peux grouper qu'une colonne à la fois...

je dois mal m'y prendre.

Bonjour,

Si j'ai bien compris...

Bonne journée

9pq-cumul-2-tb.xlsx (22.19 Ko)

Mince, j'étais parti dans des trucs tarabiscotés et je n'avais pas pensé à dépivoter les colonnes...

Je n'avais sans doute pas fini ma nuit.

Merci.

Bonjour à tous !

Une approche, légèrement différente :

Bonjour à tous

On peut un peu simplifier mais ajouter un tri

Table Jours pour le tri

let
    Source = Table.FromList({1..7},Splitter.SplitByNothing(),null, null, ExtraValues.Error),
    #"Type modifié" = Table.TransformColumnTypes(Source,{{"Column1", type date}}),
    #"Jour de la semaine inséré" = Table.AddColumn(#"Type modifié", "J", each Date.DayOfWeek([Column1])+1, Int64.Type),
    #"Lignes triées" = Table.Sort(#"Jour de la semaine inséré",{{"J", Order.Ascending}}),
    #"Nom du jour inséré" = Table.AddColumn(#"Lignes triées", "Jour", each Date.DayOfWeekName([Column1]), type text),
    #"Colonnes supprimées" = Table.RemoveColumns(#"Nom du jour inséré",{"Column1"})
in
    #"Colonnes supprimées"

Table finale (si tri non indispensable on peut s'arrêter à Etat0)

let
Source = Table.Combine({Tableau1, Tableau2}),
#"Supprimer le tableau croisé dynamique des autres colonnes" = Table.UnpivotOtherColumns(Source, {"Jour"}, "Col", "Valeur"),
#"Valeur remplacée" = Table.ReplaceValue(#"Supprimer le tableau croisé dynamique des autres colonnes",each [Col],each if [Col]<>"total" then Text.AfterDelimiter([Col]," ") else [Col],Replacer.ReplaceText,{"Col"}),
PStep = Table.SelectColumns(#"Valeur remplacée",{"Jour", "Valeur", "Col"}),
Etat0 = Table.Pivot(PStep, List.Distinct(PStep[Col]), "Col", "Valeur", List.Sum),
#"Requêtes fusionnées" = Table.NestedJoin(Etat0, {"Jour"}, Jours, {"jour"}, "Jours", JoinKind.Inner),
#"Jours développé" = Table.ExpandTableColumn(#"Requêtes fusionnées", "Jours", {"J"}, {"J"}),
#"Lignes triées" = Table.Sort(#"Jours développé",{{"J", Order.Ascending}}),
#"Colonnes supprimées" = Table.RemoveColumns(#"Lignes triées",{"J"})
in
#"Colonnes supprimées"

Bonjour à tous de nouveau !

@78chris : Salutaire rappel de la sommation directe dans le pivotage !

J'ai la fâcheuse tendance à l'oublier....

Re-,

Il doit surement y avoir plus simple (je n'ai pas trouvé l'inverse de table.prefixcolumn)

Version 2, qui renomme les colonnes avant combinaison des 2 tableaux

Code de renommage : (code identique pour les 2 Tableaux)

let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    RenameColumns = Table.RenameColumns( Source, List.Zip( 
                  { 
                    Table.ColumnNames( Source ), 
                    List.Transform(Table.ColumnNames( Source ), each Text.AfterDelimiter( _, " ",{0, RelativePosition.FromEnd}) ) 
                   } ) )
in
    RenameColumns

Et le cumul :

let
    Source = Table.Combine({Tableau1, Tableau2}),
    Sup_Tcd = Table.UnpivotOtherColumns(Source, {"Jour"}, "Mois", "Valeur"),
    Cumul = Table.Pivot(Sup_Tcd, List.Distinct(Sup_Tcd[Mois]), "Mois", "Valeur", List.Sum)
in
    Cumul

Le fichier :

RE

Coucou JFL

@78chris : Salutaire rappel de la sommation directe dans le pivotage !

Je n'avais pas vu ta réponse avant de poster

Pour le tri, je suis parti du principe qu'on n'est pas jamais sûr que le tableau1 soit bien trié... d'où une requête générique mais on a eu la même idée

Wow, vous êtes partis dans un concert de versions.

J'aurais dû vous prévenir de ne pas vous casser la tête avec le tri. Dans le vrai classeur, je trie sur la colonne Total in fine.

Chris, je n'ai pas compris l'utilité de la ligne :

PStep = Table.SelectColumns(#"Valeur remplacée",{"Jour", "Valeur", "Col"})

J'ai l'impression que tu supprimes des colonnes qui n'existent pas, vu qu'à l'étape précédente il n'y a que ces 3 colonnes.

RE

Effectivement j'ai du faire une modif qui a rendu cette ligne inutile

On peut trier par total dans PQ après Etat0 et supprimer le reste

Rechercher des sujets similaires à "power query additionner tableaux col fonction"