<< Back

Création de XML dans Alteryx

Bonjour à tous ! J’espère que vous êtes en pleine forme car aujourd’hui nous allons plonger ensemble dans la réalisation d’une Macro Alteryx relativement complexe mais très utile. Attention car ce tutoriel sera d’un niveau plus avancé que d’ordinaire et vous demandera une certaine agilité avec l’outil Alteryx.

Rappelez-vous que la semaine dernière nous avions utilisé Alteryx pour générer du contenu JSON pour appeler l’API REST de Tableau Server. Je vous avais promis de faire la même chose avec du contenu XML cette fois. Nous allons donc construire une macro Alteryx que nous pourrons réutiliser à loisir afin de générer le XML que vous souhaitez. Alors c’est parti ! 🙂

1/ Création de la Macro

Commencez par ouvrir Alteryx et commencez par un outil Macro Input relié à un outil Macro Output. Enregistrez votre nouvelle Macro en la nommant Création Xml. Alteryx devrait choisir l’extension .yxmc automatiquement.

Vous pouvez enregistrer votre macro dans un répertoire de macro pour Alteryx. Si vous n’en avez pas déjà un, il vous suffit de le spécifier en allant dans Options => User Settings => Edit User Settings => Macros.

2/ Préparation des données en amont

Commençons par changer légèrement le paramétrage de l’outil Input. Nous allons lui spécifier une entrée de type Text Input que nous allons nommer « Texte » (mais vous pouvez la nommer différemment si vous le souhaitez). Ajoutez-lui une ligne de donnée (sa valeur n’a pas d’importance) comme sur l’image suivante :

 

Alteryx devrait donc indiquer que les données d’entrée de la macro font effectivement une ligne pour une colonne.

Nous allons effectuer beaucoup de manipulations de données dans cette macro. Je vais donc commencer par numéroter les lignes qui y seront passées avec un champ que je nomme __RecordId__.

A nouveau, vous êtes libres de nommer vos champs comme vous le souhaitez mais essayez de choisir un nom peu commun (d’où l’ajout des underscore) pour ne pas avoir de conflits avec des noms déjà présents dans vos workflows.

3/ Gestion des attributs XML

Il est temps de commencer par créer les attributs de notre noeud XML. Pour ce faire nous allons utiliser un outil List Box que l’utilisateur utilisera pour sélectionner les champs qu’il souhaite en attribut. Nous utiliserons le libellé des colonnes pour la clé de l’attribut. Glissez un outil Select, un outil Action et un outil List Box à la suite de votre outil RecordId. Connectez vos éléments comme sur l’image suivante : 

Décochez également unknown pour l’outil Select. 

Ainsi, les seules données qui seront autorisées à passer en aval de l’outil Select seront les champs cochés par l’utilisateur, le champ Texte et __RecordId__.

Je vais désormais pivoter les données en les groupant par __RecordId__ pour les avoir sous la forme de clés-valeurs. Ce pivot est important car il me permettra par la suite de concaténer les attributs les uns à la suite des autres.

N’oubliez pas de cocher __RecordId__ et Texte en tant que clés. Cet outil créé deux nouveaux champs Name et Value correspondant respectivement aux noms des attributs sélectionnés et à leurs valeurs. Nous pouvons donc rajouter un outil formula pour créer un attribut XML, la formule étant la suivante :

IF [Value] != Null() THEN
 » « +[Name]+‘= »‘+[Value]+‘ »‘
ELSE
«  »
ENDIF

Comme vous le voyez, je prends le parti pris de ne pas afficher d’attribut si la colonne contient la valeur vide.

Je concatène désormais sans séparateur le champ nouvellement créé et j’obtiens mes attributs s’il y en a.

4/ Gestion du noeud XML

La gestion des attributs est désormais faite. Nous allons donc attaquer la gestion du noeud XML lui-même ainsi que de son contenu. J’ai choisi de prendre le champ Texte comme étant le contenu du noeud XML mais vous avez la liberté de faire les choses différemment (avec un outil Dropdown par exemple).

