Les structures de données flexibles telles que les paires valeurs clés - ou plus spécifiquement entity-attribute-value (EAV) - sont un choix populaire chez de nombreuses applications commerciales. Elles permettent un stockage efficace (souvent en format JSON) dans les cas où le nombre d'attributs possibles pour une entité est très important, mais où un enregistrement particulier ne contient des données que pour une poignée d'entre eux.
Malheureusement, si ce type de stockage est excellent pour de l’entrée de données, il est moins approprié à la récupération de celles-ci, ce qui est le but des outils analytiques tels que Tableau.
Nous avons récemment rencontré l’un de nos clients pour lequel certaines des stratégies les plus courantes pour traiter ce type de stockage de données ne convenaient pas - voici comment nous avons résolu le problème.
Dans ce scénario, nous voulons construire un tableau de bord à partir des données de diagnostic d'un patient. Un patient (c.-à-d. "l'entité") peut passer des tests médicaux différents (c.-à-d. "les attributs") d'un autre patient, mais nous voulons permettre aux médecins de passer rapidement du patient 1 au patient 2 (et à tous les autres patients possibles) sans avoir à recréer un tableau de bord ou un visuel dédié par patient. N'oubliez pas que la combinaison des tests médicaux par patient varie, et que nous ne disposons donc pas d'une structure cohérente que nous pourrions appliquer à tous les patients.
Pour rendre les choses encore plus complexes, la flexibilité de cette structure de données permet d'ajouter facilement de nouveaux attributs du côté du système de stockage. Cela signifie donc que la couche d'analyse visuelle devra répondre de manière dynamique aux nouvelles entrées.
Lorsque l'on envisage une solution de rapports répétitifs (c.-à-d. un tableau de bord qui se rafraîchit tous les jours), la plupart des outils d'analyse fonctionnent mieux avec une structure de données prédéfinie au nombre fixe de colonnes, idéalement aussi plat que possible. Certaines bases de données telles que PostgreSQL ou Snowflake supportent les dialectes SQL qui permettent d'aplatir les paires de clé-valeur JSON à l'aide d'une requête SQL. Mais comme le résultat de ces requêtes peut changer à chaque fois que la requête est exécutée, il est difficile d'exploiter ces requêtes directement dans l'outil analytique. Une autre solution consiste à prédéfinir des structures aplaties au sein de votre entrepôt de données, ce qui répondrait mieux aux besoins répétitifs de votre outil d'analyse mais pourrait être difficile à développer et à maintenir, tant du côté de la base de données que de celui de l'outil d'analyse. D'autres options pour aplatir les données JSON incluent l'utilisation de Python dans la préparation des tableaux - comme nous l'avons fait ici - mais là encore la structure des données peut changer, ce qui signifie que la mise à jour prévue de notre tableau de bord peut être interrompue.
Bien que l'idéal serait d'aplatir les données, ce n'est pas souvent une option envisageable.
Nous devions trouver un moyen de disposer d’une structure de données fixe, tout en visualisant dynamiquement une structure différente pour chaque entité (pour chaque patient dans notre cas).
Commencez par entrer dans les extensions de Tableau. Si vous êtes familier avec celles-ci vous pouvez passer au paragraphe suivant. Si ce n’est pas le cas, vous devez savoir que les extensions de Tableau sont des applications web auto-déployées, qui ont une communication bidirectionnelle avec le tableau de bord. Les extensions du tableau de bord permettent toutes sortes de scénarios, tels que l'intégration de Tableau avec des applications personnalisées, la modification des données pour un visuel ou même la création de visualisations personnalisées en utilisant une bibliothèque JavaScript tierce et en la plaçant à l'intérieur du tableau de bord. Les possibilités sont infinies !
Pour notre scénario, nous avons construit une extension Tableau pour lire, analyser puis afficher les données semi-structurées de façon dynamique.
Notre solution fonctionnera avec n'importe quel nombre de patients ayant un grand nombre d'attributs possibles. Mais, pour des raisons de simplicité, nous utiliserons 2 patients avec un nombre limité d'attributs par patient.
Voici un échantillon de l'ensemble de données - notez que l'horodatage varie pour chaque rangée de patients et que les attributs des données varient par patient.
Connectez-vous à vos données comme vous le feriez normalement et introduisez la colonne de données JSON telle quelle.
Construisez le tableau de bord, en fournissant de la place pour l'extension
Dans notre scénario, nous nous sommes appuyés sur l'exemple suivant du tableau qui s'est avéré être un bon point de départ.
Modifier l'extension pour pouvoir analyser le champ des attributs JSON
Cela peut être fait de plusieurs façons mais, dans un but de simplification, nous avons utilisé la fonction d'analyse JSON pour analyser le tableau, puis avons fait une boucle à travers l'objet JSON analysé pour ajouter les paires clé-valeur au champ des en-têtes et des lignes que nous allons visualiser ci-dessous.
Ajoutez un type de visualisation pour afficher les données analysées. Dans notre cas, nous avons ajouté une visualisation des données analysées sous forme de tableau.
L'échantillon mentionné ci-dessus utilise la bibliothèque de données, qui fonctionne également bien dans notre cas.
Activer les interactions et les filtres
Nous avons mis en place des auditeurs d'événements pour voir si un utilisateur a apporté des modifications aux filtres du tableau de bord ou sélectionné des marques sur un visuel ou le tableau sous-jacent.
Suivez ces étapes
Ajout de l’extension au dashboard
Et voilà! Nous avons des visualisations de tableaux dynamiques qui s'actualisent en fonction du patient sélectionné. Dans la vidéo suivante, vous pouvez voir comment les colonnes du tableau du bas changent en fonction de la sélection du filtre ou de la ligne sélectionnée dans le tableau du haut :
Avec ce type d'extension, tout créateur de tableau de bord (même ceux qui ne connaissent pas JSON) peut créer un tableau de bord dynamique qui affiche des données semi-structurées de manière user friendly.
Pas le temps de se plonger dans les extensions? Si vous préférez éviter de développer les extensions et de créer les interactions dynamiques entre les visuels du tableau, nous pouvons vous aider en développant une solution dans votre environnement. Après une brève discussion, Keyrus peut immédiatement commencer à traiter vos données, à développer votre extension personnalisée, et même à concevoir et construire vos nouveaux tableaux de bord.