par , 17/02/2025 à 01h35 (2137 Affichages)
Table.RepalceValue cest pas si simple que ça !
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.
Illustration par l'exemple
Avec ces deux méthodes natives, l'implémentation de Table.ReplaceValue est très simple.
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é
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ |
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
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]
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ |

C'est fini !