Power Query: uso de cláusulas Else If en columnas condicionales - Consejos de Excel

Tabla de contenido

Nota

Este es uno de una serie de artículos que detallan las soluciones enviadas para el desafío Podcast 2316.

En mi solución para remodelar los datos, quería una forma de ver si una columna contenía el nombre de un empleado o un valor como Q1, Q2, Q3, Q4. En mi solución, asumí que nadie tendría un nombre con 2 caracteres, por lo que agregué una columna para calcular la longitud del texto en la columna.

Jason M evitó la necesidad de la columna Longitud al agregar tres cláusulas Else If a su columna condicional.

Agregar columna condicional

El cálculo condicional para Empleado busca que el Trimestre sea Nulo: si (Trimestre) = nulo, entonces (Descripción de la categoría) si no es nulo.

Cálculo condicional

Aquí está el código M de Jason:

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ý envió una solución que también usaba múltiples cláusulas Else If:

Múltiples si no

Matthew Wykle envió una solución con otra forma de identificar las monedas. Su método verifica que el texto comience con Q y que el segundo dígito sea menor que 5:

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

Identificar trimestres

Christian Neuberger usó esta fórmula para obtener el nombre del empleado, rellenar y luego filtrar la columna 1 para incluir solo Q1, Q2, Q3 o Q4. Oz Du Soleil también utilizó este método.

Columna filtrada

Ken Puls, MVP de Excel, probablemente gane con su fórmula. Busca un guión bajo para saber si este no es el nombre del empleado.

Vea la solución completa de Ken en Excel MVPs Attack the Data Cleansing Problem en Power Query.

Buscando un subrayado

Regrese a la página principal del desafío Podcast 2316.

Lea el siguiente artículo de esta serie: Power Query: Manejo de varios encabezados idénticos.

Articulos interesantes...