Power Query: Použití klauzulí Else If v podmíněných sloupcích - 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.

Ve svém řešení přetváření dat jsem chtěl způsob, jak zjistit, zda sloupec obsahoval jméno zaměstnance nebo hodnotu, jako je Q1, Q2, Q3, Q4. Ve svém řešení jsem předpokládal, že nikdo nebude mít jméno se 2 znaky, a tak jsem přidal sloupec pro výpočet délky textu ve sloupci.

Jason M se vyhnul potřebě sloupce Délka přidáním tří klauzulí Else If do svého Podmíněného sloupce.

Přidejte podmíněný sloupec

Podmíněný výpočet pro zaměstnance poté vyhledá Quarter jako Null: if (Quarter) = null then (Category Description) else null.

Podmíněný výpočet

Tady je Jasonův M kód:

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ý poslal řešení, které používalo také několik klauzulí Else If:

Několik dalších - pokud

Matthew Wykle poslal řešení s ještě jiným způsobem, jak identifikovat pokoje. Jeho metoda kontroluje, že text začíná písmenem Q a druhá číslice je menší než 5:

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

Určete čtvrtiny

Christian Neuberger použil tento vzorec k získání jména zaměstnance, vyplnění a poté filtrovaného sloupce 1 tak, aby obsahoval pouze Q1, Q2, Q3 nebo Q4. Oz Du Soleil také použil tuto metodu.

Filtrovaný sloupec

Excel MVP Ken Puls pravděpodobně vyhrává se svým vzorcem. Hledá podtržítko, aby zjistil, zda se nejedná o jméno zaměstnance.

Podívejte se na úplné řešení Kena na stránkách Excel MVP Attack the Data Cleansing Problem in Power Query.

Hledáte podtržítko

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: Práce s více identickými hlavičkami.

Zajímavé články...