Lorsque l’on créé des dashboards interactifs, pour couvrir plusieurs use cases, il est utile de pouvoir switcher la granularité des dates entre la journée, la semaine, le mois, le trimestre, et l’année.Je vous propose deux options :
- L’utilisateur choisit manuellement la granularité de la date
- La granularité de la date est choisie automatiquement en fonction de la longueur de la période sélectionnée
TL;DR
Lien des workbooks Tableau Public :
Pré-requis
La sélection de date
Pour réaliser chacune des deux options, il est préférable d’avoir une sélection de date de début et date de fin.
Ça n’est pas obligatoire pour la première option, mais c’est rare que des utilisateurs veulent voir la totalité de leur données tout le temps.
Pour mettre en place une sélection de date simple avec date de début et date de fin, c’est très simple : il faut seulement trois éléments.
Un paramètre de date de début
➕ Le bonus : avoir la date par défaut à l’ouverture du classeur au premier jour du dernier mois des données
- Créer le champ calculé pour avoir le premier jour du dernier mois présent dans les données
sql{ FIXED : DATE(DATETRUNC('month', MAX([Order Date]))) }
- Créer le paramètre pour entrer la date de début
- Je le nomme
Param Start Date
- Le type est Date
- J’autorise toutes les valeurs
- La valeur à l’ouverture du classeur est mon champ calculé
Beginning of Max Month
Un paramètre de date de fin
➕ Le bonus : avoir la date par défaut à l’ouverture du classeur au dernier jour des données
- Créer le champ calculé pour avoir le dernier jour des données
sql{ FIXED : MAX([Order Date]) }
- Créer le paramètre pour entrer la date de fin
- Je le nomme
Param End Date
- Le type est Date
- J’autorise toutes les valeurs
- La valeur à l’ouverture du classeur est mon champ calculé
Max Date
Un booléen indiquant si l’on se trouve dans la période sélectionnée
sql[Order Date] >= [Param Start Date] AND [Order Date] <= [Param End Date]
J’utilise ce booléen en filtre dans un visuel pour ne montrer que la période sélectionnée en sélectionnant
Vrai
➡️Option 1
Choix manuel de la granularité de date
Pour donner l’option aux utilisateurs de voir leurs données en jour, semaine, mois, trimestre, ou années, il faut mettre en place deux (ou trois 😉) éléments supplémentaires.
Un paramètre de setup de date
- Je le nomme
Param Date Setup
- Le type est String
- Je précise les valeurs que j’autorise :
- day
- week
- month
- quarter
- year
- Si j’ai besoin, je change la valeur d’affichage (ici, j’ai seulement ajouté des majuscules)
Ce paramètre servira à l’utilisateur de dropdown pour choisir s’il souhaite voir ses données à la journée, à la semaine, etc.
Un champ calculé à utiliser en axe x
Pour que le paramètre agisse sur le graph, il faut modifier le champ de l’axe x (qui, jusqu’ici est simplement le champ de date)
sqlCASE [Param Date Setup] WHEN 'day' THEN DATENAME('day', [Order Date]) + "/" + STR(DATEPART('month', [Order Date])) WHEN 'week' THEN 'W' + STR(WEEK([Order Date])) WHEN 'month' THEN STR(DATEPART('month', [Order Date])) + "/" + DATENAME('year', [Order Date]) WHEN 'quarter' THEN "Q" + DATENAME('quarter', [Order Date]) + ' ' + STR(YEAR([Order Date])) WHEN 'year' THEN DATENAME('year', [Order Date]) END
Il indique quelle partie de la date prendre pour chacune des option du
Param Date Setup
. Il précise aussi comment afficher la valeur sur l’axe :- Pour
day
: d/m
- Pour
week
: Wx
- Pour
month
: m/yyyy
- Pour
quarter
: Qx yyyy
- Pour
year
: yyyy
❗Ne pas oublier d’utiliser le champ
Date Setup Graph
sur l’axe des dates.Et voilà, c’est déjà fini ! 🏝️
On n’a plus qu’à afficher les paramètres de date de début, date de fin, et date setup sur notre dashboard pour que les utilisateurs puissent maitriser la granularité eux même.
Dans le workbook partagé au début de l’article, cette option est illustrée dans le dashboard
Niveau 1 - Manuel
[Bonus] Un champ calculé pour formater les différents éléments de date dans les infobulles
Si l’on veut aller un tout petit peu plus loin, je vous propose un champ calculé pour pouvoir formater l’affichage de la date dans l’infobulle. C’est utile car le format pour un axe peut-être différent du format que l’on souhaite intégré dans l’infobulle (souvent plus explicite, moins condensé).
sqlCASE [Param Date Setup] WHEN 'day' THEN STR(DAY([Order Date])) + ' ' + STR(DATENAME('month', [Order Date])) + ' ' + STR(YEAR([Order Date])) WHEN 'week' THEN 'W' + STR(WEEK([Order Date])) + ' (' + STR(DATE([Order Date])) + ')' WHEN 'month' THEN DATENAME('month', [Order Date]) + " " + DATENAME('year', [Order Date]) WHEN 'quarter' THEN "Q" + DATENAME('quarter', [Order Date]) + ' ' + STR(YEAR([Order Date])) WHEN 'year' THEN DATENAME('year', [Order Date]) END
Une fois le champ amené dans l’infobulle, il affichera ce format :
- Pour
day
: dd mmmm yyyy
- Pour
week
: Wx (yyyy-mm-dd)
- Pour
month
: mmmm yyyy
- Pour
quarter
: Qx yyyy
- Pour
year
: yyyy
Option 2
Automatisation de la granularité de date
Pour passer d’un changement de granularité dynamique à un changement automatique, il nous reste que peu d’étapes à faire !
Pour notre exemple, j’ai choisi arbitrairement ces règles :
- Si la sélection de date est au moins égale à trois ans, alors je veux voir ma date en année
- Si la sélection de date est au moins égale à un an, alors je veux voir ma date en trimestre
- Si la sélection de date est au moins égale à quatre mois, alors je veux voir ma date en mois
- Si la sélection de date est au moins égale au mois complet, alors je veux voir ma date en semaine
- Sinon je veux la voir en jour
Un champ calculé pour avoir le nombre de jour dans le mois
Pour la condition numéro 4, il faut noter qu’un mois n’a pas forcément le même nombre de jour, alors il faut créer un champ calculé qui nous donne dynamiquement le nombre de jours dans le mois sélectionné.
sqlDAY(DATEADD('month', 1, DATETRUNC('month', [Param Start Date])) - 1)
Un champ calculé pour spécifier nos règles de changements de granularité
sqlIF DATEDIFF('year', [Param Start Date], [Param End Date]) >= 3 THEN 'year' ELSEIF DATEDIFF('year', [Param Start Date], [Param End Date]) >= 1 THEN 'quarter' ELSEIF DATEDIFF('month', [Param Start Date], [Param End Date]) >= 4 THEN 'month' ELSEIF DATEDIFF('day', [Param Start Date], [Param End Date]) >= ([Days in Month] - 1) THEN 'week' ELSE 'day' END
Un champ calculé à utiliser en axe x
Dans , on avait
Date Setup Graph
. Pour l’option automatique, on doit légèrement modifier ce champ, en incluant ceux que nous avons créé juste avant.sqlCASE [Date Setup Selection] WHEN 'day' THEN DATENAME('day', [Order Date]) + "/" + STR(DATEPART('month', [Order Date])) WHEN 'week' THEN 'W' + STR(WEEK([Order Date])) WHEN 'month' THEN STR(DATEPART('month', [Order Date])) + "/" + DATENAME('year', [Order Date]) WHEN 'quarter' THEN "Q" + DATENAME('quarter', [Order Date]) + ' ' + STR(YEAR([Order Date])) WHEN 'year' THEN DATENAME('year', [Order Date]) END
❗Ne pas oublier d’utiliser le champ
Date Setup Graph With Setup Selection
sur l’axe des dates.Et c’est tout bon ! 🧚♀️
On n’a plus qu’à afficher les paramètres de date de début, date de fin sur notre dashboard. Pas besoin d’afficher le paramètre de setup de date puisque le choix de la plage de date fera le travail à leur place.
Dans le workbook partagé au début de l’article, cette option est illustrée dans le dashboard
Niveau 2 - Automatique
[Bonus] Un champ calculé pour formater les différents éléments de date dans les infobulles
Là c’est exactement le même principe que pour la première option, sauf qu’il faut intervertir
[Param Date Setup]
avec [Date Setup Selection]
.sqlCASE [Date Setup Selection] WHEN 'day' THEN STR(DAY([Order Date])) + ' ' + STR(DATENAME('month', [Order Date])) + ' ' + STR(YEAR([Order Date])) WHEN 'week' THEN 'W' + STR(WEEK([Order Date])) + ' (' + STR(DATE([Order Date])) + ')' WHEN 'month' THEN DATENAME('month', [Order Date]) + " " + DATENAME('year', [Order Date]) WHEN 'quarter' THEN "Q" + DATENAME('quarter', [Order Date]) + ' ' + STR(YEAR([Order Date])) WHEN 'year' THEN DATENAME('year', [Order Date]) END
L’auteure : Eva Despesse
BI Engineer chez UnNest, Eva est en charge des sujets de modélisation de la donnée et du dashboarding, notamment sur Tableau et Power BI.
Ayant commencé dans une start-up, j’ai pu toucher aux flux de données de bout en bout. J’apprécie particulièrement faire les modélisations en bout de chaine avec le dashboarding pour suivre toute la chaine de transformation de données en information.
✉️ Me contacter : eva.despesse@unnest.co