Power Query: Isolieren der Zeilen, die Quartale darstellen - Excel-Tipps

Inhaltsverzeichnis

Hinweis

Dies ist einer aus einer Reihe von Artikeln, in denen Lösungen für die Podcast 2316-Herausforderung aufgeführt sind.

Ein großes Lob an Fowmy für diese Lösung. Es wird im wirklichen Leben nicht funktionieren, aber es funktioniert gut mit den angegebenen gefälschten Daten.

In jeder Lösung gibt es einen Punkt, an dem Sie herausfinden müssen, welche Zeilen Mitarbeiternamen und welche Zeilen Viertel enthalten.

Zeilen identifizieren

Anstatt eine bedingte Spalte zu verwenden, wird Fowmy nach Trennzeichen aufgeteilt, wobei Q als Trennzeichen verwendet wird. Schauen Sie sich das an … alle Quartale befinden sich jetzt in einer neuen Spalte.

Durch Trennzeichen aufgeteilt

Bevor Sie oben ausfüllen können, müssen Sie die Leerzeichen im Mitarbeiternamen auf Null setzen. Fowmy löst dies mit:

= Table.ReplaceValue(#"Split Column by Delimiter","",null,Replacer.ReplaceValue,("Employee Name"))

Dies ist der Grund, warum dies mit realen Daten nicht funktioniert: Es wird einen Mitarbeiter geben, dessen Name ein Q enthält. Das Unternehmen wird Angelique, Dominique oder Ezequiel einstellen. Das wird die großartige Split Column-Lösung von Fowmy vermasseln.

Wenn Fowmy später möchte, dass 1, 2, 3, 4 Q1, Q2, Q3, Q4 sagen, verwenden Sie Format, Add Prefix:

Formatieren, Präfix hinzufügen

Unten ist Fowmys Code:

let Source = Excel.CurrentWorkbook()((Name="Table1"))(Content), #"Transposed Table" = Table.Transpose(Source), #"Split Column by Delimiter" = Table.SplitColumn(#"Transposed Table", "Column1", Splitter.SplitTextByEachDelimiter(("Q"), QuoteStyle.Csv, false), ("Employee Name", "Qtr")), #"Replaced Value" = Table.ReplaceValue(#"Split Column by Delimiter","",null,Replacer.ReplaceValue,("Employee Name")), #"Filled Down" = Table.FillDown(#"Replaced Value",("Employee Name")), #"Promoted Headers" = Table.PromoteHeaders(#"Filled Down", (PromoteAllScalars=true)), #"Filtered Rows" = Table.SelectRows(#"Promoted Headers", each ((Category Description) "Dept. Total") and ((Column2) null)), #"Added Prefix" = Table.TransformColumns(#"Filtered Rows", (("Column2", each "Q" & Text.From(_, "en-US"), type text))), #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Added Prefix", ("Category Description", "Column2"), "Attribute", "Value"), #"Reordered Columns" = Table.ReorderColumns(#"Unpivoted Other Columns",("Attribute", "Category Description", "Column2", "Value")), #"Pivoted Column" = Table.Pivot(#"Reordered Columns", List.Distinct(#"Reordered Columns"(Column2)), "Column2", "Value", List.Sum), #"Inserted Sum" = Table.AddColumn(#"Pivoted Column", "Total", each List.Sum(((Q1), (Q2), (Q3), (Q4))), type number), #"Renamed Columns" = Table.RenameColumns(#"Inserted Sum",(("Category Description", "Employee Name"), ("Attribute", "Category Description"))), #"Sorted Rows" = Table.Sort(#"Renamed Columns",(("Employee Name", Order.Ascending), ("Category Description", Order.Ascending))) in #"Sorted Rows"

Jonathan Cooper schickte eine Variation dieser Technik. Jonathan verwendete vier Schritte, um "Q1" in "_Q1" zu ändern, dann "Q2" in "_Q2", dann "Q3" in "_Q3" und "Q4" in "_Q4". Hier ist direkt nach dem Ändern von Q2:

_Q1, _Q2, _Q3, _Q4

Später, als Jonathan sich durch den Unterstrich trennt, verhindert er, dass Quentin gespalten wird. Er verhindert auch, dass später das Q vor der Spalte hinzugefügt werden muss.

Durch Unterstrich geteilt

Ich mag auch, dass Jonathan in der endgültigen Lösung alle Nullen durch Nullen ersetzt hat. Hier ist sein Code:

let Source = Excel.CurrentWorkbook()((Name="UglyData"))(Content), #"Promoted Headers" = Table.PromoteHeaders(Source, (PromoteAllScalars=true)), #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",(("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))), #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", ("Category Description"), "Attribute", "Value"), #"replace 0 with null" = Table.ReplaceValue(#"Unpivoted Other Columns",0,null,Replacer.ReplaceValue,("Value")), #"prep qtr to be split1" = Table.ReplaceValue(#"replace 0 with null","Q1","_Q1",Replacer.ReplaceText,("Attribute")), #"prep qtr to be split2" = Table.ReplaceValue(#"prep qtr to be split1","Q2","_Q2",Replacer.ReplaceText,("Attribute")), #"prep qtr to be split3" = Table.ReplaceValue(#"prep qtr to be split2","Q3","_Q3",Replacer.ReplaceText,("Attribute")), #"prep qtr to be split4" = Table.ReplaceValue(#"prep qtr to be split3","Q4","_Q4",Replacer.ReplaceText,("Attribute")), #"Split Column by underscore" = Table.SplitColumn(#"prep qtr to be split4", "Attribute", Splitter.SplitTextByDelimiter("_", QuoteStyle.Csv), ("Employee", "Period", "Attribute.3")), #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by underscore",(("Employee", type text), ("Period", type text), ("Attribute.3", Int64.Type))), #"prep to fill down" = Table.ReplaceValue(#"Changed Type1","",null,Replacer.ReplaceValue,("Employee")), #"Filled Down employee" = Table.FillDown(#"prep to fill down",("Employee")), #"remove dept totals" = Table.SelectRows(#"Filled Down employee", each (Employee) "Dept. Total"), #"remove employee totals" = Table.SelectRows(#"remove dept totals", each (Period) null), #"Removed extra column" = Table.RemoveColumns(#"remove employee totals",("Attribute.3")), #"Pivoted Column" = Table.Pivot(#"Removed extra column", List.Distinct(#"Removed extra column"(Period)), "Period", "Value", List.Sum), #"Inserted Sum" = Table.AddColumn(#"Pivoted Column", "Total", each List.Sum(((Q1), (Q2), (Q3), (Q4))), type number), #"Sorted Rows" = Table.Sort(#"Inserted Sum",(("Employee", Order.Ascending), ("Category Description", Order.Ascending))) in #"Sorted Rows"

Kehren Sie zur Hauptseite für die Podcast 2316-Herausforderung zurück.

Lesen Sie den nächsten Artikel in dieser Reihe: Sortieren der Werbebuchungen.

Interessante Beiträge...