Community Spring Cleaning week is here! Join your fellow Maveryx in digging through your old posts and marking comments on them as solved. Learn more here!
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
StephaneP
Alteryx
Alteryx

Charger de multiples fichiers est un grand classique avec Alteryx. On rêve de l’automatiser mais il y a toujours un petit grain de sable…

 

fichier.gif

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Rassurez-vous, vous aurez toutes les cartes en main à la fin de cet article.

Des outils standards lui sont donc dédiées mais ils ont certaines limites face aux réalités de vos projets.

  • Je n’ai pas 1 ou 2, mais des dizaines de fichiers à charger
  • Mes fichiers sont supposés avoir le même format mais parfois j’ai des petits écarts,
  • Je veux charger tous les fichiers sauf 2 ayant certaines caractéristiques,
  • Mes utilisateurs rajoutent parfois des colonnes supplémentaires,
  • Les fichiers ne sont pas dans les mêmes répertoires,
  • Mon nombre de fichiers varie d’une fois sur l’autre

Il faut alors passer à d’autres techniques plus puissantes.

 

Il est donc important de bien comprendre ces méthodes et lesquelles utiliser en fonction de ce que l’on recherche :

  • Simplicité d’utilisation
  • Dynamisme
  • robustesse aux changements de format
  • customisation pour gérer les cas particuliers.

 

Les 4 options par ordre de complexité croissante :

 

1. Consolidation manuelle des fichiers via l'outil UNION

StephaneP_1-1635429980655.png

 

2. Consolidation automatique via l'outil INPUT/ ENTREE DE DONNEE et les "wildcards"

StephaneP_2-1635430051110.png

 

3. Consolidation automatique via l'outil DYNAMIC INPUT / ENTREE DYNAMIQUE

StephaneP_3-1635430127490.png

 

4. Consolidation automatique via une macro packageant l'outil INPUT

 

StephaneP_4-1635430543964.png

 

Synthèse de leurs forces/faiblesses :

 

 

Dynamisme

Simplicité

Robustesse aux changements de format

Customisation pour gestion des cas particuliers

1. Consolidation manuelle des fichiers via l'outil UNION

X

XXX

XXX

X

2. Consolidation automatique via l'outil INPUT/ ENTREE DE DONNEE et les "wildcards"

XXX

XXX

X

X

3. Consolidation automatique via l'outil DYNAMIC INPUT / ENTREE DYNAMIQUE

XXX

XX

X

XX

4. Consolidation automatique via une macro packageant l'outil INPUT

XXX

X

XXX

XXX

 

Description du cas d’étude

Pour démontrer les nuances nous allons essayer de consolider 4 fichiers censés être identiques. Comme nous sommes dans la vrai vie, ces fichiers ne sont pas réellement identiques et comportent en fait 3 formats distincts qui peuvent poser problème aux outils standards.

 

FinanceData_APAC.xlx et FInanceData_Europe.xlxs sont identiques suivant ce format :

StephaneP_0-1635429869809.png

 

FinanceData_USA.xlx à 2 différences.

D'abord la colonne "Production Price" a été renommées en "Manufacturing Price" mais a le même format numérique.

Ensuite, une colonne additionnelle "Comment" a été ajoutée la fin.

 

StephaneP_0-1635427776368.png

 

Finance_USA2.xlsx a lui les mêmes colonnes mais le format de la colonne "Production Price" est de type V_String (texte) au lieu de Double (numérique).

 

StephaneP_1-1635427813997.png

 

Nous allons donc voir comment réagissent les différentes méthodes face à ces "petites" différences qui sont celles qui nous consomment du temps au quotidien. Il est important de bien les maîtriser pour savoir vers quelle technique s'orienter.

 

1 - Consolidation manuelle des fichiers via l'outil UNION

 

StephaneP_5-1635430621773.png

 

Le UNION propose automatiquement le format de sortie qui permet d'absorber tous les fichiers. En termes de format et aussi de nombre de colonnes.

Le nom des colonnes de sortie est imposé par le 1er fichier lu.

Il existe 3 options de consolidation. Par position, par nom ou "à la main de l'utilisateur".

Ici c’est l’option « Par position » qui a été retenue, elle permet donc d’absorber le fait que la même colonne à 2 noms différents d’un fichier à l’autre (Production Price / Manufacturing price). C’est le nom de la colonne du 1er fichier qui fera fois. L’option par nom est aussi très pratique lorsque les colonnes ne sont pas dans le même ordre.

 

Les PLUS :

  • Il ne sort jamais en erreur et n'oblige pas à reformater les fichiers sources directement dans le fichier ou via des traitements Alteryx.
  • Très simple à utiliser et comprendre.
  • Via l’option « Par nom » permet de consolider des fichiers dont les noms de colonnes sont les mêmes mais l’ordre différent.

 

