Free Trial

Blog

Les analyses et les idées des plus grands esprits de l'analyse.
TIPS de la semaine

Chaque semaine, découvrez de nouvelles astuces et bonnes pratiques pour devenir un expert !

Voir l'index
BenoitC
Alteryx
Alteryx

Nous avons vu au dernier épisode comment créer un paramètre dynamique dans Alteryx. Dans ce troisième épisode, nous allons voir comment créer une boucle dans Alteryx.

 

Mais qu’est-ce qu’une boucle ? Non, ce n’est pas le Tour de France dans ce contexte !

 

BenoitC_26-1679833735582.gif

 

 

 

Exemple : vous avez besoin de calculer le solde de fin de mois de votre compte bancaire, et cela pour chaque mois sur une année entière. Pour le premier mois, vous additionnez le montant d’argent que vous aviez au début du mois, plus les entrées et sorties d’argent de la période. Cela donne le calcul suivant : 

 

Solde de fin de mois = Solde du mois précédent + Entrées d’argent + Sorties d’argent

 

Cela fonctionne sur le premier mois car on connait déjà le montant du solde du mois précédent. Le problème est que pour calculer le solde des mois suivants, il faut recalculer le montant en début de mois sur chaque mois. Il faudrait répéter le calcul 12 fois, ce qui serait long et fastidieux. Il faut donc faire une boucle dans Alteryx pour calculer tous les mois les uns après les autres. En programmation, il s’agit d’une boucle « While ».  Dans Alteryx, c'est une macro itérative.

 

Quels sont les bénéfices de savoir faire une macro itérative ?

 

  • Gain de temps : comme pour la macro batch, nous allons faire un seul traitement rapidement mis en place, au lieu de faire plusieurs fois le même calcul.
  • Maintenance facile : plus il y a d’étapes dans un workflow, plus ce sera difficile de le maintenir. La macro itérative présentera un workflow simple à mettre à jour.
  • Traitements complexes performants : Une macro itérative permet de faire des traitements complexes dans Alteryx tout en préservant les performances.

Comment faire une macro itérative ? Voici 3 étapes facile pour y arriver.

 

  1. Configuration des options de la macro itérative

La première étape est d’activer le mode macro itérative dans la configuration du workflow :

 

BenoitC_0-1679833596452.png

 

Ensuite, il faut ajouter les données en entrée de macro. Voici les données de l’exemple :

 

BenoitC_1-1679833596460.png

 

 J’ai utilisé l’outil Saisie de texte, il faut le convertir en entrée de macro par un clic droit :

BenoitC_2-1679833596484.png

 

Il ne reste plus qu’à ajouter les sorties de la macro itérative en utilisant l’outil Sortie de macro. Eh oui, il y a plusieurs sorties ! Pourquoi ? Il y a deux sorties à notre workflow :

  • Boucle : Je veux répéter un calcul x fois, j’ai besoin d’une sortie qui ramènera au début du workflow les éléments nécessaires au calcul suivant. C’est le but de la sortie Boucle.
  • Résultat : c’est là où on stockera les résultats déjà calculés.

 

BenoitC_3-1679833596494.png

 

BenoitC_4-1679833596504.png

 

BenoitC_5-1679833596511.png

 

Dernière étape, il faut activer une option pour qu’Alteryx sache quelle sortie utiliser pour faire la boucle. Cela ne suffit pas de nommer une sortie « Boucle », il faut l’identifier dans les propriétés du menu Concepteur d’interface. Pour cela, il faut cliquer sur le menu Afficher > Concepteur d’interface :

 

BenoitC_6-1679833596538.png

 

Une fois le menu apparu, cliquez sur le menu Propriétés représenté par un icône en forme d’engrenage :

 

BenoitC_7-1679833596547.png

 

Vous avez ici plusieurs options. Les options Entrée d’itération, Sortie d’itération et Nombre maximum d’itérations sont celles qui nous intéressent.

 

BenoitC_8-1679833596599.png

 

Il reste à identifier la sortie en entrée : il n’y en a qu’une. Il faut indiquer dans le champ Sortie d’itération la sortie qui servira à renvoyer les valeurs au début du workflow, c’est celle que nous avons nommé Boucle juste avant.

 

Le nombre maximum d’itérations correspond au nombre de fois où le workflow se répétera si aucune condition n’a été prévu pour qu’il s’arrête. Nous allons mettre 12 car nous cherchons à avoir les soldes des 12 prochains mois. Indiquer un nombre cohérent par rapport à l’objectif du workflow permettra d’éviter que le workflow tourne dans le vide en cas d’erreur.

