PWQ M Table.ReplaceValue – Pq 3 param. oblig dans la fonction perso replacer?

  • PWQ M Table.ReplaceValue – Pq 3 param. oblig dans la fonction perso replacer?

    Posté par paul sur 15 février 2025 at 11h43

    Bonjour à tous,

    Je me forme au langage M et sa logique me déroute d’autant plus que je trouve la documentation très lacunaire et souvent basé sur des exemples qui doivent être interprété pour en tirer un principe.

    La fonction Table.ReplaceValue en est un exemple d’école pour moi.

    Ma demande initiale était de supprimer toutes les itérations dans des champs de la valeur correspondant à un autre champ. La valeur du champ source de l’itération était celui de la même ligne que les valeurs des champs dans lesquels la suppression était à réaliser.
    Voir ici Power Query -Delete column substring corresponding to the text of another column (insensitive case) ou ici Power Query – Supprimer dans une col le texte d’une autre colonne en case insensitive

    <br data-bm=”89″>La communauté m’a apporté la solution mais aussi beaucoup de questions auxquelles j’ai globalement pu répondre sauf à une pourquoi la fonction personnalisée de replacer dans Table.ReplaceValue nécessite obligatoirement 3 paramètres sinon ça ne fonctionne pas même si ça ne genère pas d’erreur ?

    <pre class=”language-markup”>Table.ReplaceValue(table as table, oldValue as any, newValue as any, replacer as function, columnsToSearch as list) as table

    avec pour replacer deux méthode natives voir ici

    <pre class=”language-plaintext”>Replacer.ReplaceText
    Replacer.ReplaceValue.

    J’avais emis l’explication suivante
    En déclarant une fonction replacer personnalisée, en fait on ajoute une nouvelle méthode à l’objet replacer.
    Mais la construction de l’objet replacer, tout en permettant l’ajout d’une nouvelle méthode, exige que la nouvelle méthode passe 3 paramètres pour être efficace. En fait, j’ai testé avec 2 paramètres : s’il n’y a pas d’erreur, il n’y a pas d’action.

    Merci par avance pour vos retours

    • This discussion was modified 3 months ago by  paul.
    • This discussion was modified 3 months ago by  paul.
    • This discussion was modified 3 months ago by  paul.
    ypicot a répondu 6 days ago 2 Membres · 1 Réponse
  • 1 Réponse
  • ypicot

    Member
    13 mai 2025 at 12h39

    Bonjour

    J’espère avoir compris ta question.

    On va prendre la fonction Replacer.ReplaceText, qui n’est qu’une spécialisation de Replacer.ReplaceValue (paramètres de type “text” au lieu de “any”).

    Dans tous les langages que je connais, ce type de fonction prend toujours 3 paramètres (pas toujours dans cet ordre, mais c’est du détail) :

    • La chaine dans laquelle on fait la recherche (le tas de foin)
    • La chaine à chercher (l’aiguille)
    • La nouvelle chaine (la nouvelle aiguille)

    La fonction Table.ReplaceValue va donc, pour chaque ligne, envoyer ces trois arguments.

    Les deux dernières sont envoyées explicitement, ce sont les “OldValue” et “NewValues”. La première, elle, va être la valeur du champ concerné pour chaque ligne de la table.

    Par contre, je ne comprends pas bien ta dernière phrase : “s’il n’y a pas d’erreur, il n’y a pas d’action”. Si je créé une fonction n’acceptant que deux paramètres, je me fais jeter si je veux l’utiliser dans un Table.ReplaceValue

Connectez-vous pour répondre.