Huomautus
Tämä on yksi artikkelisarjasta, joka sisältää yksityiskohtaiset ratkaisut, jotka lähetettiin Podcast 2316 -haasteeseen.
Power Query Challengessa yksi vaiheista oli ottaa nimikenttä jokaisesta 5. tietueesta ja kopioida se viiteen tietueeseen. Alkuperäinen ratkaisuni oli kömpelö, luottaen siihen, että nimen pituus olisi yli 2 merkkiä.
Useat ihmiset, kuten MF Wong, Michael Karpfen, Peter Bartholomew, Chris McNeil ja Jamie Rogers, käyttivät paljon parempaa ratkaisua, johon sisältyi Index-sarake.
Aloitetaan prosessi, jossa tiedot näyttävät tältä:
Ensinnäkin MF Wong totesi, että et tarvitse viittä ensimmäistä tietuetta. Voisit käyttää
Home, Remove Rows, Remove Top Rows… , 5 Rows.
Myös Excel MV: n Excel MVP Oz du Soleil pääsi eroon näistä viidestä, mutta hän teki sen, kun ne olivat vielä sarakkeita.
Sitten Lisää sarake, Lisää hakemistosarake, Alkaen 0. Tämä luo uuden sarakkeen 0 - NN.
Kun uusi Hakemisto-sarake on valittu, siirry Muunna-välilehteen ja valitse avattavasta Vakio-valikosta Numero-välilehti-ryhmä. Ole varovainen: Lisää sarake -välilehdessä on samanlainen avattava valikko, mutta Muunna-välilehden yhden valitseminen estää ylimääräisen sarakkeen lisäämisen. Valitse avattavasta valikosta Modulo ja määritä sitten, että haluat loput jakamalla 5: llä.
Sitten
Tämä tuottaa sarjan numeroita 0: sta 4: een, jotka toistetaan uudestaan ja uudestaan.
Sieltä vaiheet työntekijöiden nimien siirtämiseksi ovat samanlaisia kuin alkuperäinen videoni.
Lisää ehdollinen sarake, joka joko tuo nimen tai arvon Null yli ja täytä sitten. Lisää tapoja laskea tämä sarake löytyy Power Query: Else If -lausekkeiden käyttö ehdollisissa sarakkeissa.
Täytä nimi täyttääksesi nimen ensimmäisestä rivistä seuraavaan viiteen riviin.
Kiitos MF Wong hänen videostaan. Muista ottaa CC käyttöön englanninkielisissä tekstityksissä.
https://www.youtube.com/watch?v=So1n7sLE_Mg
Peter Bartholomew'n video:
https://www.youtube.com/watch?v=gb3OPfF_BNc
Michael Karpfen huomasi myös, että kokonaissummia ei tarvitse poistaa ja lisätä ne myöhemmin. Hänen M-koodi on:
let Quelle = Excel.CurrentWorkbook()((Name="UglyData"))(Content), #"Höher gestufte Header" = Table.PromoteHeaders(Quelle, (PromoteAllScalars=true)), #"Geänderter Typ" = Table.TransformColumnTypes(#"Höher gestufte Header",(("Category Description", type text), ("Dept. Total", type number), ("Q1", type number), ("Q2", type number), ("Q3", type number), ("Q4", Int64.Type), ("Employee 1", type number), ("Q1_1", type number), ("Q2_2", type number), ("Q3_3", Int64.Type), ("Q4_4", Int64.Type), ("Employee 2", Int64.Type), ("Q1_5", Int64.Type), ("Q2_6", Int64.Type), ("Q3_7", Int64.Type), ("Q4_8", Int64.Type), ("Employee 3", Int64.Type), ("Q1_9", Int64.Type), ("Q2_10", Int64.Type), ("Q3_11", Int64.Type), ("Q4_12", Int64.Type), ("Employee 4", type number), ("Q1_13", type number), ("Q2_14", type number), ("Q3_15", type number), ("Q4_16", Int64.Type))), #"Entpivotierte andere Spalten" = Table.UnpivotOtherColumns(#"Geänderter Typ", ("Category Description"), "Attribut", "Wert"), #"Hinzugefügter Index" = Table.AddIndexColumn(#"Entpivotierte andere Spalten", "Index", 1, 1), #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Hinzugefügter Index", "Benutzerdefiniert", each Number.Mod((Index)-1,5)), #"Hinzugefügte benutzerdefinierte Spalte1" = Table.AddColumn(#"Hinzugefügte benutzerdefinierte Spalte", "Benutzerdefiniert.1", each if (Benutzerdefiniert)=0 then (Attribut) else null), #"Nach unten gefüllt" = Table.FillDown(#"Hinzugefügte benutzerdefinierte Spalte1",("Benutzerdefiniert.1")), #"Neu angeordnete Spalten" = Table.ReorderColumns(#"Nach unten gefüllt",("Benutzerdefiniert.1", "Attribut", "Category Description", "Wert", "Index", "Benutzerdefiniert")), #"Geänderter Typ1" = Table.TransformColumnTypes(#"Neu angeordnete Spalten",(("Benutzerdefiniert", type text))), #"Hinzugefügte benutzerdefinierte Spalte2" = Table.AddColumn(#"Geänderter Typ1", "Benutzerdefiniert.2", each if (Benutzerdefiniert) = "0" then "TOTAL" else "Q"&(Benutzerdefiniert)), #"Neu angeordnete Spalten1" = Table.ReorderColumns(#"Hinzugefügte benutzerdefinierte Spalte2",("Attribut", "Category Description", "Benutzerdefiniert.1", "Wert", "Index", "Benutzerdefiniert", "Benutzerdefiniert.2")), #"Entfernte Spalten" = Table.RemoveColumns(#"Neu angeordnete Spalten1",("Attribut", "Index", "Benutzerdefiniert")), #"Pivotierte Spalte" = Table.Pivot(#"Entfernte Spalten", List.Distinct(#"Entfernte Spalten"(Benutzerdefiniert.2)), "Benutzerdefiniert.2", "Wert", List.Sum), #"Neu angeordnete Spalten2" = Table.ReorderColumns(#"Pivotierte Spalte",("Benutzerdefiniert.1", "Category Description", "Q1", "Q2", "Q3", "Q4", "TOTAL")), #"Sortierte Zeilen" = Table.Sort(#"Neu angeordnete Spalten2",(("Benutzerdefiniert.1", Order.Ascending))), #"Umbenannte Spalten" = Table.RenameColumns(#"Sortierte Zeilen",(("Benutzerdefiniert.1", "Employee Name"))) in #"Umbenannte Spalten"
Huomaa, että Josh Johnson käytti myös Hakemisto-saraketta, mutta yhtenä ensimmäisistä vaiheista ja käytti sitä eräänlaisena yhdessä viimeisistä vaiheista.
Palaa Podcast 2316 -haasteen pääsivulle.
Lue tämän sarjan seuraava artikkeli: Power Query: Vasemman 2 merkin purkaminen sarakkeesta.