JMP Live est une plateforme puissante pour l'analyse et la visualisation d'ensembles de données en constante évolution, notamment grâce à sa capacité à actualiser les tables à partir d'entrepôts de données connectés. Cependant, lors du développement de nouveaux produits, ces pipelines sont souvent incomplets, et la collecte de données auprès de plusieurs utilisateurs ou sites devient un défi logistique.
Bonjour à tous. Bienvenue à ma présentation. Je m'appelle Timothy Whetstone et je suis accompagné de mon co-présentateur, Sage Darling. Nous travaillons tous deux chez IDEXX Laboratories, et cette présentation porte sur l'utilisation de JMP Live comme entrepôt de données.
Nous avons beaucoup utilisé JMP Live au cours de l'année écoulée. Nous trouvons vraiment formidable de pouvoir configurer des tables à rafraîchissement automatique dans nos différents entrepôts de données existants grâce à des pipelines robustes, de la source de collecte à l'entrepôt, puis à JMP Live. C'est vraiment idéal pour ce cas d'usage.
Depuis que nous l'utilisons de plus en plus, nous avons identifié quelques cas d'utilisation potentiels que nous aimerions voir JMP Live prendre en charge, mais il ne dispose pas des fonctionnalités nécessaires pour le faire facilement. Il s'agit principalement d'une source de données ou d'une source de génération de données qui n'est pas hébergée dans un service cloud ou un entrepôt de données volumineux, où l'on récupère simplement des fichiers et des données, disponibles uniquement localement. Surtout lorsque vous disposez de ce type de données et que vous continuez à obtenir des données qui appartiennent au même ensemble de données final pour ce que vous souhaitez montrer, mais de manière temporaire. Nous avons pensé à de nombreuses études longitudinales au cours de cette réflexion.
Nous disposons de ces fichiers manuels. Nous souhaitons les regrouper au même endroit. JMP Live est généralement un bon endroit pour cela, mais nous avons besoin d'un moyen plus automatisé pour les y placer plutôt que de télécharger, concaténer, puis re-télécharger les tables manuellement.
En discutant avec l'équipe de JMP, ils m'ont transmis un extrait de ce code. Il a été essentiel à notre travail. Il explique comment utiliser un script pour télécharger et ouvrir une table depuis JMP Live. C'est après avoir reçu ce code que nous avons eu de nombreuses idées d'utilisation. Il s'agit en quelque sorte d'une simple requête HTTP. C'est un outil existant qui permet d'obtenir des données d'autres sites web, mais la clé du succès réside dans la manière d'assembler et de construire l'URL de vos tables JMP Live, et nous y reviendrons. Sage, je vous laisse la parole un instant.
J'ai trouvé l'exemple de téléchargement de fichiers que Timothy venait de décrire dans JMP, et mon cas d'utilisation était prêt à l'exploiter. J'ai donc décidé de commencer par créer un moyen de récupérer les tables de JMP Live dans leur propre dossier, de les concaténer localement, puis de les retransférer vers un emplacement spécifique. Pour ce faire, il faut maîtriser certains aspects : la connexion à JMP Live et la récupération des informations. C'est ainsi que, dans mon code, j'ai créé un tableau associatif que j'utilise à l'initialisation.
Voici un exemple de code que nous avons trouvé dans le module complémentaire qui récupère ces informations. Mon script fonctionne de manière similaire. Il analyse les accès de l'utilisateur dans JMP Live et récupère les emplacements des dossiers auxquels il a accès. Nous continuons ensuite à rechercher les dossiers qui se trouvent à l'intérieur de dossiers afin d'y ajouter ce que JMP appelle les enfants.
Dans ce cas, avec ce code, nous construisons dynamiquement ce tableau associatif. Ainsi, lorsque je consulte les dossiers auxquels vous avez accès pour effectuer le téléchargement, c'est ce code qui recherche ces informations au début du script. Ainsi, vous pouvez visualiser tout ce à quoi vous avez accès et extraire des fichiers de n'importe quel dossier pour les concaténer, puis les placer à l'emplacement de votre choix.
Ceci n'est qu'une petite partie. Ce tableau associatif est construit de cette façon. Au final, grâce à ce module complémentaire, vous disposez de trois options principales, issues de ce que j'ai construit.
La première option consiste à sélectionner un dossier JMP Live à partir duquel effectuer la concaténation. C'est là que, lors du lancement du tableau associatif, je récupère tous les dossiers auxquels vous avez accès, ce qui vous donne la liste de tous les dossiers accessibles. Vous pouvez ainsi choisir le dossier à partir duquel effectuer la concaténation, puis un dossier d'enregistrement issu de la même liste du tableau associatif. Vous pouvez ensuite sélectionner une table à mettre à jour.
D'après les informations saisies ici, tous les fichiers du dossier Live à partir duquel effectuer la concaténation sont concaténés, puis enregistrés dans ce dossier (le dossier « Enregistrer dans le dossier »), puis enregistrés sous la table sélectionnée dans ce dossier. Ces fichiers correspondent aux tableaux associatifs que je viens de vous montrer dans l'écran précédent pour le code qui extrait ces informations de JMP Live à partir de la connexion JMP Live qui vous est propre.
Pour réaliser tout cela, ceci n'est qu'une partie du travail. Le tableau associatif extrait les informations auxquelles vous avez accès, mais vous devez pouvoir les extraire et les restituer. Un des atouts majeurs de JMP Live est la possibilité de créer une URL permettant d'extraire les données à partir de cette requête HTTP. Voici un exemple de ce que nous utilisons pour créer cette URL, qui télécharge ces fichiers localement.
Par exemple, nous utilisons une URL de base pour JMP Live. Il s'agit ici du nom HTTPS de l'entreprise JMP Live. Dans notre cas, il s'agit d'IDEXX. Nous sommes autorisés à l'utiliser pour créer un lien vers JMP Live. Ensuite, il y a des éléments statiques à gérer. Comme pour les packages d'API, il s'agit d'une partie statique de l'URL liée à JMP Live.
Nous savons alors que nous disposons d'un Live ID. L'un des éléments extraits du tableau associatif dont j'ai parlé plus tôt est le Live ID qui relie les dossiers, puis les tables de données. Ainsi, cette URL peut être construite dynamiquement à partir de ce tableau associatif au fur et à mesure de sa création. Ensuite, nous disposons d'un autre élément statique, les données, suivi d'un nom de table de données JMP Live, que nous extrairons de cette URL, puis dont nous téléchargerons le contenu : « .JMPLive/contents ».
Encore une fois, ce n'est qu'une partie de la magie. Il vous faut ensuite remplacer la table JMP Live. Une fois tous vos fichiers regroupés dans votre dossier et concaténés dans votre instance JMP locale, il vous faut les placer quelque part. Voici l'exemple de code que nous utilisons pour remplacer cette table JMP Live.
Nous créons une nouvelle connexion, puis, à partir de ce tableau associatif, nous y stockons les informations de la table sélectionnée. Celle-ci est ensuite transmise sous forme de nouveau contenu JMP Live, puis réinjectée dans JMP Live pour la mise à jour des données. Ainsi, vous pouvez effectuer des mises à jour dynamiques à partir des tables concaténées de votre dossier.
Quel était mon cas d'utilisation ? En testant ce projet, nous nous sommes dit que ce serait intéressant à utiliser localement. Nous avons notamment pu l'utiliser pour analyser les tendances de stabilité. Voici un exemple du code que j'ai écrit et de son fonctionnement. Vous pouvez voir dès le début la fenêtre de démarrage de ce code, qui affiche les trois entrées que je viens de vous montrer quelques diapositives plus tôt. Il faut sélectionner le dossier. Ensuite, il faut sélectionner le dossier d'où extraire les données. Dans ce cas, j'ai des données brutes de stabilité. Chaque fois que des techniciens exécutent d'autres données, elles sont placées à cet emplacement précis, dans ce dossier de données brutes. C'est ce dossier qui est sélectionné pour la concaténation.
Ensuite, je souhaite l'ajouter à mes données de tendance, car je souhaite poursuivre la concaténation dans ce fichier. C'est là que je sélectionne un dossier JMP Live pour l'enregistrer. Dans ce cas, il s'agit de mes données de tendance de stabilité.
Ensuite, comme ma table de données de tendance de stabilité n'en contient qu'une seule, je sélectionne ensuite la table de données de tendance de stabilité. Cependant, c'est celle que j'ai commencée. Vous pouvez la nommer comme vous le souhaitez. Le tableau associatif l'extrairea cependant à cet emplacement. Dans ce cas, j'ai d'abord créé la table. Jusqu'à présent, j'ai utilisé le principe selon lequel la table doit déjà exister dans JMP Live, mais ce serait une fonctionnalité intéressante à l'avenir :… difficile à dire, une fonctionnalité à l'avenir. Ce serait une fonctionnalité intéressante à ajouter de manière dynamique, permettant de créer de nouvelles tables de données concaténées afin de les enregistrer à des emplacements précis, car les données peuvent changer.
À quoi cela ressemble-t-il depuis JMP Live ? Du côté de JMP Live, vous voyez le dossier de départ. Vous pouvez y voir les points temporels indépendants que les utilisateurs ont téléchargés. Dans ce cas, c'est moi. Les techniciens pourront également télécharger depuis cet emplacement, s'ils y ont accès. Ce sont les tables qui seront concaténées. Vous pouvez voir ci-dessous un exemple de tendance de stabilité dans mon dossier, qui est un dossier distinct de mes données brutes, et vous pouvez voir la table de données à partir de laquelle je modifie les données.
À quoi cela ressemble-t-il en back-end une fois que cela se produit ? Lorsque vous pouvez observer la concaténation, la magie opère. Vous pouvez voir physiquement JMP Live indiquer que la table de données a terminé ses mises à jour lorsque vous exécutez ce code, car il la met à jour en temps réel. Dans l'exemple de gauche, vous pouvez voir que ma table de données initiale ne contient que les points temporels 0 et 1. Comme vous l'avez vu dans la table précédente, certains points temporels ont également atteint le numéro 3. Après l'exécution du code, vous pouvez constater qu'un troisième point temporel est désormais concaténé à ces tables.
Après avoir conclu cette expérience et continué à utiliser ces données, j'ai collaboré avec Timothy et lui ai dit : « J'ai ce code. Il pourrait te servir, compte tenu de ce que tu fais ici, dans cette présentation. » C'est alors que Timothy l'a pris et l'a augmenté à 11.
Merci Sage. J'avais alors repris une grande partie du travail de Sage et je me suis dit : « C'est vraiment pratique de pouvoir prendre plusieurs fichiers présents sur JMP Live, les concaténer dans une nouvelle table et la réintégrer dans JMP Live. » Dans mon cas d'utilisation, j'avais des données qui n'existaient que localement. J'avais besoin d'un moyen efficace de les récupérer, de les intégrer dans JMP Live et de les concaténer avec des données déjà présentes. Je souhaitais partager et collaborer avec d'autres personnes, pas nécessairement au même endroit, afin que nous puissions chacun ajouter des données indépendamment au même ensemble de données. Je ne voulais surtout pas que les utilisateurs effectuent beaucoup de manipulations manuelles.
Je me suis dit : « Et si j'avais un outil pour me connecter à des tables spécifiques ? » De plus, je voulais pouvoir exécuter n'importe quel ETL de données. Si je veux ajouter de nouvelles colonnes, créer des tables récapitulatives et les importer, je voulais vraiment pouvoir créer un script de workflow JMP, l'associer à certaines tables et à certains projets, puis le partager avec d'autres personnes afin que nous puissions tous exécuter la même tâche, mettre à jour les mêmes tables et visualiser les résultats en temps réel.
Ceci ne montre que le début d'une fenêtre d'outils. Nous allons faire une visite virtuelle en direct dans quelques secondes. Je souhaite d'abord revenir un peu plus sur le code. De plus, en termes de scripts, comme dans Sage, il s'agit simplement de regrouper tous ces éléments. J'utilise également de nombreux tableaux associatifs pour stocker et sauvegarder une grande partie des informations spécifiques au projet et des scripts spéciaux.
Vous avez peut-être vu dans la fenêtre précédente une fenêtre d'édition de script. Pour que cela fonctionne, il suffit d'utiliser la fonction Eval Parse, que j'intègre dans une fonction vide. Ainsi, les utilisateurs peuvent simplement coller des scripts dans cette fenêtre. Une fois exécutée, tout fonctionne parfaitement pour analyser les tables, les joindre et les concaténer avec celles de JMP Live. Nous allons interrompre cette présentation un instant pour vous montrer quelques exemples rapides.
Tout d'abord, j'ai ici un espace JMP Live, puis mon outil en cours d'exécution. Voici à quoi ressemble l'outil à sa première ouverture. Tout en haut, vous trouverez la section « Paramètres ». Vous pouvez enregistrer ces paramètres et, à chaque exécution du module complémentaire, ils seront renseignés. Il s'agit du nom de votre connexion JMP Live, de l'URL de base de votre JMP Live et de l'option « pré-remplir » une liste de tables dans l'outil. Cette liste se trouve dans la section ci-dessous.
Voici comment nous choisissons les tables à suivre et auxquelles je souhaite associer des scripts. Dans ce cas, j'ai repris certaines des fonctionnalités de Sage pour ajouter de nouvelles tables, ce que nous verrons plus loin. Un aspect important de la collaboration est la possibilité de charger des listes de projets. Si vous partagez des listes de projets avec d'autres utilisateurs, ils peuvent ensuite les charger.
Si je charge une liste de projets pré-créée, nous constatons qu'elle contient deux tables : « Pas mon chat » et « Données météo hebdomadaires ». Vous remarquerez, dans la partie script, que leurs tailles sont légèrement différentes. Pour cette table « Pas mon chat », j'ai un script de base qui, lorsqu'il est exécuté, invite l'utilisateur à sélectionner un fichier à ouvrir, puis renvoie ce fichier après son ouverture. En résumé, une fois ce fichier renvoyé, c'est ce fichier qui sera concaténé avec la table listée ici.
Dans cet autre exemple, non seulement le fichier est ouvert, mais j'ajoute également une colonne qui calcule la moyenne de deux autres colonnes. Pour illustrer cela, je peux aller plus loin et trouver le tableau « Données météorologiques hebdomadaires » ici. Il est déjà assez volumineux. J'en suis à 124 lignes et je couvre plusieurs semaines. Je pense qu'il s'agit des semaines 1 à 10. Je peux parcourir le tableau.
Lorsque j'exécute cet outil, il me demande de sélectionner une table. J'ai un dossier contenant plusieurs tables de ce type. Je peux ouvrir la nouvelle table, cliquer sur le bouton Ouvrir, puis patienter quelques secondes. Des tables apparaissent, puis disparaissent. Vous constaterez ensuite dans JMP Live que les données ont été mises à jour. Je peux alors recharger la table. J'en suis maintenant à 393 lignes.
Pour revenir un peu en arrière, si je voulais ajouter une autre table ici, comme vous le remarquerez dans JMP Live, j'ai une deuxième table appelée « Mesures de classe », et un rapport qui l'accompagne. Je clique sur le rapport. Je vois que je suis des mesures, et elles couvrent trois points temporels pour plusieurs personnes. Je ne l'ai pas encore dans ma liste, mais je peux l'ajouter. En utilisant le même script que celui développé par Sage pour effectuer des recherches dans JMP Live ou ce à quoi vous avez accès, une fenêtre contextuelle très similaire s'ouvre. Je peux y accéder, trouver mon dossier d'exemples, puis sélectionner ma table « Mesures de classe » et l'ajouter à la liste de projets.
Lorsque j'ajoute ce projet à la liste, vous constaterez que je peux toujours basculer entre ces autres éléments. Le script de base est également pré-rempli dans la fenêtre, ce qui me permet de l'exécuter et de sélectionner un fichier à concaténer. Je vais le faire maintenant. Je vois que je me trouve au point temporel 3 de cette table, et il se trouve que j'ai le fichier correspondant au point temporel 4. Lorsque je clique sur le bouton Ouvrir, le fichier apparaît, puis disparaît. JMP Live constate que ce rapport est en cours de régénération et que le point temporel 4 y a été ajouté. Toute personne ayant accès à cette table peut utiliser cet outil pour mettre à jour les tables JMP Live avec les données de ce projet, à condition que je lui donne accès à JMP Live.
Nous pouvons revenir en arrière. Nous constatons que le tableau « Mesures de classe » a également été mis à jour, car il est lié à ce rapport, et nous voyons que les données du point temporel 4 sont présentes. J'ai des données pour un cinquième point temporel. Je peux tout aussi bien relancer l'opération pour les ajouter également. Une fois de plus, une queue apparaît, puis disparaît, et une version mise à jour du tableau est prête. Je peux cliquer sur « RECHARGER » et je constate que les données supplémentaires ont été ajoutées au tableau. Je peux revenir en arrière et constater que mon graphique a également été mis à jour.
C'est un aspect très stimulant pour nous, notamment la collaboration sur certains projets et la possibilité d'intégrer des workflows plus standardisés et de partager des scripts, notamment pour ceux qui découvrent encore Workflow Builder et l'automatisation de certains flux. C'est vraiment appréciable de leur fournir des outils comme celui-ci, simplement pour éviter certains problèmes que nous rencontrons parfois sur nos projets multisites.