Power Query: Bruk annet hvis klausuler i betingede kolonner - Excel-tips

Innholdsfortegnelse

Merk

Dette er en av en serie artikler som beskriver løsninger som er sendt inn for Podcast 2316-utfordringen.

I løsningen min for å omforme dataene ønsket jeg en måte å se om en kolonne inneholdt et ansattes navn eller en verdi som Q1, Q2, Q3, Q4. I min løsning antok jeg at ingen ville ha et navn med 2 tegn, og så la jeg til en kolonne for å beregne lengden på teksten i kolonnen.

Jason M unngikk behovet for kolonnen Lengde ved å legge til tre andre hvis klausuler i hans betingede kolonne.

Legg til betinget kolonne

Betinget beregning for ansatt ser deretter ut til at kvartal er null: hvis (kvartal) = null, så (kategoribeskrivelse) ellers null.

Betinget beregning

Her er Jasons M-kode:

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ý sendte inn en løsning som også brukte flere Else If-klausuler:

Flere annet-hvis

Matthew Wykle sendte inn en løsning med enda en måte å identifisere kvartalene på. Metoden hans sjekker både at teksten starter med Q og det andre sifferet er mindre enn 5:

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

Identifiser kvartaler

Christian Neuberger brukte denne formelen for å få ansattes navn, fylt ut og deretter filtrert kolonne 1 for kun å inkludere Q1, Q2, Q3 eller Q4. Oz Du Soleil brukte også denne metoden.

Filtrert kolonne

Excel MVP Ken Puls vinner sannsynligvis med sin formel. Det ser etter en understreking for å vite om dette ikke er ansattens navn.

Se Ken sin fulle løsning på Excel MVPs Attack the Data Cleansing Problem in Power Query.

Ser etter en understreking

Gå tilbake til hovedsiden for Podcast 2316-utfordringen.

Les neste artikkel i denne serien: Power Query: Dealing with Multiple Identical Headers.

Interessante artikler...