Tuto Tableau #3 : Changer la granularité temporelle de vos graphiques avec un paramètre (jour/semaine/mois/trimestre/année…)

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 :
  1. L’utilisateur choisit manuellement la granularité de la date
  1. La granularité de la date est choisie automatiquement en fonction de la longueur de la période sélectionnée

Pré-requis La sélection de date

Image without caption
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]))) }
      Beginning of Max Month
  • Créer le paramètre pour entrer la date de début
    • Image without caption
      • 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]) }
      Max Date
  • Créer le paramètre pour entrer la date de fin
    • Image without caption
      • 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]
Is in Time Period?
J’utilise ce booléen en filtre dans un visuel pour ne montrer que la période sélectionnée en sélectionnant Vrai ➡️
Image without caption

Option 1 Choix manuel de la granularité de date

Image without caption
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

Image without caption
  • 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)
sql
CASE [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
Date Setup Graph
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.
Icon
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é).
sql
CASE [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
Date Label Text
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

Image without caption
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 :
  1. Si la sélection de date est au moins égale à trois ans, alors je veux voir ma date en année
  1. Si la sélection de date est au moins égale à un an, alors je veux voir ma date en trimestre
  1. Si la sélection de date est au moins égale à quatre mois, alors je veux voir ma date en mois
  1. Si la sélection de date est au moins égale au mois complet, alors je veux voir ma date en semaine
  1. 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é.
sql
DAY(DATEADD('month', 1, DATETRUNC('month', [Param Start Date])) - 1)
Days in Month

Un champ calculé pour spécifier nos règles de changements de granularité

sql
IF 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
Date Setup Selection

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.
sql
CASE [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
Date Setup Graph With Setup Selection
❗Ne pas oublier d’utiliser le champ Date Setup Graph With Setup Selection sur l’axe des dates.
Icon
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].
sql
CASE [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
Date Label Text With Setup Selection
✍️
L’auteure : Eva Despesse
Image without caption
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