# Fonctions de transformation prises en charge - Nettoyage des données

Dans le champ de saisie de formule, vous pouvez écrire une expression basique ou complexe pour transformer les données.\
\
Les expressions sont composées soit d’une valeur, d’une fonction, d’une opération, soit d’une autre expression entre parenthèses. Voir ci-dessous la description de chacune d’elles.

{% hint style="info" %}
Les fonctions peuvent être imbriquées, ex : `SHA256(LOWER(user.email))`
{% endhint %}

## Fonctions disponibles

| NOM DE LA FONCTION                                                           | CE QU’ELLE FAIT                                                                                                                                                                                                                                                                      | Exemple                                                                                                                                                                                                                                                                                                                                       |
| ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| EXTRACT(text, delimiter, position)                                           | Extrait du texte donné la sous-chaîne à la position donnée, après séparation par le délimiteur donné.                                                                                                                                                                                | <p><code>EXTRACT("a-b-c", "-", 1)</code><br><em>retourne <code>"b"</code></em></p><p><em><code>EXTRACT("a-b-c", "-", 0)</code></em><br><em>retourne <code>"a"</code></em></p>                                                                                                                                                                 |
| SUBSTITUTE(text, search\_text,substitute\_text)                              | Substitue new\_text à old\_text dans une chaîne de texte. Utilisez SUBSTITUTE lorsque vous souhaitez remplacer un texte spécifique dans une chaîne de texte.                                                                                                                         | `SUBSTITUTE("The-Clone-Wars", "-", ".")`retourne `"The.Clone.Wars"`                                                                                                                                                                                                                                                                           |
| REPLACE(sourceStr, pattern, replaceStr)                                      | Remplace chaque correspondance du pattern (une expression regex) dans sourceStr.                                                                                                                                                                                                     | <p><code>REPLACE("The Clone Wars", "\s", ".")</code><br>retourne <code>"The.Clone.Wars"</code><br></p><p><code>REPLACE('0123456789', '(\[0-9]{2})', '$1-')</code><br>retourne</p><p><code>01-23-45-67-89</code></p>                                                                                                                           |
| SHA256(stringToHash)                                                         | Retourne un hash SHA256 de la chaîne donnée                                                                                                                                                                                                                                          | <p><code>SHA256("test")</code><br>retourne <code>"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08"</code></p>                                                                                                                                                                                                                |
| MD5(stringToHash)                                                            | Retourne un hash MD5 de la chaîne donnée                                                                                                                                                                                                                                             | <p><code>MD5("test")</code><br>retourne<br><code>"098f6bcd4621d373cade4e832627b4f6"</code></p>                                                                                                                                                                                                                                                |
| COALESCE(value1, value2, ...)                                                | Retourne la première valeur de la liste qui n’est pas vide                                                                                                                                                                                                                           | <p><code>COALESCE("123", "hello")</code><br>retourne<br><code>"123"</code></p>                                                                                                                                                                                                                                                                |
| CONCAT(string1, string2, ...)                                                | <p>Concatène plusieurs valeurs dans une seule propriété. Des séparateurs peuvent être spécifiés :<br>CONCAT(prop1, "</p>                                                                                                                                                             | ", prop2, "                                                                                                                                                                                                                                                                                                                                   |
| TRIM(text)                                                                   | Supprime tous les espaces, retours à la ligne, tabulations au début et à la fin d’un texte.                                                                                                                                                                                          | <p><code>TRIM(" \Hello World \n")</code><br>retourne<br><code>"Hello World"</code></p>                                                                                                                                                                                                                                                        |
| SELECT(sourceStr, pattern, \<position>)                                      | <p>Retourne la première correspondance du pattern (une expression regex) dans sourceStr.<br>Si le troisième paramètre est défini, il retournera le groupe correspondant à l’intérieur de la correspondance.</p>                                                                      | <p><code>SELECT("From A to Z alphabet", 'A(.\*?)Z")</code><br>retourne<br><code>"A to Z"</code></p>                                                                                                                                                                                                                                           |
| LOWER(text)                                                                  | Convertit toutes les lettres majuscules d’une chaîne de texte en minuscules                                                                                                                                                                                                          | <p><code>LOWER("ABC")</code><br>retourne<br><code>"abc"</code></p>                                                                                                                                                                                                                                                                            |
| UPPER(text)                                                                  | Convertit toutes les lettres minuscules d’une chaîne de texte en majuscules                                                                                                                                                                                                          | <p><code>UPPER("abc")</code><br>retourne<br><code>"ABC"</code></p>                                                                                                                                                                                                                                                                            |
| NUMBER(value1)                                                               | Convertit une chaîne en nombre                                                                                                                                                                                                                                                       | <p><code>NUMBER("123.456")</code> retourne<br><code>123.456</code></p><p><code>NUMBER("not a number")</code><br>retourne<br><code>null</code></p>                                                                                                                                                                                             |
| STRING(value)                                                                | Convertit un nombre ou n’importe quelle valeur en chaîne                                                                                                                                                                                                                             | <p><code>STRING(123.456)</code> retourne<br><code>"123.456"</code></p><p><code>STRING(true)</code><br>retourne<br><code>"true"</code></p><p><code>STRING(null)</code><br>retourne<br><code>""</code></p>                                                                                                                                      |
| ENCODE\_BASE64(value1)                                                       | Encode une chaîne en base64                                                                                                                                                                                                                                                          | <p><code>ENCODE\_BASE64("hello")</code><br>retourne<br><code>"aGVsbG8="</code></p>                                                                                                                                                                                                                                                            |
| DECODE\_BASE64(value1)                                                       | Décode une chaîne depuis le base64                                                                                                                                                                                                                                                   | <p><code>DECODE\_BASE64("aGVsbG8=")</code><br>retourne<br><code>"hello"</code></p>                                                                                                                                                                                                                                                            |
| TIMESTAMP()                                                                  | Retourne l’horodatage de la date actuelle                                                                                                                                                                                                                                            | `TIMESTAMP ()` retourne une valeur comme `1674832519845` (change avec l’heure actuelle)                                                                                                                                                                                                                                                       |
| LEFT(text, length)                                                           | Retourne le nombre demandé de caractères depuis le début d’une chaîne ou d’un nombre.                                                                                                                                                                                                | <p><code>LEFT("Hello world", 3)</code><br>retourne<br><code>"Hel"</code></p>                                                                                                                                                                                                                                                                  |
| RIGHT(text, length)                                                          | Retourne le nombre demandé de caractères depuis la fin d’une chaîne ou d’un nombre.                                                                                                                                                                                                  | <p><code>RIGHT("Hello world", 2)</code><br>retourne<br><code>"ld"</code></p>                                                                                                                                                                                                                                                                  |
| CHAR(text, position)\*                                                       | Retourne le caractère à la position spécifiée (commence à 0).                                                                                                                                                                                                                        | <p><code>CHAR("Hello world", 5)</code><br>retourne<br><code>"o"</code></p>                                                                                                                                                                                                                                                                    |
| IF(condition,resultIfTrue,resultIfFalse)                                     | Retourne le deuxième argument si le premier argument est vrai, sinon le troisième argument                                                                                                                                                                                           | `IF(city="Paris", ListA, ListB)`                                                                                                                                                                                                                                                                                                              |
| SWITCH(expression, value1, result1, \[value2, result2], ..., \[default])     | Évalue l’expression par rapport à une liste de valeurs et retourne le résultat correspondant à la première correspondance. Si aucune correspondance n’est trouvée, retourne la valeur par défaut optionnelle, ou null si aucun défaut n’est fourni.                                  | <p><code>SWITCH(country, "FR", "France", "US", "United States", "Unknown")</code><br>retourne <code>"France"</code> si country est <code>"FR"</code>, <code>"Unknown"</code> si aucune correspondance</p><p><code>SWITCH(LOWER(status), "active", 1, "inactive", 0)</code><br>retourne <code>1</code> si status est <code>"Active"</code></p> |
| ISEMPTY(value)                                                               | Retourne si la valeur est vide ou non                                                                                                                                                                                                                                                | <p>ISEMPTY("abc")<br>retourne<br>false</p>                                                                                                                                                                                                                                                                                                    |
| SIZE(array or object)                                                        | Retourne le nombre d’éléments dans la liste                                                                                                                                                                                                                                          | <p><code>SIZE(items)</code><br>retourne le nombre d’éléments</p>                                                                                                                                                                                                                                                                              |
| LENGTH(string)                                                               | Retourne le nombre de caractères dans la chaîne                                                                                                                                                                                                                                      | <p><code>LENGTH("abc")</code><br>retourne<br><code>3</code></p>                                                                                                                                                                                                                                                                               |
| SUBSTRING(text, pos1, pos2)                                                  | Retourne une nouvelle chaîne composée des caractères entre les deux positions définies par pos1 et pos2. Les positions commencent à 0. Si un nombre négatif est donné, les positions commencent à partir de la fin de la chaîne. Si pos2 est omis, la fin de la chaîne est utilisée. | <p><code>SUBSTRING("hello beautiful world", 6, 14)</code><br>retourne<br><code>"beautiful"</code></p>                                                                                                                                                                                                                                         |
| JSON\_PARSE(string)                                                          | <p>Analyse une chaîne JSON (fonctionne pour les objets et les tableaux).<br>Utile pour créer une propriété d’objet ou de tableau qui contiendra toutes les propriétés ou éléments présents dans un JSON sérialisé que vous pourriez avoir dans une autre propriété d’événement</p>   | <p><code>JSON\_PARSE('{"optin":1,"message":"ok"}')</code><br>retourne un objet avec une <code>optin</code> clé égale à <code>1</code> et <code>message</code> clé égale à <code>"ok"</code></p><p><code>JSON\_PARSE('\["morgan","justine"]')</code><br>retourne un tableau contenant <code>"morgan"</code> et <code>"justine"</code></p>      |
| JSON\_STRINGIFY(value, defaultValue)                                         | <p>Sérialise une valeur en JSON.<br>(Optionnel) Vous pouvez spécifier un <code>defaultValue</code> dans le cas où <code>value</code> est <code>undefined</code></p>                                                                                                                  | <p><code>JSON\_STRINGIFY({"message":"ok"})</code><br>retourne une chaîne égale à <code>'{"message":"ok"}'</code></p>                                                                                                                                                                                                                          |
| VALUE\_FROM\_JSON(string, path)                                              | Extrait une valeur d’une chaîne de données formatée en JSON                                                                                                                                                                                                                          | <p><code>VALUE\_FROM\_JSON('{"info":{"code":42},"message":"ok"}', 'info.code')</code></p><p>retourne</p><p><code>42</code></p>                                                                                                                                                                                                                |
| GET(property name)                                                           | <p>GET(name) retourne la valeur de la propriété d’événement donnée.<br>Utile pour les noms de propriété qui contiennent un caractère spécial comme "-"</p>                                                                                                                           | <p><code>GET("droid-type")</code></p><p>retourne</p><p><code>"r2d2"</code><br><br><code>GET("invalidProperty")</code><br>retourne<br><code>null</code></p>                                                                                                                                                                                    |
| GETHEADER(name)                                                              | GETHEADER(name) retourne la valeur de l’en-tête http donné                                                                                                                                                                                                                           | <p><code>GETHEADER("Accept-Language")</code></p><p>retourne</p><p><code>"fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3"</code></p>                                                                                                                                                                                                                      |
| GETCOOKIE(name)                                                              | GETCOOKIE(name) retourne la valeur du cookie http donné                                                                                                                                                                                                                              | <p><code>GETCOOKIE("cart")</code></p><p>retourne</p><p><code>"empty"</code></p>                                                                                                                                                                                                                                                               |
| DATEPARSE(str, format)                                                       | Prend une date dans un format spécifique et la convertit en une date correcte                                                                                                                                                                                                        | <p><code>DATEPARSE('2023-05-23', 'yyyy-MM-dd')</code> retourne<br><code>2023-05-23T00:00:00.000+01:00</code><br><a href="supported-transformation-functions/format-a-date">voir plus d’informations sur le format</a></p>                                                                                                                     |
| DATEFORMAT(date, format)                                                     | Prend une date au format ISO-8601 ou timestamp et la convertit au format spécifié                                                                                                                                                                                                    | <p><code>DATEFORMAT('2023-01-31T23:59:00.000+01:00', 'yyyy-MM-dd HH:mm')</code> retourne<br><code>2023-01-31 23:59</code><br><a href="supported-transformation-functions/format-a-date">voir plus d’informations sur le format</a></p>                                                                                                        |
| DATEADD(date, interval, unit)                                                | Ajoute l’intervalle comme une unité (années, mois, semaines, jours, heures, minutes, secondes)                                                                                                                                                                                       | <p><code>DATEADD('2023-01-23T00:05:00.000+01:00', 3, 'days')</code><br>retourne<br><code>2023-01-26T00:05:00.000+01:00</code></p>                                                                                                                                                                                                             |
| DATESUB(date, interval, unit)                                                | Supprime l’intervalle comme une unité (années, mois, semaines, jours, heures, minutes, secondes)                                                                                                                                                                                     | <p><code>DATESUB('2023-01-23T00:05:00.000+01:00', 3, 'days')</code><br>retourne<br><code>2023-01-20T00:05:00.000+01:00</code></p>                                                                                                                                                                                                             |
| DATEDIFF(date1, date2, unit)                                                 | Retourne l’intervalle entre deux dates dans l’unité                                                                                                                                                                                                                                  | <p><code>DATEDIFF('2023-01-20T00:05:00.000+01:00', '2023-01-23T00:05:00.000+01:00', 'days')</code><br>retourne<br><code>0</code></p>                                                                                                                                                                                                          |
| AGE(date, unit)                                                              | Retourne le temps écoulé depuis la date donnée dans l’unité (si l’unité n’est pas spécifiée, les années sont utilisées par défaut)                                                                                                                                                   | <p><code>AGE('2022-01-20T00:05:00.000+01:00')</code><br>retourne<br><code>1</code> en 2023</p>                                                                                                                                                                                                                                                |
| YEAR(date), MONTH(date), DAY(date), HOUR(date), MINUTES(date), SECONDS(date) | Retourne l’unité de date spécifiée                                                                                                                                                                                                                                                   | <p><code>YEAR('2023-01-20T00:05:00.000+01:00')</code><br>retourne<br><code>2023</code>, <code>MONTH</code> pour la même date retourne <code>1</code>, etc</p>                                                                                                                                                                                 |
| TIMEZONE(date)                                                               | Retourne le fuseau horaire en UTC                                                                                                                                                                                                                                                    | <p><code>TIMEZONE('2023-01-20T00:05:00.000+01:00')</code><br>retourne<br><code>UTC+1</code></p>                                                                                                                                                                                                                                               |
| TODAY()                                                                      | Retourne la date actuelle au format ISO-8601                                                                                                                                                                                                                                         | `TODAY()` peut retourner `2023-01-20T00:05:00.000+01:00`, en supposant que la date actuelle est le 20 janvier 2023                                                                                                                                                                                                                            |

## Opérateurs

| **Opérateur**                           | **Description**                                                                                                                                                                                                                                       | **Exemple**                   |
| --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| =, ==                                   | <p>Retourne true si la partie gauche est égale à la partie droite.<br>Si l’une des parties est un tableau, vérifie si certaines valeurs sont égales entre les deux parties.</p>                                                                       | `gender = "F"`                |
| !=, <>                                  | Inverse de ce qui précède                                                                                                                                                                                                                             | `gender != "F"`               |
| AND ou &&                               | Effectue un AND booléen entre les deux parties                                                                                                                                                                                                        | `age >18 AND gender = "M"`    |
| OR ou \|\|                              | Effectue un OR booléen entre les deux parties                                                                                                                                                                                                         | `age >18 OR gender = "M"`     |
| NOT(expression)                         | Effectue un NOT booléen sur l’expression                                                                                                                                                                                                              | `NOT(age>18)`                 |
| IN()                                    | Retourne true si la partie gauche est égale à au moins une valeur à droite.                                                                                                                                                                           | `currency IN("€", "$", "£")`  |
| !IN                                     | Retourne true si aucune des valeurs à droite n’est égale à la valeur à gauche.                                                                                                                                                                        | `currency !IN("€", "$", "£")` |
| <, >, <=, or >=                         | <p>Compare deux valeurs<br>Si l’une des valeurs est un tableau, vérifie qu’au moins une des valeurs correspond.</p>                                                                                                                                   | `age > 18`                    |
| BETWEEN()                               | Vérifie si la valeur de gauche est entre les deux valeurs passées en arguments. Si la valeur de gauche est un tableau, vérifie qu’au moins une des valeurs correspond.                                                                                | `age BETWEEN(7, 80)`          |
| EXISTS()                                | Vérifie si la propriété existe                                                                                                                                                                                                                        | `EXISTS(my_property)`         |
| \~ or !\~                               | <p>Vérifie si la valeur de gauche correspond à la regex de la valeur de droite (ou ne correspond pas si !\~). Le langage regex est celui de JavaScript.<br>Si la valeur de gauche est un tableau, vérifie qu’au moins une des valeurs correspond.</p> | `email ~ "@example.com"`      |
| STARTSWITH(), ENDSWITH(), or CONTAINS() | <p>Vérifie si la valeur de gauche commence par, se termine par, ou contient la valeur de droite.<br>Si la valeur de gauche est un tableau, vérifie qu’au moins une des valeurs correspond.</p>                                                        | `lastname STARTSWITH("DE")`   |
| \* or /                                 | Multiplication ou division                                                                                                                                                                                                                            | `3*5`                         |
| + or -                                  | Addition / concaténation ou soustraction                                                                                                                                                                                                              | `1+2`                         |

## Agrégations

| NOM DE LA FONCTION         | CE QU’ELLE FAIT                                                                                                            | Exemple                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| AVERAGE(array, expression) | Calcule la moyenne des valeurs dans un tableau ou à partir d’une expression. Le paramètre expression est optionnel.        | <p><code>AVERAGE(\[0, null, 10])</code><br>Retourne 5 (les valeurs null sont ignorées)</p><p><code>AVERAGE(items, price)</code><br>Retourne la moyenne du prix de chaque item (les valeurs null sont ignorées)</p><p><code>AVERAGE(items, EXTRACT(price, "€", 0))</code><br>Extrait la valeur numérique avant € et calcule la moyenne</p><p><code>AVERAGE(items, IF(returned\_quantity = 0, NUMBER(EXTRACT(product.price, "€",0)), 0))</code><br>Prix moyen uniquement pour les items non retournés</p> |
| MIN(array, expression)     | Retourne la valeur minimale d’un tableau ou d’une expression. Le paramètre expression est optionnel.                       | <p><code>MIN(\[null, 15, 8])</code><br>Retourne 8 (ignore null)</p><p><code>MIN(orders, DATEPARSE(order\_date, "yyyy-MM-dd"))</code><br>Trouver la date de commande la plus ancienne</p><p><code>MIN(items, IF(status = "active", price, 999999))</code><br>Prix minimum uniquement parmi les items actifs</p>                                                                                                                                                                                          |
| MAX(array, expression)     | Retourne la valeur maximale d’un tableau ou d’une expression. Le paramètre expression est optionnel.                       | <p><code>MAX(\[null, 15, 8])</code><br>Retourne 15 (ignore null)</p><p><code>MAX(users, AGE(birth\_date))</code><br>Trouver l’âge de l’utilisateur le plus âgé</p><p><code>MAX(transactions, IF(type = "purchase", amount, 0))</code><br>Montant d’achat maximal</p>                                                                                                                                                                                                                                    |
| SUM(array, expression)     | Calcule la somme des valeurs dans un tableau ou à partir d’une expression. Le paramètre expression est optionnel.          | <p><code>SUM(items, quantity \* NUMBER(EXTRACT(unit\_price, "$", 0)))</code><br>Calcule la valeur totale de tous les items</p><p><code>SUM(\[5, null, 15])</code><br>Retourne 20 (ignore null)</p><p><code>SUM(items, IF(returned\_quantity = 0, NUMBER(EXTRACT(product.price, "€",0)), 0))</code><br>Additionne les prix uniquement pour les items avec quantité non retournée</p>                                                                                                                     |
| COUNT(array, expression)   | Compte le nombre de valeurs non vides dans un tableau ou à partir d’une expression. Le paramètre expression est optionnel. | <p><code>COUNT(users, IF(ISEMPTY(email), null, email))</code><br>Compte les clients avec une condition d’email non vide</p><p><code>COUNT(items, IF(status = "completed" AND amount > 100, 1, null))</code><br>Compte les items terminés au-dessus de 100</p>                                                                                                                                                                                                                                           |

## Exemples

1. Scénario : créer un Flag qui indique si l’adresse principale des consommateurs se trouve en Californie\
   `IF(EXTRACT(city_state, '-', 1) == " CA", "TRUE", "FALSE")`
2. Scénario : définir une valeur avec plusieurs conditions. La valeur est égale à "12345" pour le pays FR et l’environnement prod, sinon elle est égale à 98888 pour le pays DE et l’environnement dev : \\

{% code overflow="wrap" %}

````
```xquery
IF(country = "FR" AND environment_work = "prod", "12345", IF(country = "DE" AND environment_work = "dev", "98888")
```
````

{% endcode %}
