Power Query: Usando cláusulas Else If em colunas condicionais - Dicas do Excel

Índice

Nota

Este é um de uma série de artigos detalhando soluções enviadas para o desafio Podcast 2316.

Em minha solução para remodelar os dados, eu queria uma maneira de ver se uma coluna continha o nome de um funcionário ou um valor como Q1, Q2, Q3, Q4. Em minha solução, presumi que ninguém teria um nome com 2 caracteres, então adicionei uma coluna para calcular o comprimento do texto na coluna.

Jason M evitou a necessidade da coluna Comprimento adicionando três cláusulas Else If à sua coluna condicional.

Adicionar coluna condicional

O cálculo condicional para Funcionário então procura Trimestre como Nulo: if (Trimestre) = nulo então (Descrição da categoria) senão nulo.

Cálculo condicional

Aqui está o 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ý enviou uma solução que também usava várias cláusulas Else If:

Vários else-if

Matthew Wykle enviou uma solução com mais uma maneira de identificar os trimestres. Seu método verifica se o texto começa com Q e se o segundo dígito é 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 usou esta fórmula para obter o nome do funcionário, preenchido e, em seguida, coluna filtrada 1 para incluir apenas Q1, Q2, Q3 ou Q4. Oz Du Soleil também usou esse método.

Coluna filtrada

O MVP da Excel, Ken Puls, provavelmente vence com sua fórmula. Ele procura um sublinhado para saber se este não é o nome do funcionário.

Veja a solução completa de Ken em Excel MVPs Atacam o Problema de Limpeza de Dados no Power Query.

Procurando um sublinhado

Volte para a página principal do desafio Podcast 2316.

Leia o próximo artigo desta série: Power Query: Lidando com vários cabeçalhos idênticos.

Artigos interessantes...