Skip to content

Dashboard Business

Estimated time to read: 7 minutes

On va maintenant changer de Datasource pour aller taper directement dans une base de données.

Data Source

On va créer une nouvelle datasource via le menu Connections > Data sources et choisir PostgreSQL comme type de datasource.

PgSQL

Les informations de connexion sont les suivantes :

Information Value
URL postgres:5432
Database jack
User john
Password viewer
TLS/SSL Mode disable

Attention Ă  tes doigts

Grafana ne fait aucun contrĂŽle sur les requĂȘtes qui sont envoyĂ©es sur la BDD. Un DROP SCHEMA default CASCADE; est assez efficace pour devoir rĂ©initialiser la BDD...

Une bonne pratique est donc d'avoir un compte en read-only pour Grafana pour accéder à la BDD.

Success

DS ok

On peut maintenant commencer Ă  construire notre dashboard (par exemple en cliquant sur building a dashboard).

Lumbercamp front end

Nous avons actuellement une application qui permet de visualiser les données de notre application. C'est woodstoredashboard.

alt text

Cette application stocke les données dans une base de données PostgreSQL. Les deux objets principaux sont les commandes dans la table wood_order et les stocks stock.

On va cette fois-ci faire un dashboard en utilisant cette source de données PostgreSQL. On va afficher les commandes.

Dans le menu Dashboards, créer un nouveau dashboard pour cette partie.

Données statiques

Il est possible d'afficher des informations qui ne sont pas temporelles dans un dashboard, en utilisant par exemple le mode de visualisation Table.

alt text

â„č Il n'est alors pas possible de sĂ©lectionner une plage de temps. Ou plutĂŽt ça ne sert Ă  rien vu que l'information n'existe pas dans les donnĂ©es.

Success

Ajouter 2 visualizations dans le dashboard pour afficher le contenu des 2 tables de la BDD DB

Stock Status

On souhaite afficher la liste des essences de bois dans le stock.

Pour cela on va :

  • crĂ©er une visualization de type Pie Chart.
  • configurer la requĂȘte SQL pour faire la somme des quantitĂ©s de bois par essence depuis la table Stock
  • modifier les options de la visualization pour avoir les pourcentages et les diffĂ©rents types affichĂ©s
Si la visualization est en erreur

Il y a plus de détails sur l'icÎne warning:

example erreur

Spoiler la solution est lĂ 
  • SELECT SUM(quantity) as quantity, type as type FROM stock GROUP BY type LIMIT 50
    
  • On sĂ©lectionnera
    • les values pour ne pas ĂȘtre en Calculate mais en All values
    • la lĂ©gende pour ĂȘtre sous la forme d'une table.
    • Les labels Percent et/ou Value

Result

Sauvegarder le dashboard et retourner Ă  l'affiche de celui-ci via Back to dashboard

Order Total

On va faire la mĂȘme chose pour les commandes dans une autre visualization. On va afficher le total des commandes par essence de bois, cette fois-ci avec le pourcentage affichĂ© dans la lĂ©gende et la valeur affichĂ©e sur le graphique.

Le formulaire c'est bien mais les vrais pros utilisent le mode Code

En plus, il y a une fonction d'auto-complĂ©tion bien pratique pour les requĂȘtes SQL.

Spoiler la solution est lĂ 
  • SELECT sum(quantity), type FROM wood_order w GROUP BY type
    
  • On sĂ©lectionnera
    • les values pour ne pas ĂȘtre en Calculate mais en All values
    • la lĂ©gende pour ĂȘtre sous la forme d'une table.
    • Les labels Percent et/ou Value

Result

Sauvegarder le dashboard et retourner au dashboard complet

Et si on utilisait la colonne Timestamp

Vous avez peut-ĂȘtre remarquĂ© que la table wood_order contient une colonne timestamp.

On va créer une nouvelle visualization pour avoir une vision de nos commandes à travers le temps.

Lors de l'utilisation de l'auto-complétion, vous devez voir la proposition de fonctions : timeFilter

Plusieurs macro sont mises Ă  disposition pour faciliter l'utilisation des dates.

MĂȘme si nos donnĂ©es ne sont pas au format time series mais que nous avons une information sur le temps, il est possible de faire des graphiques temporels.

Il faut un peu aider Grafana en lui indiquant que la colonne est un timestamp.

Et rajouter une clause where pour prendre en compte la plage de temps ou utiliser un filtre.

Success

  • CrĂ©er une visualization de type Bar Chart qui montre le nombre de commandes par type d'essence d'arbre
  • Configurer des thresholds Ă  25%, 50% et 75%

Histogram

Spoiler la solution est lĂ 
  • SELECT count(id), type FROM wood_order WHERE $__timeFilter(timestamp) GROUP BY type
    
  • Standard options > Color scheme : From thresholds (by value)
    • Ajouter 3 thresholds
  • Threshold mode : Percentage

