Chercher et remplacer un texte avec DAX

Vous souhaitez modifier le prix d’un produit si son libellé contient le mot « rouge » ? Vous souhaitez remplacer les premiers caractères d’un code produit par un autre code ? Vous devez supprimer toutes les occurrences de certains mots-clés ? Dans toutes ces situations, vous allez devoir utiliser une fonction permettant de chercher et/ou de remplacer un texte dans un autre texte.

chercher et remplacer un texte avec DAX

D’une manière générale, il est plus performant de chercher et remplacer un texte dans Power Query grâce au langage M. Néanmoins, cette situation n’est pas toujours possible, en particulier si vous souhaitez modifier le texte dans une colonne calculée. La solution est alors de chercher et remplacer un texte avec DAX dans Power BI. Et vous avez de la chance ! Le langage DAX propose 6 fonctions de recherche et remplacement. Découvrons-les ensemble ! 🙂

#1 – Chercher un texte avec FIND

La fonction FIND retourne la première position du texte à rechercher (de gauche à droite).

FIND ( texte à rechercher , texte initial , <position de départ> , <valeur de retour alternative> )
  • La position de départ est facultative. Le premier caractère correspond à la position 1 (valeur par défaut).
  • Si le texte à rechercher n’est pas trouvé, la fonction FIND retourne une erreur sauf si une valeur de retour alternative est renseignée.

La fonction FIND est sensible à la casse et aux accents.

Exemple

La formule DAX suivante retourne la première position du mot « crumble » dans les titres des recettes, ou la valeur 0 si le mot n’est pas trouvé.

Position = FIND ( "crumble" , Table[Recettes] , 1 , 0 )
RecettesPosition
Cake sans beurre kiwis et pêches0
Crumble pommes, chocolat et noisettes0
Tarte aux myrtilles façon crumble27
Crumble pommes, poires et kiwis0
Gâteau crumble banane et rhubarbe8

La fonction FIND étant sensible à la casse, le mot « crumble » est différent du mot « Crumble ». La valeur de retour est donc le chiffre 0 pour la deuxième ligne et pour la quatrième ligne.

La fonction SEARCH retourne la première position du texte à rechercher (de gauche à droite). La fonction SEARCH autorise l’utilisation de caractères génériques pour rechercher n’importe quel caractère unique (?) ou n’importe quelle séquence de caractères (*).

SEARCH ( texte à rechercher , texte initial , <position de départ> , <valeur de retour alternative> )
  • La position de départ est facultative. Le premier caractère correspond à la position 1 (valeur par défaut).
  • Si le texte à rechercher n’est pas trouvé, la fonction SEARCH retourne une erreur sauf si une valeur de retour alternative est renseignée.

La fonction SEARCH n’est pas sensible à la casse mais respecte les accents.
Pour rechercher les caractères ? ou * spécifiquement, vous devez utiliser un tilde (~) avant ces caractères.

Exemple

La formule DAX suivante retourne la première position de la séquence commençant par la lettre « p » et se terminant par la lettre « s ».

Position = SEARCH ( "p*s" , Table[Recettes] , 1 , 0 )
RecettesPosition
Cake sans beurre kiwis et pêches27
Crumble pommes, chocolat et noisettes9
Tarte aux myrtilles façon crumble0
Crumble pommes, poires et kiwis9
Gâteau crumble banane et rhubarbe0

La fonction SEARCH n’étant pas sensible à la casse, la recherche des séquences « p*s » ou « P*s » ou « p*S » ou « P*S » donne le même résultat.

#3 – Chercher un texte avec CONTAINSSTRING

La fonction CONTAINSSTRING retourne la valeur TRUE si un texte contient le texte à rechercher. La fonction CONTAINSSTRING autorise l’utilisation de caractères génériques pour rechercher n’importe quel caractère unique (?) ou n’importe quelle séquence de caractères (*).

CONTAINSSTRING ( texte initial , texte à rechercher )
  • Si le texte à rechercher n’est pas trouvé, la fonction CONTAINSSTRING renvoie la valeur FALSE.
  • Attention, l’ordre des arguments est l’inverse de l’ordre observé pour les fonctions FIND et SEARCH.

La fonction CONTAINSSTRING n’est pas sensible à la casse mais respecte les accents.
Pour rechercher les caractères ? ou * spécifiquement, vous devez utiliser un tilde (~) avant ces caractères.

Exemple

La formule DAX suivante retourne TRUE si une séquence commençant par la lettre « p » et se terminant par la lettre « s » est trouvée, et FALSE sinon.

Presence = CONTAINSSTRING ( Table[Recettes] , "p*s" )
RecettesPresence
Cake sans beurre kiwis et pêchesTRUE
Crumble pommes, chocolat et noisettesTRUE
Tarte aux myrtilles façon crumbleFALSE
Crumble pommes, poires et kiwisTRUE
Gâteau crumble banane et rhubarbeFALSE

La fonction CONTAINSSTRING n’étant pas sensible à la casse, la recherche des séquences « p*s » ou « P*s » ou « p*S » ou « P*S » donne le même résultat.

