Pivot power query

Bonjour,

Je voudrais savoir si il est possible d'obtenir le résultat que je veux par power query

Je pense que q"il faut pivoter mais je n'ai pas trouvé

exemple ci dessous

23test.xlsx (17.53 Ko)

Merci d'avance

Bonsoir,

Un essai :

let
    Source = Excel.CurrentWorkbook(){[Name="INGENICO_2"]}[Content],
    GroupBy = Table.Group(Source, {"BASE"},  {{"tbl" , each _}} ,GroupKind.Local , (s,c) => Number.From(Text.Contains(c[BASE] , "@"))),
    AjtRec = Table.AddColumn(GroupBy,"Rec", each
            [BASE = [tbl][BASE]{0},
             DATE = Date.From(Text.AfterDelimiter([tbl][BASE]{1},": ")),
             #"N°FACTURE" = Text.AfterDelimiter([tbl][BASE]{2},"FACTURE "),
             #"Montant total (sans TVA)" = Number.From(Text.BetweenDelimiters([tbl][BASE]{3},": "," EUR"))])[[Rec]],
    Expand = Table.ExpandRecordColumn(AjtRec, "Rec", {"BASE", "DATE", "N°FACTURE", "Montant total (sans TVA)"}, {"BASE", "DATE", "N°FACTURE", "Montant total (sans TVA)"}),
    TypeDate = Table.TransformColumnTypes(Expand,{{"DATE", type date}})
in
    TypeDate

Bonne soirée

Bonjour,

Merci cela fonctionne parfaitement bien, je demande souvent car je ne suis pas expert dans c'est manip

Merci encore

Bonjour à tous,

Une autre façon de faire dans la manipulation des données :

let
    Source = Excel.CurrentWorkbook(){[Name="INGENICO_2"]}[Content],
    Index = Table.AddIndexColumn(Source, "Index", 0, 1, Int64.Type),
    Modulo = Table.AddColumn(Index, "Modulo", each Number.Mod([Index], 4), type number),
    Extract = Table.AddColumn(Modulo, "Extract", each if [Modulo] = 0 then [BASE] else if [Modulo] = 1 then Text.AfterDelimiter([BASE], ": ") else if [Modulo] = 2 then Text.AfterDelimiter([BASE], "E ") else if [Modulo] = 3 then Text.BetweenDelimiters([BASE], ": ", "E") else null),
    GroupBy = Table.Group(Extract, {"Modulo"}, {{"Nombre", each [Extract], type table [Personnalisé=text, Personnalisé.1=text]}}),
    Pivot = Table.Pivot(Table.TransformColumnTypes(GroupBy, {{"Modulo", type text}}, "fr-FR"), List.Distinct(Table.TransformColumnTypes(GroupBy, {{"Modulo", type text}}, "fr-FR")[Modulo]), "Modulo", "Nombre"),
    Expand = Table.AddColumn(Pivot, "Tbl", each Table.FromColumns({[0],[1],[2],[3]})) [Tbl] {0},
    ColRenom = Table.RenameColumns(Expand,{{"Column1", "BASE"}, {"Column2", "DATE"}, {"Column3", "N°FACTURE"}, {"Column4", "MONTANT"}})
in
    ColRenom

J'avais planché sur une méthode 100% ruban notamment avec l'ajout d'une colonne personnalisée à partir d'exemple. J'ai eu de bons résultats mais lorsque j'ajoutais d'autres montants ça me sortait n'importe quoi... Dommage !

13test-pq-mav.xlsx (19.66 Ko)

Bonsoir à tous !

Visiblement le gang des fêlés de Power Query est en vadrouille....

Je vais me joindre à cette sympathique équipe :

let
    Source = Excel.CurrentWorkbook(){[Name="INGENICO_2"]}[Content],
    GroupBy = Table.Group(
        Source,
        {"BASE"},
        {
            {"Adresse", each _[BASE]{0}},
            {"Date", each Date.From(Text.AfterDelimiter(_[BASE]{1},": ")),Date.Type},
            {"N° Facture", each Text.AfterDelimiter(_[BASE]{2}," ",1)},
            {"Montant total (sans TVA)", each Number.From(Text.BetweenDelimiters(_[BASE]{3},": "," ")), Currency.Type}
        },
        0,
        (x,y) => Number.From(Text.Contains(y[BASE],"@"))
        ),
    ColSupp = Table.RemoveColumns(GroupBy,{"BASE"})
in
    ColSupp

Hello,

Merci JFL c'est parfait comme d'habitude j'ai plein de choix

Je vais essayer de comprendre un peu merci à tous

Cordialement,

Bonjour à tous !

Je vous remercie de ce retour.

Bonjour à tous,

@JFL, pour ma culture personnelle, pourriez vous expliquer le 4 ème et 5 ème paramètre de votre code ?,

Merci d'avance,

Cordialement,

Bonjour à tous de nouveau !

@JFL, pour ma culture personnelle, pourriez vous expliquer le 4 ème et 5 ème paramètre de votre code ?,

Est-ce cette partie ? :

 0,
 (x,y) => Number.From(Text.Contains(y[BASE],"@"))

Le 0 correspond à la valeur numérique de l’énumération GroupKind.Local.

La fonction suivante produit un vecteur (1/0) selon la présence ou non du caractère "@" dans chaque enregistrement.

Le "cumul" de ces arguments (GroupKind.Local et fonction) permet à la fonction Table.Group de regrouper les enregistrements concernés.

Bonjour à tous !

@Massari :

Techniquement, les approches de JFL et cousinhub diffèrent de la mienne.

Ma méthode se base sur la structure initiale du tableau, où chaque groupe de 4 lignes contient les mêmes informations dans le même ordre.

En revanche, les deux autres méthodes ne tiennent pas compte de cette structure et regroupent uniquement les données comportant un "@" dans la première colonne.

En résumé, si une ligne sans "@" est ajoutée, elle ne sera pas incluse dans le tableau final.

N'hésitez pas à me corriger si je raconte n'importe quoi

Bonjour Jfl,

Merci pour votre retour, je comprends donc le quatrième argument qui spécifie le type de regroupement (0 ou 1),

Le cinquième argument :

La fonction suivante produit un vecteur (1/0) selon la présence ou non du caractère "@" dans chaque enregistrement.

je comprends donc que cela renvoi 1 si il y a le symbole @ sinon 0, mais la fonction (x,y) m'est difficilement abordable car s'il s'agit je suppose d'un langage de programmation M,

Pourriez vous "vulgariser" cette fonction?,

Merci d'avance,

Cordialement,

Bonjour à tous

Une petite dernière (?)

let
    Source = Excel.CurrentWorkbook(){[Name="INGENICO_2"]}[Content],
    #"Personnalisée ajoutée" = Table.AddColumn(Source, "Titre", each if Text.Contains([BASE],"@") then "BASE" else 
        if Text.Contains([BASE],"FACTURE")  then Text.BeforeDelimiter([BASE]," ",1) else Text.BeforeDelimiter([BASE]," : ")),
    #"Personnalisée ajoutée1" = Table.AddColumn(#"Personnalisée ajoutée", "Info", each if Text.Contains([BASE],"@") then [BASE] else 
        if Text.Contains([BASE],"FACTURE ") then Text.AfterDelimiter([BASE]," ",1) else 
        if Text.Contains([BASE],"EUR") then Text.BetweenDelimiters([BASE],": "," EUR") else  Text.AfterDelimiter([BASE],": ")),
    #"Autres colonnes supprimées" = Table.SelectColumns(#"Personnalisée ajoutée1",{"Titre", "Info"}),
    #"Lignes groupées" = Table.Group(#"Autres colonnes supprimées", {"Titre"}, {{"Tabl",each Table.AddIndexColumn(_,"Idx",1,1),type table}}),
    #"Tabl développé" = Table.ExpandTableColumn(#"Lignes groupées", "Tabl", {"Info", "Idx"}, {"Info", "Idx"}),
    #"Colonne dynamique" = Table.Pivot(#"Tabl développé", List.Distinct(#"Tabl développé"[Titre]), "Titre", "Info"),
    #"Colonnes supprimées1" = Table.RemoveColumns(#"Colonne dynamique",{"Idx"}),
    #"Type modifié" = Table.TransformColumnTypes(#"Colonnes supprimées1",{{"Date", type date}, {"N° FACTURE", type text}, {"Montant total (sans TVA)", Currency.Type}})
