Donnée d’origine
Elasticsearch est une base de données NOSQL orientée document (JSON) et, de ce fait, chaque document doit être vu comme étant indépendant les uns des autres.
Cependant, il peut arriver que la donnée soit interdépendante, comme avec le jeu de données ci-dessous :
Dans cet exemple, on voit des colis avec des dates et différents statuts :
- Demande créée
- Pris en charge
- Expédié
- Livré
Il y a donc clairement un lien entre les documents et cela pose problème pour répondre à certaines questions orientées métier.
Cas d’usages
Voici quelques exemples de questions qu’il serait légitime de se poser mais que cette modélisation risque de nous empêcher de résoudre :
- Comment identifier facilement mes colis expédiés mais non livrés?
- Quel est le délai, en jours, entre la prise en charge d’un colis et son expédition?
Ces deux questions supposent un lien fort entre les documents.
Création de la transformation
La transformation doit être de type Pivot :
Concernant la partie Group By, il faut choisir le champ num_colis :
Cette agrégation est de type “terms” et fait référence au champ “num_colis.keyword”.
Pour les agrégations, plusieurs ont été créées :
- 01_Demande créée : agrégation de type filter, avec la requête term sur la valeur “01_Demande créée”. Cette agrégation permet de savoir si le colis a été créé dans le système.
- 02_Pris en charge : agrégation de type filter, avec la requête termsur la valeur “01_Pris en charge” avec deux sous agrégations :
- event.cardinality : le colis est-il pris en charge?
- date.max : à quelle date le colis a-t-il été pris en charge?
- 03_Expédié : agrégation de type filter, avec la requête term sur la valeur “03_Expédié” avec deux sous agrégations :
- event.cardinality : le colis est-il expédié?
- date.max : à quelle date le colis a-t-il été expédié?
- 04_Livré : agrégation de type filter, avec la requête term sur la valeur “04_Livré”. Cette agrégation permet de savoir si le colis a été livré au destinataire.
- Date_demande : agrégation de type min,sur le champ date. Cette agrégation permet de trouver la date principale de la donnée (qui servira pour la data view ensuite)
En synthèse :
Le résultat obtenu dans l’aperçu (suite à une réorganisation des colonnes) :
Avec cette nouvelle vision de la donnée, il va être possible de répondre aux deux cas d’usages précédents !
Nous pouvons maintenant terminer la transformation :
Réponse à la question 1
=> Quels sont mes colis expédiés mais non livrés?
Il est maintenant très simple d’y répondre à l’aide de filtres :
Réponse à la question 2
=> Quel est le délai, en jours, entre la prise en charge et l’expédition d’un colis?
Pour pouvoir répondre à cette question, il faut d’abord ajouter un Runtime Field qui permet justement de calculer ce délai :
Une fois que ce nouveau champ “delai_expedition” existe, il est très simple de surveiller ce délai dans Discover :
Vous savez maintenant comment répondre à des questions analytiques plus complexes dans Elasticsearch !
Vous souhaitez bénéficier d'experts, de développeurs, ou d'une formation sur Elasticsearch - Kibana ? Contactez-nous !