Aller au contenu
Contact us

Fonctionnement des fonctions dans les transformations, les variables et les conditions d'appel

Vous y accédez via la boîte de dialogue Modifier la transformation de la valeur assignée, et le même moteur est utilisé partout où des transformations apparaissent.

Chaque transformation s'exécute en deux phases, toujours dans cet ordre :

  1. L'expression principale est évaluée une seule fois et produit une valeur.
  2. Une chaîne d'actions de transformation est ensuite appliquée à cette valeur, l'une après l'autre.

[data] est l'espace réservé pour « la valeur en cours de traitement ». Après l'exécution de l'expression, [data] contient son résultat. À l'exécution de chaque action, [data] est mis à jour avec la sortie de cette action et transmis à l'action suivante.

Dans une expression (et dans la plupart des champs d'action), vous pouvez coller plusieurs types d'éléments. Les boutons de la barre d'outils Coller une colonne, Coller une variable et Coller une valeur, ou le menu contextuel, insèrent pour vous la notation correcte.

NotationFait référence à
[My field name]Une colonne source dans les transformations DataETL et Gestion des fichiers.
[<my variable>]Une Variable que vous avez définie.
[<#my auto generated variable>]Une Variable générée automatiquement. Identique à une Variable normale : le préfixe # indique simplement qu'elle a été générée plutôt que créée par vous.
[data]La valeur courante, indépendante du type, mise à jour au fil de l'exécution de la chaîne d'actions.
[original]La valeur renvoyée par l'expression principale, avant toute modification par une action de transformation.

[data] évolue avec la chaîne ; [original] ne change jamais une fois l'expression exécutée. Utilisez [original] dans une action ultérieure lorsque vous avez besoin de retrouver la valeur antérieure aux actions.

Un composant ForEach génère une Variable pour chacune de ses colonnes source au moment où vous enregistrez le composant. Dans le ForEach, vous pouvez donc référencer une colonne source de deux manières :

  • Par sa Variable générée : [<#my auto generated variable>]
  • Par la notation de colonne source : [#source columns]

Les deux renvoient la même valeur.

Le résultat d'une transformation est écrit dans une destination dont le type de données est fixé à Texte, DateHeure ou Nombre. Votre expression (et la valeur finale après toutes les actions) doit produire ce type. Une destination de type Nombre n'acceptera pas une valeur que le moteur ne peut pas lire comme un nombre, et ainsi de suite.

[data] est en soi indépendant du type : il contient simplement la valeur courante, quelle qu'elle soit. Si vous assignez une valeur à une colonne de destination ou à une variable de destination, [data] représente cette valeur.

C'est dans l'expression que les fonctions font leur travail : If(), Pos(), Dec(), Char() et les autres. La liste complète, avec les signatures et des exemples, est accessible via le bouton Documentation des expressions. Utilisez Tester l'expression pour essayer une expression avec une valeur de test que vous saisissez pour l'espace réservé [data], avant de la valider.

Une expression ne peut pas contenir de guillemet double littéral ("). Lorsque vous devez en produire un, utilisez Char(34) : Char() peut générer le caractère " même si vous ne pouvez pas le saisir directement dans l'expression.

Un clic droit dans l'éditeur d'expressions ouvre un menu contextuel souvent plus rapide que la barre d'outils :

  • Rechercher et remplacer : rechercher/remplacer dans le texte même de l'expression.
  • Coller [data] : insère l'espace réservé [data].
  • Coller une fonction : un sous-menu contenant toutes les fonctions intégrées, regroupées par catégorie : Logique, Chaîne, Numérique, Date et heure, Gestion des fichiers, Dossier, Autre, SQL et SharePoint. En choisir une insère son squelette dans l'éditeur avec le nom des arguments, par exemple Mid( 'string', start {, length } ) ou IndexValue( 'sourcestring', 'delimiterstring', indexnumber ). Les arguments affichés entre { } sont facultatifs.
  • Coller une colonne… / Coller une variable… : identiques aux boutons de la barre d'outils.
  • Commenter / Décommenter : active ou désactive les marqueurs de commentaire sur la ou les lignes sélectionnées, afin de désactiver une partie d'une expression sans la supprimer.
  • Les commandes standard Copier, Couper, Coller, Supprimer.

Quelques fonctions de chaîne à connaître dès le départ : Char(34) pour un guillemet double, GenerateGUID(), JSONDecode() / JSONEncode(), ExtractMetadataColumn('metadata','column name','default value'), et SkipString('My reason') pour ignorer la valeur en journalisant un motif. La liste complète et classée par catégorie se trouve dans la référence des fonctions.

Cochez SQL SELECT 1 ligne/colonne pour ouvrir le sélecteur Gérer les connexions aux bases de données, dans lequel vous choisissez n'importe quelle connexion configurée (SQL Server, MS Access, ODBC ou la base de données interne). Votre expression devient alors une seule instruction SQL SELECT qui renvoie une seule colonne :

SELECT dbo.bindtest.col_customer_name FROM dbo.bindtest WHERE mycol = [data]

Le seul mot-clé SQL pris en charge dans une expression est SELECT. De plus, le SQL SELECT ne peut être utilisé que dans la première expression, l'expression principale.

Règles pour la forme SQL SELECT :

  • L'instruction doit renvoyer une seule colonne.
  • Si plusieurs lignes sont renvoyées, elles sont concaténées avec %NewLine% et 250 lignes au maximum sont traitées.
  • Vous pouvez utiliser [data], des colonnes et des Variables n'importe où dans l'instruction comme arguments :
SELECT Max(MyCol) FROM MyTable WHERE abc = [<MyVar>] AND xyz = [data]

Une fois que l'expression a produit une valeur, vous ajoutez des actions depuis le menu Ajouter une action. Elles s'exécutent de haut en bas, chacune recevant la sortie de l'action précédente en tant que [data]. Il en existe cinq :

ActionRôle
Validation des donnéesExamine la valeur et écrit des messages dans le journal de session de la tâche ; peut interrompre la chaîne.
ExpressionExécute une autre expression sur la valeur.
Extraire une balise XML/JSONExtrait la ou les valeurs de balises nommées d'une chaîne XML/JSON.
RechercheFait correspondre la valeur 1:1 via une liste de mappage de valeurs.
Remplacer les occurrencesEffectue une recherche et un remplacement dans la valeur à l'aide d'une liste de mappage de valeurs.

Le type d'entrée est Chaîne et l'action doit renvoyer une chaîne commençant par l'un des préfixes suivants. Le texte situé après les deux-points est écrit dans le journal de session de la tâche.

PréfixeEffet
Ok:Valeur acceptée. Aucune ligne n'est ajoutée au journal de session.
Warning:Le texte après les deux-points est journalisé comme avertissement.
Error:Le texte après les deux-points est journalisé comme erreur.
Ignore:Le texte après les deux-points est journalisé ; la valeur est ignorée.
Return:Arrête l'évaluation des actions suivantes.

[data] et [original] sont tous deux disponibles. Exemples :

If( Dec('[data]') > 100.01 , 'Error:[data]>100.01' , 'Ok:' )
If( 'xyz' + [data] = 'xyz1' , 'Ok:' , 'Warning:[data]' )
If( Pos( '[data]' , 'Apple' ) > 0 , 'Ok:[data]' , 'Ignore:' )
If( Pos( '[data]' , 'Apple' ) > 0 , 'Ok:' , 'Return:[data]' )

Une seconde expression, mais avec une contrainte que l'expression principale n'a pas : elle doit renvoyer le même type de données que celui qu'elle a reçu. [data] est la valeur courante, [original] le résultat de l'expression principale.

Saisissez un ou plusieurs noms de balise, séparés par des points-virgules, et l'action renvoie leur(s) valeur(s). Deux options :

  • Lorsqu'une balise est trouvée, arrêter le traitement des actions restantes.
  • Si la balise est introuvable, définir la valeur sur une chaîne vide.

Fait correspondre la valeur courante via une liste de mappage de valeurs : une correspondance dans la colonne Valeur recherchée de la liste renvoie sa Valeur de remplacement. Choisissez la liste, ou créez-en une avec Nouvelle liste de mappage / Modifier les valeurs de mappage.

Le paramètre Si aucun mappage n'est trouvé détermine le comportement de repli :

OptionComportement en l'absence de correspondance
<No mapping>Laisser la valeur inchangée.
<No mapping - Add to Mapping List>Laisser la valeur inchangée et l'ajouter à la liste.
<Map to blank>Remplacer par une chaîne vide.
Map to the value I type hereRemplacer par une valeur fixe que vous indiquez.

Cochez Une fois mappé, arrêter le traitement des actions restantes pour mettre fin à la chaîne après un mappage réussi.

Cette action s'appuie également sur une liste de mappage de valeurs, mais elle effectue les remplacements à l'intérieur de la valeur au lieu de faire correspondre la valeur entière. Deux paramètres déterminent son comportement :

Portée du remplacement : quelles correspondances sont remplacées :

  • Toutes les occurrences
  • Toutes sauf la première occurrence
  • Toutes sauf la dernière occurrence
  • Uniquement la première occurrence
  • Uniquement la dernière occurrence

Paires de valeurs : quelle valeur de remplacement est utilisée lorsque plusieurs entrées de la liste correspondent :

  • Utiliser toutes les valeurs de remplacement correspondantes
  • Utiliser uniquement la première valeur de remplacement correspondante
  • Substituer par la première valeur de remplacement correspondante
  • Substituer par la liste des valeurs de remplacement correspondantes

Options : Une fois remplacé, arrêter le traitement des actions et En l'absence de remplacement, définir la valeur sur une chaîne vide.

Les actions Recherche et Remplacer les occurrences s'appuient toutes deux sur des listes de mappage de valeurs, gérées depuis Gérer les listes de mappage. Chaque liste contient des lignes Valeur recherchée → Valeur de remplacement avec une colonne Ordre.

Vous pouvez tenir une liste à jour de trois manières :

  • Manuellement : dans la fenêtre Modifier la liste de mappage de valeurs (Nouveau, Copier, Supprimer, Enregistrer, Renuméroter l'ordre de tri).
  • Depuis Excel : copiez deux colonnes (Valeur recherchée et Valeur de remplacement) dans Excel et utilisez Coller depuis le presse-papiers/Excel pour les charger en une seule fois. Les listes peuvent aussi être exportées vers Excel ou le Bloc-notes.
  • Depuis une tâche : DataETL peut insérer, mettre à jour et supprimer des lignes de liste de mappage par programmation, de sorte qu'une liste peut être créée ou actualisée automatiquement dans le cadre d'une exécution, et pas seulement manuellement.

Faites pointer DataETL vers la base de données interne pour manipuler les valeurs des listes de mappage par programmation.

Les expressions comme conditions d'appel dans une Collection

Section intitulée « Les expressions comme conditions d&#39;appel dans une Collection »

Le même moteur d'expressions pilote également les conditions d'appel dans une Collection. Une Collection regroupe plusieurs composants (étapes) en un seul ensemble, et une Collection peut contenir d'autres Collections. Chaque composant peut porter une condition, définie avec Créer une condition, qui détermine au moment de l'exécution si ce composant est appelé.

Une condition d'appel est plus limitée qu'une transformation. Elle :

  • est une expression unique : il n'y a pas de chaîne d'actions de transformation, ni d'espace réservé [data] ;
  • ne peut référencer que des Variables, avec la notation [<MyVariable>]. Il n'y a pas de colonnes source dans ce contexte, donc Coller une variable est le seul bouton de collage (avec Tester l'expression et Documentation des expressions).

L'expression doit renvoyer une chaîne, et cette chaîne est un mot-clé de contrôle qui indique à la tâche ce qu'elle doit faire du composant :

Valeur renvoyéeEffet
TrueExécuter le composant.
FalseIgnorer le composant.
ExitGroupIgnorer ce composant et les composants restants du groupe.
ExitGroupWarningIdentique à ExitGroup, mais journalise un avertissement.
StopJobArrêter immédiatement la tâche.
StopJobWarningArrêter immédiatement la tâche en journalisant un avertissement.

Comme pour les préfixes de validation des données, vous pouvez ajouter un message après les deux-points ; il est alors écrit dans le journal de session de la tâche :

If( [<MyVariable>] > 0 , 'True' , 'False' )
If( [<MyVariable>] > 0 , 'True' , 'StopJob:Job cannot continue' )