2017-05-13 2 views
0

J'ai une liste d'adresses dans ce format:Comment combiner des valeurs de deux lignes adjacentes dans Power Query?

|ID|AddrType|Company|FName |LName |Address 
| 1|Visiting|ACME |Willie|Coyote|Sand Rd 10 
| 1|Delivery|ACME |Road |Runner|Sand Rd 20 
| 2|Visiting|Go Nuts|Chip |Munk |Tree Rd 3 
| 3|Visiting|In Sane|Dale |Munk |Tree Rd 5 

L'adresse de livraison de type ligne est présente uniquement si l'adresse de livraison différente de l'adresse de visite. Ainsi, le nombre d'adresses peuvent différer pour chaque entreprise ID

Je veux obtenir un résultat comme celui-ci:

|ID|V_Company|V_FName|V_LName|V_Address |D_Company|D_FName|D_LName|D_Address 
| 1|ACME  |Willie |Coyote |Sand Rd 10|ACME  |Road |Runner |Sand Rd 20 
| 2|Go Nuts |Chip |Munk |Tree Rd 3 |Go Nuts |Chip |Munk |Tree Rd 3 
| 3|In Sane |Dale |Munk |Tree Rd 5 |In Sane |Dale |Munk |Tree Rd 5 

J'ai essayé et a échoué en utilisant transposent comme décrit dans ce lien: https://community.powerbi.com/t5/Desktop/Merge-2-rows-in-one-row/m-p/46361#M18144

J'ai également essayé et échoué à créer des colonnes personnalisées où j'obtiens des valeurs de la ligne ci-dessous si la valeur AddrType sur la ligne ci-dessous est Delivery.

= Table.AddColumn(#"Sorted columns", "D_FName", each if [AddrTyp]="Delivery" then [FName]{[Index]+1} else FName) 

J'ai utilisé ce lien comme source de visdom bu avec un succès limité: http://excel-inside.pro/blog/2015/11/05/absolute-and-relative-references-in-power-query/

Je suis sûr qu'il ya un moyen facile d'obtenir ce que je veux. Je compte maintenant sur votre expérience et votre savoir pour pouvoir le résoudre.

Aidez-moi s'il vous plaît!

Répondre

1

Créer une table avec des adresses secondaires: trier AddressList sur AdressType (ascendant, de sorte que la livraison sera prioritaire), mettre en tampon et supprimer les doublons.

Le reste du code devrait être évident:

Recherche "SecondAdresses":

let 
    Source = AddressList, 
    Sorted = Table.Buffer(Table.Sort(Source,{{"AddrType", Order.Ascending}})), 
    SelectDistinct = Table.Distinct(Sorted, {"ID"}), 
    D_Headers = Table.TransformColumnNames(SelectDistinct, each "D_"&_) 
in 
    D_Headers 

requête "résultat":

let 
    Source = AddressList, 
    SelectVisiting = Table.SelectRows(Source, each ([AddrType] = "Visiting")), 
    RemovedAddressType = Table.RemoveColumns(SelectVisiting,{"AddrType"}), 
    V_Headers = Table.TransformColumnNames(RemovedAddressType, each "V_"&_), 
    Merged = Table.NestedJoin(V_Headers,{"V_ID"},SecondAddresses,{"D_ID"},"NewColumn",JoinKind.LeftOuter), 
    Expanded = Table.ExpandTableColumn(Merged, "NewColumn", {"D_Company", "D_FName", "D_LName", "D_Address"}, {"D_Company", "D_FName", "D_LName", "D_Address"}), 
    RenamedID = Table.RenameColumns(Expanded,{{"V_ID", "ID"}}) 
in 
    RenamedID 
+0

pour l'Thanx ouvre les yeux! – MrDark