Attaquons-nous maintenant au corps de notre workflow !

 

  1. Configuration d’un workflow itératif

Si je voulais éviter le recours à une macro itérative, je ferais ce workflow :

BenoitC_9-1679833596624.png

 

Je devrais ensuite répéter l’opération autant de fois que nécessaire :

BenoitC_10-1679833596686.png

 

La méthode fonctionne mais elle est fastidieuse. Comment faire en utilisant une macro itérative ?

 

Voici une solution à ce problème :

BenoitC_11-1679833596721.png

 

Je masque la partie du workflow que je souhaite répéter. Cela nous permet de bien voir ce que nous allons ajouter pour faire le paramétrage de notre macro itérative :

BenoitC_12-1679833596766.png

 

Le principe est de d’envoyer uniquement les lignes à calculer dans la sortie Boucle et de conserver les lignes déjà calculées dans la sortie Résultat.

 

Par exemple, au début du workflow, je n’ai qu’un seul mois :

 

BenoitC_13-1679833596775.png

 

A la fin du workflow, j’en aurais 2 :

BenoitC_14-1679833596783.png

 

Je dois donc trouver la solution pour envoyer le mois 1 dans la sortie résultat et envoyer le mois 2 au début pour que je puisse m'en servir de base pour calculer le mois 3.

 

Ici, j’utilise l’outil Echantillon en gardant la première et la dernière ligne :

BenoitC_15-1679833596808.png

 

J’envoie le mois créé lors de la première exécution dans la sortie Boucle. Il me servira de base de calcul lorsque le workflow va se répéter :

 

BenoitC_16-1679833596823.png

 

Ainsi, le mois 2 dans la sortie Boucle deviendra l’entrée du workflow lors de la prochaine itération :

 

BenoitC_17-1679833596838.png

 

Dans le même temps, je stocke le mois déjà calculé dans la sortie Résultat :

 

BenoitC_18-1679833596854.png

 

Vous aurez peut-être noté qu’il y a un filtre avant la sortie Boucle ? Nous allons voir à quoi cela sert dans la dernière étape.

 

  1. Sortie et débuggage de macro itérative

Le premier problème de cette 3ème et dernière étape est qu’une macro itérative peut s’exécuter indéfiniment s’il n’y a pas de conditions pour qu’elle s’arrête.

Comment la stopper?

 

Nous avons vu que la première chose à faire est de mettre un nombre raisonnable d’itérations dans les options de la macro itérative :

 

BenoitC_19-1679833596906.png

 

L’objectif ici est de calculer 12 mois, je garde le nombre 12 en nombre d’itérations.

 

Admettons ensuite qu’il n’y ait pas de filtre à la fin de ma macro itérative. Quand j’essaye de l’exécuter, j’ai cette erreur :

BenoitC_20-1679833596913.png

 

La seule condition pour que le workflow s’arrête est le nombre maximum d’itérations prévu dans l’option du menu Concepteur d’interfaces.

 

C’est pourquoi nous allons ajouter l’outil filtre dans notre macro : nous allons envoyer dans la sortie Boucle uniquement les mois inférieurs à 12. Ainsi, la macro ne générera plus d’erreurs lors de l’exécution.

BenoitC_21-1679833596921.png

 

Il est également possible d’utiliser le nombre d’itérations comme condition de sortie :

BenoitC_22-1679833596928.png

 

Pourquoi 10 et pas 12 ? Le nombre d’itération, identifié dans Alteryx par la variable [Engine.IterationNumber], commence à zéro : il faut donc retirer 1 pour arriver à 12 itérations. Vous pouvez voir la valeur de cette variable dans ce menu :

 

BenoitC_23-1679833596974.png

 

Dernière question : comment débugger mon workflow si je ne comprends pas ce qui se passe à chaque itération ?

 

Une astuce toute simple consiste à ajouter une colonne Itération dans mes données d’entrées et mettre la valeur [Engine.IterationNumber] dans cette colonne avec l’outil formule :

BenoitC_24-1679833596981.png

 

Ainsi, lorsque j’exécute la macro, je peux bien observer ce qu’il se passe à chaque itération et voir si les données à chaque étape correspondent bien à ce que j’attends :

 

BenoitC_25-1679833597023.png

 

Et voilà, nous avons paramétrer notre macro itérative ! Dans notre prochain épisode, nous verrons comment créer une App Analytique !

Commentaires

 

Pourriez vous, s'il vous plaît, spécifier la fonction et l'expression utilisée dans la formule à plusieurs lignes pour récupérer le solde du mois précédent sur le mois suivant ?

Pourriez vous également mettre le workflow Alteryx ? cela complète bien votre explication.

Étiquettes