[Power Query] Transformer colonne + pivot
Bonjour à tous,
Jeu de données avec exemple de résultat attendu en PJ
1ère partie: transformation de colonne
Je souhaiterai modifier ma colonne D (il s'agit d'une colonne de désignation de mon article). Mon besoin est de conserver en désignation uniquement ce qui se trouve avant mon code article (les codes articles peuvent être NK, FK, BK ou HK) dans la désignation. Exemple: "ECROUS NK INP" deviendrait "ECROUS".
J'ai une colonne C (colonne Code) qui peut être utile ??
2ème partie: pivoter
Une fois cette modification de désignation réalisée, je souhaiterai conserver seulement 1 ligne par Composant (colonne A) et donc afficher les différentes informations propres à chaque colonne qui étaient autrefois sur plusieurs lignes dans une seule et même ligne, dans la colonne correspondante, séparées d'un point virgule.
Lors de ce process, si 2 informations contenus sur 2 lignes différentes sont identiques, serait-il possible de la faire apparaitre qu'une seule fois afin d'éviter les redondances dans mes points virgule ?? (exemple ci-dessous avec "ECROUS") Si oui tant mieux sinon tant pis
Je pense qu'il faudrait utiliser un pivot pour faire ceci, mais je n'ai pas réussi à obtenir le résultat souhaité??
Exemple:
| Composant | Article associé | Description | Code |
| AZ3 | X1 | ECROUS | BK |
| AZ3 | X2 | CHRYSO | FK |
| AZ3 | X3 | ECROUS | HK |
Cela devient:
| Composant | Article associé | Description | Code |
| AZ3 | X1;X2;X3 | ECROUS;CHRYSO | BK;FK;HK |
Merci à vous !
Bonjour
Bonjour à tous !
Une autre approche ?
let
Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
Type = Table.TransformColumnTypes(Source,{{"Durée", type text}}),
ValRempl = Table.ReplaceValue(Type,each [Lvl1 Description], each Text.BeforeDelimiter([Lvl1 Description]," "&[Code]),Replacer.ReplaceText,{"Lvl1 Description"}),
GroupBy = Table.Group(
ValRempl,
{"Composant"},
{
{"Article associé", each Text.Combine(List.Distinct([Article associé]),";"), type text},
{"Code", each Text.Combine(List.Distinct([Code]),";"), type text},
{"Lvl1 Description", each Text.Combine(List.Distinct([Lvl1 Description]),";"), type text},
{"Durée", each Text.Combine(List.Distinct([Durée]),";"), type text},
{"Description", each Text.Combine(List.Distinct([Description]),";"), type text}
}
)
in
GroupByBonjour à tous,
Merci pour ces retours
Une astuce pour effectuer la 1ère partie du problème (transformer ma colonne Lvl1 Description) lorsque ma colonne [Code] ne coïncide pas avec la description?
Il se peut par exemple parfois que le code soit en "NK" mais que la désignation contienne "FK". Je souhaite malgré cette incohérence supprimer ce qu'il y a à partir de "FK" dans ma désignation.
Pour se faire peut-on écrire un algo de type: dès que FK/BK/JK/HK apparait dans [Lvl1 Description] alors ne garder que ce qu'il y a avant ??
Merci!
Bonsoir à tous !
Une proposition à tester ?
let
Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
Type = Table.TransformColumnTypes(Source,{{"Durée", type text}}),
ValRempl = Table.ReplaceValue(
Type,
each [Lvl1 Description],
each Splitter.SplitTextByAnyDelimiter({" NK"," FK"," BK"," JK"," HK"},QuoteStyle.None)([Lvl1 Description]){0},
Replacer.ReplaceText,
{"Lvl1 Description"}
),
GroupBy = Table.Group(
ValRempl,
{"Composant"},
{
{"Article associé", each Text.Combine(List.Distinct([Article associé]),";"), type text},
{"Code", each Text.Combine(List.Distinct([Code]),";"), type text},
{"Lvl1 Description", each Text.Combine(List.Distinct([Lvl1 Description]),";"), type text},
{"Durée", each Text.Combine(List.Distinct([Durée]),";"), type text},
{"Description", each Text.Combine(List.Distinct([Description]),";"), type text}
}
)
in
GroupBy