#4 – Chercher un texte avec CONTAINSSTRINGEXACT

La fonction CONTAINSSTRINGEXACT retourne la valeur TRUE si un texte contient le texte à rechercher.

CONTAINSSTRINGEXACT ( texte initial , texte à rechercher )
  • Si le texte à rechercher n’est pas trouvé, la fonction CONTAINSSTRINGEXACT renvoie la valeur FALSE.
  • Attention, l’ordre des arguments est l’inverse de l’ordre observé pour les fonctions FIND et SEARCH.

La fonction CONTAINSSTRINGEXACT est sensible à la casse et aux accents.

Exemple

La formule DAX suivante renvoie TRUE si le mot « crumble » est présent dans les titres des recettes, ou FALSE sinon.

Presence = CONTAINSSTRINGEXACT ( Table[Recettes] , "crumble" )
RecettesPresence
Cake sans beurre kiwis et pêchesFALSE
Crumble pommes, chocolat et noisettesFALSE
Tarte aux myrtilles façon crumbleTRUE
Crumble pommes, poires et kiwisFALSE
Gâteau crumble banane et rhubarbeTRUE

La fonction CONTAINSSTRINGEXACT étant sensible à la casse, le mot « crumble » est différent du mot « Crumble ». La valeur de retour est donc la valeur FALSE pour la deuxième ligne et pour la quatrième ligne.

#5 – Remplacer un texte avec REPLACE

La fonction REPLACE permet de remplacer un certain nombre de caractères par une nouvelle chaîne de texte.

REPLACE ( texte initial , position de départ , nombre de caractères à remplacer , nouveau texte )
  • Si la position de départ est supérieure au nombre de caractères du texte initial, le nouveau texte est ajouté à la suite du texte initial.
  • Si le nombre de caractères à remplacer est nul ou vide, le nouveau texte est ajouté à la position de départ sans qu’aucun caractère ne soit remplacé.
Exemple

La formule DAX suivante ajoute le mot « Dessert –  » au début du titre de chaque recette.

Nouvelles recettes = REPLACE ( Table[Recettes] , 1 , 0 , "Dessert - " )
RecettesNouvelles recettes
Cake sans beurre kiwis et pêchesDessert – Cake sans beurre kiwis et pêches
Crumble pommes, chocolat et noisettesDessert – Crumble pommes, chocolat et noisettes
Tarte aux myrtilles façon crumbleDessert – Tarte aux myrtilles façon crumble
Crumble pommes, poires et kiwisDessert – Crumble pommes, poires et kiwis
Gâteau crumble banane et rhubarbeDessert – Gâteau crumble banane et rhubarbe

#6 – Remplacer un texte avec SUBSTITUTE

La fonction SUBSTITUTE remplace un texte existant par un nouveau texte.

SUBSTITUTE ( texte initial , texte à remplacer , nouveau texte , <nombre de remplacements> )
  • Le nombre de remplacements est facultatif et permet de définir le nombre de fois où le texte existant est remplacé par le nouveau texte.
  • Si le nombre de remplacements n’est pas donné, chaque instance du texte à remplacer est modifiée par le nouveau texte.

La fonction SUBSTITUTE est sensible à la casse et aux accents.

Exemple

La formule DAX suivante remplace le mot « crumble » par le mot « sablé ».

Nouvelles recettes = SUBSTITUTE ( Table[Recettes] , "crumble" , "sablé" )
RecettesNouvelles recettes
Cake sans beurre kiwis et pêchesCake sans beurre kiwis et pêches
Crumble pommes, chocolat et noisettesCrumble pommes, chocolat et noisettes
Tarte aux myrtilles façon crumbleTarte aux myrtilles façon sablé
Crumble pommes, poires et kiwisCrumble pommes, poires et kiwis
Gâteau crumble banane et rhubarbeGâteau sablé banane et rhubarbe

La fonction SUBSTITUTE étant sensible à la casse, le mot « crumble » est différent du mot « Crumble ». Le titre de la recette n’est donc pas modifié à la deuxième ligne et à la quatrième ligne.

Conclusion : 6 fonctions pour chercher et remplacer un texte avec DAX

Le langage DAX propose 6 fonctions pour chercher et remplacer un texte :

  • Les fonctions FIND et SEARCH qui retournent la position du texte recherché dans le texte initial. Contrairement à la fonction FIND, la fonction SEARCH ne tient pas compte de la casse et permet l’utilisation de caractères génériques.
  • Les fonctions CONTAINSSTRING et CONTAINSSTRINGEXACT qui retournent TRUE si le texte recherché est présent dans le texte initial et FALSE sinon. Contrairement à la fonction CONTAINSSTRINGEXACT, la fonction CONTAINSSTRING ne tient pas compte de la casse et permet l’utilisation de caractères génériques.
  • La fonction REPLACE qui remplace un certain nombre de caractères par un nouveau texte.
  • La fonction SUBSTITUTE qui recherche un texte et le remplace par un nouveau texte.