Opomba
To je eden iz serije člankov, ki podrobno opisujejo rešitve, poslane za izziv Podcast 2316.
V svoji rešitvi za preoblikovanje podatkov sem želel, da vidim, ali stolpec vsebuje ime zaposlenega ali vrednost, kot so Q1, Q2, Q3, Q4. V svoji rešitvi sem domneval, da nihče ne bo imel imena z dvema znakoma, zato sem dodal stolpec za izračun dolžine besedila v stolpcu.
Jason M se je izognil potrebi po stolpcu Dolžina, tako da je v svoj pogojni stolpec dodal tri klavzule Else If.

Pogojni izračun za zaposlenega nato išče Quarter kot Null: če je (Quarter) = null, potem (Category Description) else null.

Tu je Jasonova koda M:
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ý je poslal rešitev, ki je uporabila tudi več klavzul Else If:

Matthew Wykle je poslal rešitev z še enim načinom prepoznavanja četrti. Njegova metoda preveri, ali se besedilo začne s Q, druga številka pa je manjša od 5:
if Text.Start((Attribute),1)="Q" and Number.From(Text.Middle((Attribute),1,1))<5 then Text.Start((Attribute),2) else "Total")

Christian Neuberger je s to formulo dobil ime zaposlenega, izpolnjen in nato filtrirani stolpec 1, da je vključeval samo Q1, Q2, Q3 ali Q4. Tudi Oz Du Soleil je uporabil to metodo.

Excel MVP Ken Puls verjetno zmaga s svojo formulo. Išče se podčrtaj, če želite vedeti, ali to ni ime zaposlenega.
Oglejte si celotno Kenovo rešitev v Excelovih MVP-jih Attack the Data Cleansing Problem v Power Query.

Vrnite se na glavno stran izziva Podcast 2316.
Preberite naslednji članek v tej seriji: Power Query: Obravnavanje več enakih glav.