IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

informer

Power Query - Ma Minute M : Table.ReplaceValue 3 paramètres dans la fonction personnalisée (custom function)

Noter ce billet
par , 17/02/2025 à 01h35 (2137 Affichages)
Table.RepalceValue cest pas si simple que ça !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Table.ReplaceValue (
   table as table,                  // Param 1
   oldValue as any,               // Param 2
   newValue as any,             //Param3
   replacer as function,        // Param 4
   columnsToSearch as list   // Param 5
) as table

replacer est une fonction avec 2 méthodes natives toutes deux CASE SENSITIVE.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Replacer.ReplaceText ( text as nullable text, old as text, new as text, ) as nullable text
Replacer.ReplaceValue ( value as any, old as any, new as any, ) as any

Illustration par l'exemple


Avec ces deux méthodes natives, l'implémentation de Table.ReplaceValue est très simple.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Table.ReplaceValue(TableSource,"Green", "Yellow", Replacer.ReplaceValue, {"Col1","Col4", "Col10"} ) 

/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Avec Replacer.ReplaceText, chaque instance de «Green»en «Yellow» dans les colonnes 1,4 & 10 de la TableSource.
 Attention c'est CASE SENSITIVE donc si «Green» apparaît en  minuscule, aucun changement ne sera apporté
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Table.ReplaceValue(TableSource,"Green", "Yellow", Replacer.ReplaceValue, {"Col1","Col4", "Col10"} ) 

/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Avec Remplacer.replacevaluet, échange uniquement le texte «Green»en «Yellow» lorsque la valeur entière  correspond à «Green».
Par conséquent, seules les cellules contenant  exactement «Green» seront mises à jour dans les colonnes 1,4 & 10 de la TableSource.
 Attention c'est CASE SENSITIVE donc si «Green» apparaît en  minuscule, aucun changement ne sera apporté.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
avec
Maintenant rentronsdans le dur, la création d'une méthode personnalisée (custom function) !

Il est possible de créer une nouvelle méthode à replacer (Param 4). La logique est alors de

  • Déclarer dans param 4 la nouvelle méthode par (customParam1 1, customparam2, customparam3) => Code de la fonction.
    • Toujours passer 3 paramètres à cette méthode. . Mon explication (?), la définition des 2 méthodes natives de Replacer en est la raison.
      • customParam1 = Param 5
      • customparam2 = Param 2
      • customparam3 = Param 3

    • null est possible
    • Le mauvais nombre de paramètres ne génère pas d'erreur mais ne produit aucun résultat.

  • Déclarer each _ dans Param 2 ou 3 pour que la boucle de traitement de chaque ligne de la table soit initié.
    • Cela initie un contexte Table qui fait que le code de la méthode est appliqué sur la ligne courante de la table



Illustration par l'exemple

Jeu de données

id;Nom;Acronyme;PrixUnitaire;Capitalisation;Volume;Change;Circulating Supply
101;Axie InfinityAXS;AXS;$4.14;$655.86M$655,857,137;$40,023,9589,704,320 AXS;1.84%;158,370,660 AXS
102;SPXspx6900;SPX;$0.6886;$641.06M$641,058,365;$44,378,25663,621,008 SPX;13.53%;930,993,090 SPX
103;StarknetSTRK;STRK;$0.2513;$648.99M$648,986,439;$48,450,884193,403,578 STRK;0.56%;2,582,076,158 STRK
104;DecentralandMANA;MANA;$0.3313;$643.38M$643,383,978;$76,646,727232,079,704 MANA;2.08%;1,942,255,184 MANA
105;RONRonin;RON;$1.02;$628.71M$628,705,705;$22,505,880ron 22,223,092;0.99%;619,389,699 RON
106;MultiversXEGLD;EGLD;$22.00;$612.39M$612,389,127;$29,738,1541,353,183 EGLD;1.98%;27,838,236 EGLD
107;PolygonMATIC;MATIC;$0.3139;$600.77M$600,773,793;$10,937,02234,963,283 MATIC;1.93%;1,913,783,718 MATIC
108;PAX GoldPAXG;PAXG;$2,881.12;$586.42M$586,418,035;$58,331,00920,222 PAXG;1.22%;203,538 PAXG
109;DeepBook ProtocolDEEP;DEEP;$0.2067;$593.62M$593,621,074;$39,922,772195,895,468 DEEP;7.98%;2,872,000,000 DEEP
110;HeliuhNTm;HNT;$3.28;$581.88M$581,878,946;$7,830,4022,400,147 HNT;2.38%;177,394,590 HNT



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
= Table.ReplaceValue( #"Ma table source", each _ , null,
(col,row,z) =>
let
lstPos = Text.PositionOf(col,row[Acronyme],Occurrence.All,Comparer.OrdinalIgnoreCase), strNewValue = lstPos
in strNewValue ,
{"Nom", "Volume", "Circulating Supply"}) /*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  • Let..in pour permettre l'affectation de variables
  • Le contexte est donné par each _ = La ligne de la table, par conséquent puisque each _ est le param2, c'est une ligne qui est passé à customParam2.
  • Attention : Le contexte est aussi donné par customParam1 = param5 {"Nom", "Volume", "Circulating Supply"}
  • Au final le contexte est la ligne pour un champ du param5
  • Il est ainsi possible d'accéder à tous les champs de la ligne par le customParamX[Nom de la colone] qui recoit each _, dans l'exemple pour accéder à la valeur d'Acromyme de la ligne c'est row[Acronyme]
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
Nom : list.png
Affichages : 33
Taille : 18,6 Ko

C'est fini !

Envoyer le billet « Power Query - Ma Minute M  :  Table.ReplaceValue 3 paramètres dans la fonction personnalisée (custom function) » dans le blog Viadeo Envoyer le billet « Power Query - Ma Minute M  :  Table.ReplaceValue 3 paramètres dans la fonction personnalisée (custom function) » dans le blog Twitter Envoyer le billet « Power Query - Ma Minute M  :  Table.ReplaceValue 3 paramètres dans la fonction personnalisée (custom function) » dans le blog Google Envoyer le billet « Power Query - Ma Minute M  :  Table.ReplaceValue 3 paramètres dans la fonction personnalisée (custom function) » dans le blog Facebook Envoyer le billet « Power Query - Ma Minute M  :  Table.ReplaceValue 3 paramètres dans la fonction personnalisée (custom function) » dans le blog Digg Envoyer le billet « Power Query - Ma Minute M  :  Table.ReplaceValue 3 paramètres dans la fonction personnalisée (custom function) » dans le blog Delicious Envoyer le billet « Power Query - Ma Minute M  :  Table.ReplaceValue 3 paramètres dans la fonction personnalisée (custom function) » dans le blog MySpace Envoyer le billet « Power Query - Ma Minute M  :  Table.ReplaceValue 3 paramètres dans la fonction personnalisée (custom function) » dans le blog Yahoo

Commentaires