Les MOINS :

  • Nécessite de mettre en dur une source par fichier. Lourd s’il y en a beaucoup. Impossible à rendre dynamique si les noms ou le nombre change.
  • On n’a pas la main sur le format de sortie puisque toutes les colonnes "exotiques" des fichiers sources se retrouvent en sortie. Non avenu si on maîtrise le format de ces fichiers.
  • Idem pour le format puisque pour une même colonne il adaptera le format pour trouver un qui peut absorber tous les types de données des sources.
  • On ne peut charger qu'un seul onglet par classeur, celui indiqué dans les entrées.

 

 

2 - Consolidation automatique via l'outil INPUT/ ENTREE DE DONNEE et les "wildcards"

StephaneP_7-1635431116475.png

 

Le INPUT va donc essayer de charger tous les fichiers listés en partant du principe qu'ils ont tous exactement le même format. Toute divergence amène au non-chargement (colonne ou format)

  • USA n'est pas chargé car il a un nombre de colonne différent ("Comment" en plus)
  • USA2 n'est pas chargé car au moins une colonne (Production Margin en string) n'a pas le même format que le 1er fichier chargé (même colonne en double).

Attention, Cela ne sort pas des erreurs mais des warnings.

Voici les messages d'erreur type:

- "…has a different number of fields that the 1st file in the set and will be skipped”

- “…has a different schema than the 1st file in the set and will be skipped”

StephJ_4-1635424010673.png

 

Les PLUS :

  • Dynamique cette fois ci. Pas besoin de nommer les fichiers. Si un nouveau fichier arrive, pas de mise à jour du workflow à faire.
  • On maîtrise le format de sortie qui est forcément équivalent à celui du 1er fichier chargé (puisque sinon il est rejeté).

Les MOINS :

  • Toute divergence du format conduit à un non-chargement.
  • Pour intégrer les fichiers en erreur, il faut physiquement les modifier. On ne peut rien faire dans Alteryx pour automatiser ces corrections.
  • Ne permet pas de sélection complexe des fichiers à charger. On ne peut que rapatrier des fichiers qui respectent la définition de la wildcard. Mais, par exemple, impossible de lui demander d'extraire "uniquement le dernier fichier mis à jour", ou "tous les fichier sauf APAC".
  • On ne peut charger qu'un seul onglet d'un classeur, celui indiqué dans l'outil d'entrée.

 

 

3 - Consolidation automatique via l'outil DYNAMIC INPUT / ENTREE DYNAMIQUE

StephaneP_8-1635431563853.png

 

StephaneP_9-1635431633227.png

On précise le répertoire où se trouvent les fichiers.

Et sur le même principe que le cas précédent, on précise les caractéristiques des fichiers à charger.

 

Dans la désignation du fichier on peut utiliser les wildcards :

  • " * " qui représente n'importe quel nombre de caractère
  • " ? " qui désigne un et un seul caractère, mais n'importe lequel

 

FinanceData_*.xlsx représente donc tous les fichiers qui commencent par "Finance_Data_" puis n'importe quel nombre de caractère puis qui se terminent par ".xlsx"

Cela scanne donc le répertoire et nous ramène nos 4 fichiers.

 

En sortie, l'objet ramène toutes les caractéristiques des fichiers dont le chemin complet qu'on utilise à l'étape suivante.

 

Dynamic Input.PNG

Cet outil permet, sur la base d'une liste de fichier, de charger dynamiquement tous les fichiers concernés en 1 seul objet.

Il faut lui préciser un exemple de format de fichier et une liste de chemin d'accès à ces fichiers.

 

Ce fichier exemple IMPOSE le format attendu. Tout fichier qui ne respecte pas ce 1er format sera rejeté.

 

 

 

 

L'ENTREE DYNAMIQUE va donc essayer de charger tous les fichiers de la liste. Sa référence de format est celle du template (ici Europe). Ceux en écart sont écartés.

  • USA n'est pas chargé car il a un nombre de colonne différent ("Comment" en plus).
  • USA2 n'est pas chargé car au moins une colonne (Production Margin) n'a pas le même format que le 1er fichier chargé

 

Les lignes OK des autres fichiers sont tout de même traitées et continues dans le flux.

 

ATTENTION, le non-chargement pour colonne supplémentaire ne sort pas en erreur mais en warning. Mais le changement de format lui déclenche l'erreur.

Voici les messages d'erreur type :

- "has a different number of fields that the 1st file in the set and will be skipped"

- has a different schema than the 1st file in the set and will be skipped

StephJ_0-1635424333876.png

 

Les PLUS :

  • Dynamique. Pas besoin de nommer les fichiers. Si un nouveau fichier arrive, pas de mise à jour du workflow à faire.
  • On maitrise le format de sortie qui est forcément équivalent à celui du 1er fichier chargé (puisque sinon il est rejeté).
  • On peut retraiter la liste dynamique des fichiers avant le traitement. Par exemple prendre le dernier mis à jour, ou ne pas prendre celui d'un pays particulier. Il y a une étape au sein d'Alteryx entre la génération de la liste et le chargement qui est couramment utilisé pour filtrer les fichiers sur des critères.