Le travail effectué à l’étape 3/ est utile si nous avons sélectionné des attributs mais dans le cas particulier où aucun attribut n’est sélectionné nos données seront complètement filtrées. Nous allons donc effectuer le travail séparément selon les cas, il y en a deux à traiter :

4.1/ Cas sans attributs

Revenez en arrière au niveau de l’outil Select et rajoutez-y un formula Tool dont la formule sera ‘<Node>’+[Texte]+'</Node>’. Très simple, cette formule traitera le cas où nous n’avons pas besoin des attributs.

L’idée sera donc de donner la possibilité à l’utilisateur de modifier la valeur Node de la formule suivant son bon vouloir. A la différence des attributs, j’ai cette fois choisi l’outil Text Box pour donner la possibilité à l’utilisateur de spécifier la valeur du noeud. Connectez un outil Text Box à un outil Action paramétré de la manière suivante :

De cette manière, Alteryx remplacera Node par la valeur que vous aurez choisi dans le champ texte.

4.2/ Cas avec Attribut

Pour distinguer les données avec attributs de celles sans attributs je vais simplement utiliser l’outil Join entre les deux branches de mon flux récemment créées. Si la jointure se fait c’est qu’il y avait au moins un attribut, sinon c’est qu’il n’y en avait aucun. La jointure est toute simple, elle se fait sur __RecordId__.

Les données Jointes ayant un attribut nous devons modifier le champ Xml pour y rajouter les attributs préalablement calculés. La formule est très simple, il suffit de modifier la précédente formule légèrement :

Comme vous le voyez, les résultats non joints sont rajoutés en aval avec un outil Union. Comme pour le cas 4.1/ il nous faut simplement connecter l’outil formula à l’outil Text Box avec un champ Action paramétré de la même manière :

Et voilà ! Vous pouvez tester cette macro dès à présent, elle fonctionnera parfaitement ! 🙂 Vous remarquerez cependant que la macro filtrera les colonnes non utilisées et en génèrera de nouvelles dont nous n’avons pas besoin.

Nous allons donc terminer ce tutoriel en faisant un peu de nettoyage pour ne garder que les colonnes qui nous seront réellement utiles.

5/ Nettoyage

Filtrer les champs non désirés est quelque chose de simple, il nous suffit de rajouter un outil Select qui n’autorisera le passage que pour les champs inconnus unknown et pour la valeur nouvellement créée Xml.

Par contre, j’aimerais que les champs non utilisés par la macro soient transmis d’un bout à l’autre du workflow. Pour ce faire, l’idée est toujours la même, pivoter mes données en paires clés/valeurs. En pivotant mes données respectivement avant et après la sélection des attributs, je peux filtrer les données ayant été utilisées avec un outil Join. En effet, un Outer Join renverra les données non sélectionnées par l’utilisateur. Il nous suffit ensuite de revenir à un tableau avec un outil Cross Tab.

Comme ce tutoriel est déjà relativement long, je ne décrirai pas cette étape. Il vous suffira de télécharger la macro ici et l’ouvrir pour comprendre comment cette étape est réalisée.

6/ Utilisation !

Si vous avez bien enregistré cette macro dans le répertoire adéquat comme spécifié dans l’étape 1/ vous devriez voir votre Macro Création Xml disponible. Par ailleurs, vous êtes libres de modifier l’icône de votre Macro en allant dans view => interface designer => properties.

Notez que cette macro ne prend pas en compte l’échappement des caractères <, > et & par exemple. Vous pouvez cependant améliorer ce que nous venons de faire en y incorporant des traitements Regex par exemple.

La semaine prochaine, nous utiliserons cette macro pour générer du contenu XML pour communiquer avec l’API REST de Tableau.

Julien Godenir

Anywhere

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *