30 mai 2014

Expression Transformation

L'Expression Transformation est une transformation passive (le nombre de lignes en entrée et en sortie est toujours le même) et connectée. Elle est utilisée pour transformer/calculer des données dans un même enregistrement. Par exemple, vous pourriez avoir besoin de concaténer les noms et prénoms des salariés, convertir des chaînes en nombres, affecter la date système à la date du traitement de l'enregistrement. Vous pouvez également utiliser l'Expression Transformation pour tester des instructions conditionnelles (IIF, Decode...etc) avant de passer les résultats à la cible ou à d'autres transformations.

L'Expression Transformation permet d'effectuer des calculs non-agrégées (n'impliquant qu'une seule ligne à la fois). Pour effectuer des calculs impliquant plusieurs lignes, comme des sommes ou des moyennes, il faut utiliser l'Aggregator Transformation.
Il existe 4 types de ports dans l'Expression Transformation:
- Input : donnée entrante dans la transformation
- Output : donnée sortante résultat d'un calcul ou traitement
- Input/Output : donnée qui transite par l'Expression et qui est utilisée sans être modifiée
Variable : Utilisé pour stocker tout calcul temporaire. 

La figure ci-dessous montre un mapping simple avec une Expression Transformation utilisée pour concaténer les noms et prénoms des employés du fichiers sources :
  

Tips & performances :
- L'ordre d'évaluation des ports dans une Expression est le suivant : Input ==> Variable dans l'ordre (du haut vers le bas) ==> Output
Cette propriété est très intéressante car elle nous permet d'utiliser une technique de détection de changement d'un enregistrement à un autre. Par exemple, on peut numéroter les bénéficiaires au sein d'un même contrat :
- Dans une Expression Transformation, il faut éviter de calculer la même valeur plusieurs fois. Il faut pour cela utiliser les ports « Variable » pour calculer une valeur qui est susceptible d'être utilisée à plusieurs reprises dans la transformation. Si par exemple, le résultat d'un lookup déconnecté doit être utilisé plus d'une fois, il faut stocker sa valeur dans un port « Variable » et utiliser ce dernier autant de fois que l'on souhaite.
-  L'utilisation des opérateurs est plus performante que l'utilisation des fonctions. Si on souhaite, par exemple, effectuer une opération de concaténation, il est plus performant d'utiliser "||" que la fonction CONCAT.
-  L'Integration Service traite les opérations sur des numériques plus rapidement que les opérations sur des chaînes de caractères. Par exemple: si la recherche dans un lookup déconnecté doit être faite sur ​​Nom_Employe et Id_Employe, il est recommandé d'utiliser Id_Employe.
- La Fonction IIF doit être écrite de façon compacte. Par exemple: dans une source avec trois flags O/N FLG_A, FLG_B et FLG_C, il s'agit de retourner une somme conditionnée par la valeur des flags:
Si les trois flags (FLG_A, FLG_B, FLG_C) = O alors (VAL_A + VAL_B + VAL_C).
Si un des flags est N, il n'est pas pris dans le calcul de la somme.
Au lieu d'écrire des IIF imbriquées dans tous les sens, on peut tout simplement
écrire:
IIF(FLG_A='O', VAL_A, 0) + IIF(FLG_B='O', VAL_B, 0) + IIF(FLG_C='O', VAL_C, 0).

Aucun commentaire:

Enregistrer un commentaire