Power Query: utilisation de clauses Else If dans des colonnes conditionnelles - Conseils Excel

Table des matières

Remarque

Ceci fait partie d'une série d'articles détaillant les solutions envoyées pour le défi Podcast 2316.

Dans ma solution pour remodeler les données, je voulais un moyen de voir si une colonne contenait un nom d'employé ou une valeur telle que Q1, Q2, Q3, Q4. Dans ma solution, j'ai supposé que personne n'aurait un nom à 2 caractères, et j'ai donc ajouté une colonne pour calculer la longueur du texte dans la colonne.

Jason M a évité le besoin de la colonne Length en ajoutant trois clauses Else If à sa colonne conditionnelle.

Ajouter une colonne conditionnelle

Le calcul conditionnel pour Employé recherche alors que Trimestre soit nul: si (Trimestre) = null alors (Description de la catégorie) sinon nul.

Calcul conditionnel

Voici le code 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ý a envoyé une solution qui utilisait également plusieurs clauses Else If:

Multiple else-if

Matthew Wykle a envoyé une solution avec encore une autre façon d'identifier les quartiers. Sa méthode vérifie à la fois que le texte commence par Q et que le deuxième chiffre est inférieur à 5:

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

Identifier les quartiers

Christian Neuberger a utilisé cette formule pour obtenir le nom de l'employé, rempli, puis la colonne filtrée 1 pour inclure uniquement Q1, Q2, Q3 ou Q4. Oz Du Soleil a également utilisé cette méthode.

Colonne filtrée

Excel MVP Ken Puls gagne probablement avec sa formule. Il recherche un trait de soulignement pour savoir s'il ne s'agit pas du nom de l'employé.

Consultez la solution complète de Ken sur Excel MVP attaquent le problème de nettoyage des données dans Power Query.

À la recherche d'un trait de soulignement

Revenez à la page principale du défi Podcast 2316.

Lisez l'article suivant de cette série: Power Query: Traitement de plusieurs en-têtes identiques.

Articles intéressants...