Power Query Aide pour dépoviter

Labud

XLDnaute Nouveau
Bonjour
Je vous soumets un problème que je n'arrive pas à résoudre. En PJ un fichier exemple avec un tableau avant (données de départ) et le tableau après que je souhaite obtenir à partir d'une requête sur PowerQuery.
En résumé, je dispose d'une tableau de départ avec 3 lignes (le nombre est fixe) et plusieurs colonnes (nombre variable). La 1ère ligne peut contenir des valeurs identiques et mon objectif est d'obtenir un tableau en dépivotant uniquement les blocs de colonne ayant une valeur identique sur la 1ère ligne. Surement pas très claire l'explication mais je pense que le fichier joint est plus explicite.
Un grand merci pour votre aide !
Bertrand
 

Pièces jointes

  • PQ_Pivot.xlsx
    9.3 KB · Affichages: 13
Solution
Bonjour Labud, Nairolf,

Ci-dessous une proposition en PowerQuery :
PowerQuery:
let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8vP3VdJR8g0NijcwxGAY4WYYK8XqRCv5Ooa4Bnk6hkYAhZ1cQ/z9gLRnsL+Po18IkBXg4xgS5IoiBFMEoUFGuAY4egYHu4YGAUWNDICEIZiAMYyhRGwsAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Colonne1 = _t, Colonne2 = _t, Colonne3 = _t, Colonne4 = _t, Colonne5 = _t, Colonne6 = _t, Colonne7 = _t]),
    listColsMurs = List.RemoveFirstN(Table.ColumnNames(Source),1),
    PivotData = Table.FromRecords(List.Transform(listColsMurs, each let colValues = Table.Column(Source, _) in [NOM=colValues{0}, MATERIAUX=colValues{1}, EPAISSEUR=colValues{2}])),
    GroupByMur = Table.Group(PivotData, {"NOM"}...

Nairolf

XLDnaute Accro
Salut Bertrand, salut le forum,

Je ne vois pas comment le faire avec PowerQuery car l'outil ne me semble pas adapté.
Je te propose un début de piste en vba dans le fichier joint.

Il faudra adapter le code à la disposition de tes données originelles.
 

Pièces jointes

  • PQ_Pivot_Nairolf.xlsm
    17.6 KB · Affichages: 2
Dernière édition:

Labud

XLDnaute Nouveau
Bonjour Nairolf
Merci pour ton aide et ta proposition. Mon idée était de traiter le problème dans PowerQuery car ça fait partie d'un fichier plus complet que je traite dans PQ et il ne me manque plus que cette partie sur laquelle je bloque.
 

mromain

XLDnaute Barbatruc
Bonjour Labud, Nairolf,

Ci-dessous une proposition en PowerQuery :
PowerQuery:
let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8vP3VdJR8g0NijcwxGAY4WYYK8XqRCv5Ooa4Bnk6hkYAhZ1cQ/z9gLRnsL+Po18IkBXg4xgS5IoiBFMEoUFGuAY4egYHu4YGAUWNDICEIZiAMYyhRGwsAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Colonne1 = _t, Colonne2 = _t, Colonne3 = _t, Colonne4 = _t, Colonne5 = _t, Colonne6 = _t, Colonne7 = _t]),
    listColsMurs = List.RemoveFirstN(Table.ColumnNames(Source),1),
    PivotData = Table.FromRecords(List.Transform(listColsMurs, each let colValues = Table.Column(Source, _) in [NOM=colValues{0}, MATERIAUX=colValues{1}, EPAISSEUR=colValues{2}])),
    GroupByMur = Table.Group(PivotData, {"NOM"}, {{"Data", each _, type table [NOM=text, MATERIAUX=text, EPAISSEUR=number]}}),
    AddColumnFinalData = Table.AddColumn(GroupByMur, "FinalData", each {{[NOM]}, [Data][MATERIAUX], [Data][EPAISSEUR]}, type list),
    SelectColumnFinalData = Table.SelectColumns(AddColumnFinalData,{"FinalData"}),
    ExpandRowsFinalData = Table.ExpandListColumn(SelectColumnFinalData, "FinalData"),
    listFinalColumns = List.Buffer(List.Transform({1..List.Max(List.Transform(ExpandRowsFinalData[FinalData], List.Count))}, each "Column" & Text.From(_))),
    TransformInRecords = Table.TransformColumns(ExpandRowsFinalData, {{"FinalData", each Record.FromList(_, List.FirstN(listFinalColumns, List.Count(_))), type record}}),
    DevelopRecords = Table.ExpandRecordColumn(TransformInRecords, "FinalData", listFinalColumns, listFinalColumns)
in
    DevelopRecords

A+
 

chris

XLDnaute Barbatruc
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8vP3VdJR8g0NijcwxGAY4WYYK8XqRCv5Ooa4Bnk6hkYAhZ1cQ/z9gLRnsL+Po18IkBXg4xgS5IoiBFMEoUFGuAY4egYHu4YGAUWNDICEIZiAMYyhRGwsAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table
Bonjour

Tu peux expliquer cette ligne s'il te plait ?
 

Discussions similaires

Réponses
16
Affichages
467

Statistiques des forums

Discussions
312 207
Messages
2 086 250
Membres
103 165
dernier inscrit
thithithi78