Power Query: Opakované číslování skupin záznamů jako 1 až 5 - tipy pro Excel

Obsah

Poznámka

Toto je jeden z řady článků s podrobnými řešeními zaslanými pro výzvu Podcast 2316.

V mé Power Query Challenge byl jedním z kroků převzetí pole jména z každého pátého záznamu a jeho zkopírování do pěti záznamů. Moje původní řešení bylo neohrabané a počítalo se s tím, že délka jména bude delší než 2 znaky.

Několik lidí, včetně MF Wonga, Michaela Karpfena, Petera Bartoloměje, Chrise McNeila, Jamieho Rogerse, použilo mnohem lepší řešení zahrnující sloupec Rejstřík.

Pojďme pokračovat v procesu, kde data vypadají takto:

Datová tabulka

Nejprve si MF Wong všiml, že prvních pět záznamů nepotřebujete. Můžete použít

Home, Remove Rows, Remove Top Rows… , 5 Rows.

Odeberte horní řádky

Excel MVP Oz du Soleil z Excelu v ohni se těchto pěti také zbavil, ale udělal to, když to byli ještě sloupci.

Potom, Přidat sloupec, Přidat sloupec indexu, od 0. Tím se vygeneruje nový sloupec 0 až NN.

Sloupec indexu

Když je vybrán nový sloupec Rejstřík, přejděte na kartu Transformace a ve skupině Číslo karta vyberte rozevírací nabídku Standardní. Buďte opatrní: na kartě Přidat sloupec je podobný rozevírací seznam, ale výběr na kartě Transformace zabrání přidání dalšího sloupce. Z této rozevírací nabídky vyberte Modulo a poté po dělení číslem 5 určete, že chcete zbytek.

Modulo

Pak

Modul

Tím se vygeneruje řada čísel od 0 do 4, která se opakovaně opakují.

Výsledek

Od této chvíle jsou kroky k přenesení jmen zaměstnanců podobné mému původnímu videu.

Přidejte podmíněný sloupec, který přenese název nebo hodnotu Null a poté Fill Down. Více způsobů výpočtu tohoto sloupce najdete v Power Query: Použití klauzulí Else If v podmíněných sloupcích.

Přidejte podmíněný sloupec

Vyplňte dolů a vyplňte název z prvního řádku do dalších pěti řádků.

Díky MF Wong za jeho video. Nezapomeňte zapnout CC pro anglické titulky.
https://www.youtube.com/watch?v=So1n7sLE_Mg

Video Petera Bartholomewa:
https://www.youtube.com/watch?v=gb3OPfF_BNc

Michael Karpfen si také uvědomil, že není nutné mazat součty a přidávat je později. Jeho M-kód je:

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"

Všimněte si, že Josh Johnson také použil sloupec Index, ale jako jeden z prvních kroků a použil jej jako třídu v jednom z posledních kroků.

Vraťte se na hlavní stránku výzvy Podcast 2316.

Přečtěte si další článek v této sérii: Power Query: Extrahování levých 2 znaků ze sloupce.

Zajímavé články...