Power Query: Απομόνωση των σειρών που αντιπροσωπεύουν τα τέταρτα - Excel Συμβουλές

Πίνακας περιεχομένων

Σημείωση

Αυτό είναι ένα από μια σειρά άρθρων που περιγράφουν λεπτομερώς τις λύσεις που αποστέλλονται για την πρόκληση Podcast 2316.

Kudos to Fowmy για αυτήν τη λύση. Δεν θα λειτουργήσει στην πραγματική ζωή, αλλά λειτουργεί καλά με τα πλαστά δεδομένα που δίνονται.

Υπάρχει ένα σημείο σε κάθε λύση όπου πρέπει να καταλάβετε ποιες σειρές περιέχουν ονόματα υπαλλήλων και ποιες σειρές περιέχουν τέταρτα.

Προσδιορίστε σειρές

Αντί να χρησιμοποιεί στήλη υπό όρους, το Fowmy διαχωρίζεται με οριοθέτη, χρησιμοποιώντας το Q ως οριοθέτη. Δείτε αυτό… όλα τα τέταρτα βρίσκονται τώρα σε μια νέα στήλη.

Διαχωρισμός με οριοθέτη

Στα παραπάνω, προτού μπορέσετε να συμπληρώσετε, χρειάζεστε τα κενά στο Όνομα υπαλλήλου για να πείτε Null. Η Fowmy λύνει αυτό με:

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

Αυτός είναι ο λόγος για τον οποίο αυτό δεν θα λειτουργεί με πραγματικά δεδομένα: Θα υπάρξει υπάλληλος με Q στο όνομά τους. Η εταιρεία θα προσλάβει Angelique, Dominique ή Ezequiel. Αυτό θα ανατρέψει την εκπληκτική λύση Split Column από τη Fowmy.

Αργότερα, όταν ο Fowmy θέλει τα 1, 2, 3, 4 να λένε Q1, Q2, Q3, Q4, χρησιμοποιήστε το Format, Add Prefix:

Μορφή, Προσθήκη προθέματος

Παρακάτω είναι ο κωδικός της Fowmy:

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 χρησιμοποίησε τέσσερα βήματα για να αλλάξει "Q1" σε "_Q1", έπειτα "Q2" σε "_Q2", στη συνέχεια "Q3" σε "_Q3" και "Q4" σε "_Q4". Εδώ είναι αμέσως μετά την αλλαγή του Q2:

_Q1, _Q2, _Q3, _Q4

Αργότερα, όταν ο Jonathan χωρίζει από το Undererscore, εμποδίζει τον Quentin να χωρίσει. Επίσης, αποτρέπει αργότερα να πρέπει να προσθέσει το Q πριν από τη στήλη.

Διαχωρισμός με υπογράμμιση

Μου αρέσει επίσης ότι ο Τζόναθαν αντικατέστησε όλα τα μηδενικά με μηδενικά στην τελική λύση. Εδώ είναι ο κωδικός του:

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"

Επιστρέψτε στην κύρια σελίδα για την πρόκληση Podcast 2316.

Διαβάστε το επόμενο άρθρο σε αυτήν τη σειρά: Ταξινόμηση των στοιχείων γραμμής.

ενδιαφέροντα άρθρα...