On peut maintenant afficher des données sous la forme d'un histogramme et voir l'évolution des commandes / stock dans le temps en changeant la plage de temps d'affichage.

Encore plus fort : les Transformations

Afin de manipuler les transformations, nous voulons maintenant afficher les quantitĂ©s qui n'ont pas pu ĂȘtre honorĂ©es dans les commandes par type d'essence.

Mais nous n'avons pas directement cette information dans la table wood_order. On a un champ quantité commandée (quantity) et un champ quantité livrée (honored).

On pourrait se passer des transformations avec une bonne grosse requĂȘte SQL et des jointures mais ce n'est pas pĂ©dagogique ! 😉

Dans une nouvelle visualization, l'objectif est donc de:

  • Afficher pour chaque type d'essence une Gauge montrant le pourcentage de quantitĂ© non-livrĂ©e
  • Utiliser max. 2 requĂȘtes SQL
  • Utiliser uniquement des transformations pour construire la donnĂ©e
Besoin d'un coup de pouce ?

On va faire ici 2 requĂȘtes, l'une pour rĂ©cupĂ©rer la quantitĂ© effectivement livrĂ©e "honored", l'autre pour rĂ©cupĂ©rer la quantitĂ© commandĂ©e "quantity".

Queries

SELECT type, SUM(quantity) AS "ask" FROM wood_order WHERE $__timeFilter("timestamp") GROUP BY type LIMIT 50
SELECT type, SUM(honored) AS "sent" FROM wood_order WHERE $__timeFilter("timestamp")  GROUP BY type LIMIT 50

Un autre ?!

La premiÚre transformation consiste à "ignorer" les 2 frames pour ne faire qu'un jeu de données Transfo1

Success

Gauges

Spoiler la solution est lĂ 
  1. Il faut faire 2 requĂȘtes SQL pour rĂ©cupĂ©rer les quantitĂ©s commandĂ©es et livrĂ©es par commande
    SELECT type, SUM(quantity) AS "ask" FROM wood_order WHERE $__timeFilter("timestamp") GROUP BY type LIMIT 50
    
    SELECT type, SUM(honored) AS "sent" FROM wood_order WHERE $__timeFilter("timestamp")  GROUP BY type LIMIT 50 
    
  2. Ajouter une premiĂšre transformation pour utiliser les donnĂ©es des 2 requĂȘtes comme une seule donnĂ©e Transfo1 3. Ajouter une transformation pour calculer le delta entre ce qui a Ă©tĂ© commandĂ© et ce qui a Ă©tĂ© livrĂ© Transfo2 4. Ajouter une transformation pour filtrer les rĂ©sultats strictement positifs Transfo3 5. Ajouter une transformation pour calculer le pourcentage de ce qui est manquant par rapport au total Transfo4 6. Ajouter une transformation pour filtrer les donnĂ©es qui nous intĂ©ressent : le type et le pourcentage calculĂ© Transfo5 7. Configurer la visualization en type Gauge en affichant toutes les valeurs (All values) des champs numĂ©riques (Numeric Fields), avec une unitĂ© en *Percent (0.0-1.0) et des thresholds Ă  0.2, 0.5, 0.8 Options

Et pour cloturer : les Variables

Il serait intéressant de pouvoir filtrer toutes les visualizations d'un dashboard en fonction du type d'essence d'arbre par exemple pour avoir les infos filtrées uniquement sur l'essence souhaitée.

Dans cette derniÚre étape du lab, on va donc ajouter une Variable au niveau du Dashboard pour pouvoir filtrer en fonction de l'essence que l'on souhaite

Configurer la variable

Dans les Settings du dashboard, configurer une variable type_of_wood qui récupÚre la liste des essences.

Success

Une fois configuré, un champ de filtrage aprÚs sur le dashboard listant les différentes essences trouvées ET l'option All

Variable

Spoiler la solution est lĂ 

Il faut configurer la variable pour utiliser la datasource Postgre et la requĂȘte suivante pour rĂ©cupĂ©rer la liste des essences.

select type from wood_order
Et ne pas oublier de cocher les 2 options :

  • Multi-value
  • Include All option

Modifier les visualizations

Maintenant que notre variable est disponible, il faut modifier les visualizations pour qu'ils la prennent en compte.

Modifier donc les 4 visualizations pour que l'on puisse filtrer sur le type d'essence au niveau du dashboard et que dans leur titre les essences choisies soient afficher

Success

Filtered

Spoiler la solution est lĂ 

Il suffit de:

  • Modifier les requĂȘtes SQL des visualizations pour inclure une clause WHERE:

    SELECT SUM(quantity) AS "quantity", type AS "type" FROM stock s WHERE s.type IN ( $type_of_wood ) GROUP BY type LIMIT 50
    

  • Modifier le Title du panel pour inclure la variable `type_of_wood`` Title