in
    #"Type modifié"

Bonjour JB,

Oui par curiosité j'ai comparer vos propositions, et les propositions de JFL et CousinHub sont assez proches (un point de plus pour JFL pour sa concision de l'approche !)

Votre méthode est bien plus abordable pour moi dans le déroulement de chaque étape !, mais je suis toujours curieux des propositions plus complexes qui ouvrent

parfois d'autres perspectives et/ou approches lorsqu'on est confronté à un sujet similaire,

Mais après avoir testé, non sans le signe @ dans une adresse ne change pas le résultat souhaité,

Cordialement,

Bonjour à tous de nouveau !

(x,y) => Number.From(Text.Contains(y[BASE],"@"))

Le "x" correspond à la table en cours (Source).

Le "y" est une table sous-jacente sur laquelle va s'exercer le test.

In fine, et compte tenu du vecteur ainsi produit, la fonction Table.Group va regrouper les enregistrements à partir du "1" jusqu'au prochain "1".

Bonjour JFL,

Merci beaucoup pour cette explication essentielle à ma compréhension de votre proposition

Bonne journée à vous,

Cordialement,

Bonjour à tous de nouveau !

...... je suis toujours curieux des propositions plus complexes qui ouvrent parfois d'autres perspectives et/ou approches lorsqu'on est confronté à un sujet similaire,

Se nourrir des différentes propositions (complexes ou non !) est gage d'apprentissage.

Bonjour JFL,

Il est évident que toute proposition permet de s'améliorer, je ne voulait en aucun dénigrer l'approche de @JB, qui plus est était certainement bien plus concise que ce

que j'aurais proposé,

Merci à tous les participants pour leur aide

Cordialement,

Bonjour à tous de nouveau !

...... je ne voulait en aucun dénigrer .....

Soyez rassuré, je n'avais pas perçu négativement votre remarque !

Bonjour à tous,

Oui JFL ma remarque était surtout pour JB_ car sa proposition était également intéressante,

Cordialement,

Bonjour à tous !

Tu as voulu dénigrer ma proposition...

Non je rigole, pas de soucis pour moi non plus, bien évidemment

Rechercher des sujets similaires à "pivot power query"