Les MOINS :

  • Toute divergence du format conduit à un non-chargement.
  • Pour intégrer les fichiers en erreur, il faut physiquement les modifier. On ne peut rien faire dans Alteryx pour automatiser ces corrections
  • On ne peut charger qu'un seul onglet d'un classeur, celui indiqué dans le template.

 

 

4 - Consolidation automatique via une macro packageant l'outil INPUT

StephaneP_10-1635431856147.png

 

 

 

Une macro batch est une combinaison d'outil que l'on package et à qui l'on fournit une liste d'entrées. Elle va effectuer N fois le traitement packagé pour toutes les entrées de la liste.

 

Dans notre cas, on package un objet ENTREE DE DONNEES à qui on va fournir la liste des fichiers à charger. La force de cette méthode est qu'à chaque itération, la macro considère qu'elle ne traite qu'une et une seule entrée sans tenir compte de l'historique. C'est comme si on avait N fois un input avec 1 fichier et non pas un Input avec N fichiers.

Ainsi, on a plus le problème de divergence de format entre le 1er et le Nème. Chaque fichier étant considéré comme unique il est forcément cohérent avec lui-même.

Et c'est là que le 2ème effet Kiss Cool apparait. La macro à la sortie consolide les résultats comme le ferait l'objet UNION.

Et donc gère tous les problèmes de format ou de nombre de colonne distinct. On n’a ainsi pas de rejet et des formats uniformisés et optimisés.

 

StephaneP_12-1635432091017.png

 

2 spécificités sur cette macro :

  • elle demande à choisir la colonne qui contient le chemin complet (chemin + onglet). Vous pourrez donc la réutiliser pour vos propres projets 😊
  • elle consolide les sorties sur la base de la position des colonnes (pas sur le nom). Ceci peut se changer dans la macro. Cf. screenshot de la macro.

Attention, le non-chargement pour colonne supplémentaire ne sort pas en erreur mais en warning. Mais le changement de format lui déclenche l'erreur.

 

Note : Le menu des macros est un menu dédié qu’on fait apparaitre via le menu Afficher/ Concepteur d’interface, puis dernier onglet paramètre en bas à gauche (la roue).

C’est ici que l’on détermine si à la sortie la macro va consolider les données sur la base de leur position (la 1ère avec la 1ère, la 2ème avec la 2ème…) ou sur la base de leur nom (quel que soit l’ordre, elle recherche les noms et les aligne).

 

Les PLUS :

  • Dynamique. Pas besoin de nommer les fichiers. Si un nouveau fichier arrive, pas de mise à jour du workflow à faire
  • Les divergences de format ou de colonne sont automatiquement absorbées sans rejet et sans lever d'erreur.
  • On peut retraiter la liste dynamique des fichiers avant le traitement. Par exemple prendre le dernier mis à jour, ou ne pas prendre celui d'un pays particulier. Il y a une étape au sein d'Alteryx entre la génération de la liste et le chargement qui est couramment utilisé pour filtrer les fichiers sur des critères.
  • Au sein de la macro, on peut aussi intégrer d'autres traitements plus complexes de retraitement (ex: renommer des colonnes, gérer l'ordre des colonnes, supprimer des colonnes non désirées...)
  • On peut charger plusieurs onglets potentiellement. Ici on a mis l'onglet "KPI" en dur mais on peut imaginer de charger plusieurs onglets des classeurs.

Les MOINS :

  • Plus complexe à utiliser car il faut maîtriser un minimum les macros. Même si, avec cet exemple, cela reste simple.
  • On n’a pas la main sur le format de sortie puisque toutes les colonnes "exotiques" des fichiers sources se retrouvent en sortie. Non avenu si on maîtrise le format de ces fichiers.

 

Astuces :

Pour pouvoir visualiser si un objet est une macro il faut activer l'option  "Options" / "Paramètres utilisateur" / "Canevas" / "Afficher les indicateurs de macro sur les outils"

StephaneP_13-1635432224945.png

Cela fait apparaitre un (+) sur les outils qui sont des macros.

macros.png

 

Il suffit alors de cliquer droit dessus et de lancer l'option "Ouvrir la macro" pour ouvrir un onglet dédié pour cette macro.

 

 

StephaneP_14-1635432290464.png

 

 

Pour plus d'information sur les macros, voir les leçons Interactives Macros dans la Community:

 

Voilà, maintenant plus d’excuse pour charger dynamiquement tous ce qui bouge et gérer automatiquement tous ces cas sans n’avoir plus rien à toucher d’un lancement à l’autre ou.. au contraire rester simple lorsqu’on a pas besoin de complexité.

 

Elle n’est pas belle la vie ? 😊

 

Enjoy !

Stéphane Portier
Sales Engineer

Étiquettes