Power Query: Använda annat om klausuler i villkorliga kolumner - Excel-tips

Innehållsförteckning

Notera

Detta är en av en serie artiklar som beskriver lösningar som skickats in för Podcast 2316-utmaningen.

I min lösning för att omforma data, ville jag ha ett sätt att se om en kolumn innehöll ett anställds namn eller ett värde som Q1, Q2, Q3, Q4. I min lösning antog jag att ingen skulle ha ett namn med två tecken, och så lade jag till en kolumn för att beräkna längden på texten i kolumnen.

Jason M undvek behovet av kolumnen Längd genom att lägga till tre andra if-klausuler i sin villkorliga kolumn.

Lägg till villkorlig kolumn

Den villkorliga beräkningen för anställd letar sedan efter att Quarter är noll: om (Quarter) = null då (Category Description) annars null.

Villkorlig beräkning

Här är Jasons M-kod:

let Source = Excel.CurrentWorkbook()((Name="UglyData"))(Content), #"Transposed Table" = Table.Transpose(Source), #"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table", (PromoteAllScalars=true)), #"Added Conditional Column" = Table.AddColumn(#"Promoted Headers", "Quarter", each if (Category Description) = "Q1" then (Category Description) else if (Category Description) = "Q2" then (Category Description) else if (Category Description) = "Q3" then (Category Description) else if (Category Description) = "Q4" then (Category Description) else null), #"Added Conditional Column1" = Table.AddColumn(#"Added Conditional Column", "Employee", each if (Quarter) = null then (Category Description) else null), #"Filled Up" = Table.FillUp(#"Added Conditional Column1",("Quarter")), #"Filled Down" = Table.FillDown(#"Filled Up",("Employee")), #"Inserted Distinct Count" = Table.AddColumn(#"Filled Down", "Distinct Count", each List.NonNullCount(List.Distinct(((Category Description), (Employee)))), Int64.Type), #"Filtered Rows1" = Table.SelectRows(#"Inserted Distinct Count", each (Distinct Count) 1), #"Removed Columns1" = Table.RemoveColumns(#"Filtered Rows1",("Distinct Count")), #"Removed Columns" = Table.RemoveColumns(#"Removed Columns1",("Category Description")), #"Filtered Rows" = Table.SelectRows(#"Removed Columns", each ((Employee) "Dept. Total")), #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Filtered Rows", ("Quarter", "Employee"), "Attribute", "Value"), #"Renamed Columns" = Table.RenameColumns(#"Unpivoted Other Columns",(("Attribute", "Category Description"))), #"Pivoted Column" = Table.Pivot(#"Renamed Columns", List.Distinct(#"Renamed Columns"(Quarter)), "Quarter", "Value"), #"Inserted Sum" = Table.AddColumn(#"Pivoted Column", "Total", each List.Sum(((Q1), (Q2), (Q3), (Q4))), type number), #"Reordered Columns" = Table.ReorderColumns(#"Inserted Sum",("Category Description", "Employee", "Q1", "Q2", "Q3", "Q4", "Total")) in #"Reordered Columns"

Ondřej Malinský skickade in en lösning som också använde flera andra klausuler om:

Flera annat-om

Matthew Wykle skickade in en lösning med ännu ett sätt att identifiera kvarteren. Hans metod kontrollerar både att texten börjar med Q och att den andra siffran är mindre än 5:

if Text.Start((Attribute),1)="Q" and Number.From(Text.Middle((Attribute),1,1))<5 then Text.Start((Attribute),2) else "Total")

Identifiera kvartal

Christian Neuberger använde denna formel för att få anställds namn, fylldes ned och sedan filtrerade kolumn 1 för att endast inkludera Q1, Q2, Q3 eller Q4. Oz Du Soleil använde också denna metod.

Filtrerad kolumn

Excel MVP Ken Puls vinner antagligen med sin formel. Det letar efter en understrykning för att veta om detta inte är anställdas namn.

Se Kens fullständiga lösning på Excel MVP: er Attack the Data Cleansing Problem in Power Query.

Letar efter en understrykning

Gå tillbaka till huvudsidan för Podcast 2316-utmaningen.

Läs nästa artikel i denna serie: Power Query: Dealing with Multiple Identical Headers.

Intressanta artiklar...