Power Query: Vérifier si les expressions d’une colonne comprennent un des mots contenus dans une liste

Publié le 07 juin 2018
par Sophie Marchand M.Sc.
Appeler fonction personnalisée

Récemment, une apprenante m’a soumis une problématique à résoudre dans Power Query qui m’apparaissait très simple au départ et qui s’est finalement avérée un peu plus complexe que prévu. L’apprenante souhaitait vérifier si les expressions contenues une colonne de sa table, comprenaient un ou l’autre des mots faisant partie d’une liste. S’il est simple de vérifier les équivalences “exactes”, il est plus ardu de vérifier si les expressions contiennent une mot sans pour autant être une expression équivalente. Cet article vise à démontrer une démarche possible pour rechercher des mots d’une liste dans Power Query.

 

Données de départ

Pour illustrer le cas, nous avons utilisé les données ci-dessous. La problématique consiste à déterminer si les mots de la colonne MOT comprennent un des mots de la liste à droite. La colonne STATUT indique le résultat recherché.

Tableaux de départ et résultat recherché

 

Solution pour trouver les mots d’une liste dans Power Query

Nous avons d’abord défini un paramètre “SearchInParameter”, que nous avons d’abord établi comme étant “Chien-loup”.

Searchin Parameter

 

Dans notre liste, nous avons ajouté une colonne, qui insère tout simplement la valeur du paramètre. Comme notre paramètre initial est “Chien-loup”, nous voyons donc apparaître cette valeur dans la nouvelle colonne “SearchIn”.

mots d'une liste dans Power Query

 

Dans la même requête, nous avons ajouté une autre colonne qui, à l’aide de la fonction Text.Contains, vérifie si le mot de la colonne “Liste” est présent dans l’expression de la colonne “SearchIn”. La fonction retourne donc un TRUE (VRAI) pour le mot “Chien” dans la liste.

mots d'une liste dans Power Query

 

L’idée est donc de procéder à l’envers. Nous allons vérifier si chacun des mots de notre liste est contenu ou non dans chacune des expressions de notre colonne MOT de nos données originales.

 

À cette étape-ci, nous avons donc filtré sur les TRUE (VRAI).

Trouver les vrais

 

Nous avons ensuite compté le nombre de lignes qui retournent un TRUE (VRAI).

Regroupement par

 

Dans ce cas-ci, nous obtenons une ligne, donc 1.

Nombre de lignes

 

IMPORTANT: À ce stade-ci, nous avons converti cette requête en fonction, que nous avons nommée fnContains. Cette fonction a un paramètre, soit l’expression dans laquelle on recherche les différents mots de la liste.

 

Vous devez analyser de grandes quantités de données et les présenter dans des rapports et tableaux de bord, avec des indicateurs de performance pertinents ? Développez vos compétences avec nos formations en Power BI.

Formations Power BI disponibles en anglais

 

Nous sommes ensuite allée dans notre requête avec la table des mots d’origine et nous avons ajouté une colonne pour appeler notre fonction personnalisée.

Appeler fonction personnalisée

 

Ce faisant, la fonction vérifie si les mots de la liste sont compris ou non dans chacun des mots de la colonne MOT et retourne “null” quand il n’y a pas de TRUE (VRAI) donc quand il n’y a pas de correspondance et retourne un chiffre lorsqu’il y a au moins une correspondance. Nous avons ensuite ajouté une colonne pour retourner un FALSE quand la colonne “Nombre” = null et TRUE dans les autres cas.

Ajout colonnes

 

Au final, nous obtenons bien les résultats recherchés au départ.

Résultat

 

Pour plus de performance, il peut s’avérer utile d’imbriquer notre liste dans une fonction Table.Buffer (pour éviter qu’elle se réactualise à chaque évaluation de la fonction).

Table.Buffer

 


Fichier d’accompagnement VIP à télécharger

Pour télécharger le fichier utilisé dans ce tutoriel, devenez membre VIP du CFO masqué.

 

Formation complémentaire

Afin d’approfondir vos connaissances avec Power BI et plus particulièrement vos compétences avec l’éditeur de requête Power Query, nous vous recommandons notre formation Recettes magiques pour transformer vos données.

 

Voici quelques commentaires d’apprenants ayant suivi la formation en ligne Recettes magiques pour transformer vos données :


CFO-Masque_Formations-en-ligne_FBLa mission du CFO masqué est de développer les compétences techniques des analystes et des contrôleurs de gestion en informatique décisionnelle avec Excel et Power BI et favoriser l’atteinte de leur plein potentiel, en stimulant leur autonomie, leur curiosité, leur raisonnement logique, leur esprit critique et leur créativité.

5 réflexions sur “Power Query: Vérifier si les expressions d’une colonne comprennent un des mots contenus dans une liste”

  1. Bonjour
    Pour répondre avec une formule Excel à cette question je propose =ESTNUM(EQUIV(1;EQUIV(“*”&Tableau2[Liste]&”*”;[@Mot];0);0)) en matricielle

    Je rencontre un problème similaire auquel j’ai répondu avec une méthode un peu différente sur laquelle je coince avec PowerQuery :
    – comment traduire une recherche avec les caractères joker : * et ? (Ch*t pour Chiot et Chat) ;
    – comment gérer la casse (si on cherche “Chauve-souris” et non “Chauve-Souris” PowerQuery répondra FAUX)

    EQUIV gère les caractères joker (on peut même chercher les “vrais” caractères * et ? en mettant un ~ devant) et ne tient pas compte de la casse

    Je vais donc mettre un fichier exemple de mon problème sur le blog

    Stéphane

  2. Bonjour,

    Merci pour l’info. Mais comment faire si je souhaite utiliser cette fonction au niveau de mon visuel afin de modifier la recherche côté interface utilisateur. Exemple, lors de la création de votre exemple on recherche le mot chien. Ok. Mais si l’utilisateur final souhaite chercher un autre mot comment faut t’il procéder au niveau visuel. Merci

    1. Bonjour,

      Pour utiliser un paramètre spécifié par l’usager, il faudrait le faire avec Power Query dans Excel (l’usager entrerait alors la valeur dans une cellule Excel qui serait reprise dans le code M) ou si on veut demeurer dans Power BI, il faudrait utiliser Microsoft Flow pour automatiser le processus.

      Au plaisir,

      Sophie

  3. Bonsoir
    Ma petite question :
    Si dans la colonne mot c’est une phrase et non juste un mot.
    Comment puis à partir de la liste des mots me dirent si plusieurs d’eux existent dans une phrase et si il y a une présence dire quel sont les mots dans une colonne distinct.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut