Il y a environ deux ans, j’ai commencĂ© Ă  travailler sur cette solution de comparaison interactive de plages de dates au sein de Data Studio, pour palier Ă  un manque de l’outil. Elle nĂ©cessitait d’utiliser BigQuery comme source de donnĂ©es et le contexte de l’Ă©poque n’Ă©tait pas Ă©quivalent Ă  celui aujourd’hui, mĂȘme si les affinitĂ©s entre Looker Studio et BigQuery Ă©taient dĂ©jĂ  fortes.

Aujourd’hui, elles le sont encore plus. De maniĂšre gĂ©nĂ©rale, BigQuery est beaucoup plus utilisĂ© dans le monde du digital analytics, et l’Ă©quipe BI de Google Cloud travaillant sur Looker Studio ne cesse de faire progresser et d’enrichir les fonctionnalitĂ©s entre les 2 logiciels. La nouvelle intĂ©gration native de BigQuery pour LS en est une nouvelle preuve.

Durant ces 2 annĂ©es, j’ai testĂ© et amĂ©liorĂ© cette solution par l’intermĂ©diaire de projets internes et de rapports pour les clients. Durant ces 2 annĂ©es, BigQuery est aussi devenu un allier quasi systĂ©matique en guise de couche de prĂ©paration de donnĂ©es pour des rapports Looker Studio pĂ©rennes, inscrits dans un dispositif analytics complet, quels que soient les logiciels de collecte de donnĂ©es, avec ou sans rĂ©el entrepĂŽt de donnĂ©es d’ingestion et de traitement.

Donc, la solution que je dĂ©cris dans cet article n’est pas parfaite mais elle permet d’adresser l’une des demandes insatisfaites les plus demandĂ©es, en attendant que la fonctionnalitĂ© soit prise en charge directement par Looker Studio…

C’est parti.


Le résultat

Dans la vidĂ©o ci-dessous, j’ai rĂ©alisĂ© un rapport simple prĂ©sentant des donnĂ©es de ventes par pays. On peut les afficher sur une pĂ©riode principale, et les comparer avec une autre pĂ©riode personnalisĂ©e.
Le but du tutoriel sera de reproduire ce rapport.

J’ai choisi de proposer les options de comparaison suivantes, Ă  savoir que l’utilisateur peut comparer les donnĂ©es de la pĂ©riode principale avec les donnĂ©es de :

  • L’annĂ©e prĂ©cĂ©dente
  • L’annĂ©e prĂ©cĂ©dente, les mĂȘmes jours de la semaine
  • La pĂ©riode prĂ©cĂ©dente (le mĂȘme nombre de jours prĂ©cĂ©dant le nombre de jours sĂ©lectionnĂ©s pour la pĂ©riode principale)
  • Un pĂ©riode personnalisĂ©e, saisie avec 2 champs de dates en respectant le format « YYYY-MM-DD »

La comparaison est faite uniquement si une case est cochĂ©e pour activer la requĂȘte (« compare »).
Cela évite de charger des données non voulues durant la saisie des différents champs.




Ingrédients

Pour créer ce rapport, nous allons avoir besoin des éléments suivants :

  • Une source de donnĂ©es BigQuery sous forme d’une requĂȘte personnalisĂ©e
  • Des paramĂštres injectant les souhaits de comparaison dans la requĂȘte BigQuery
  • Quelques champs calculĂ©s au niveau de la source de donnĂ©es
  • Des sĂ©lecteurs Looker Studio reflĂ©tant le souhait de comparaison de l’utilisateur et correspondant directement aux paramĂštres valorisĂ©s de la requĂȘte
  • Des graphiques couvrant les principales reprĂ©sentations comparatives dont on Ă  gĂ©nĂ©ralement besoin dans un rapport personnalisĂ© : series temporelles, tableaux avec variation, histogramme comparatif, KPI sous forme de simple mĂ©trique avec variation
  • Quelques champs calculĂ©s au niveau des graphiques
  • Des mises en forme conditionnelles pour les variations

La liste peut paraßtre longue mais vous allez voir que la fonction de chaque élément est trÚs facile à appréhender, pour une configuration simple.


0. Jeu de donnĂ©es pour l’exemple

Pour ce tutoriel, j’ai utilisĂ© un jeu de donnĂ©es trĂšs basique de ventes journaliĂšres par pays. Regardons rapidement Ă  quoi ressemble la table BigQuery prĂ©parĂ©e :

  • Une date (date – Date avec partition journaliĂšre)
  • Un continent (continent – ChaĂźne de caractĂšre)
  • Un pays (country – ChaĂźne de caractĂšre)
  • Les ventes (sales – Entier)

Table BigQuery du jeu de données pour le comparateur de période

Vous pouvez, biensĂ»r, appliquer ce tutoriel sur n’importe quel jeu de donnĂ©es provenant de BigQuery, avec le nombre de dimensions et de mĂ©triques nĂ©cessaires pour votre rapport interactif.

Par exemple, dans le monde du digital analytics, on aurait trĂšs bien pu prĂ©parer une table contenant des dimensions et des statistiques compatibles avec une portĂ©e de visites (donnĂ©es de source de trafic, appareils et technologies de l’utilisateur, page d’atterrissage, visites, visites avec conversions, pages vues, temps cumulĂ©s des visites…).

Continuons avec cet exemple simple de jeu de données qui va permettre de décrire unitairement chaque étape nécessaire pour aboutir au résultat.


1. Source de donnĂ©es : Principe de la requĂȘte SQL BigQuery

Pour commencer, allons sur notre rapport Looker Studio et ajoutons une source de donnĂ©es BigQuery de type « RequĂȘte personnalisĂ©e », en utilisant le projet Google Cloud dan lequel votre table est stockĂ©e.


Deux pĂ©riodes, deux sous-requĂȘtes avec une union

La requĂȘte que nous allons utiliser se compose de 2 sous-requĂȘtes jointes par une union (UNION ALL) et correspondant aux 2 pĂ©riodes souhaitĂ©es :

  • La pĂ©riode principale, choisie dans le rapport avec le sĂ©lecteur de plage de dates
  • La pĂ©riode de comparaison, dĂ©finie par la combinaison de paramĂštres que nous dĂ©taillerons plus tard

Deux champs supplémentaires de contextualisation pour faciliter la comparaison

En plus des champs Ă©numĂ©rĂ©s prĂ©cĂ©dents (date, continent, pays, ventes), nous allons ajouter des 2 donnĂ©es supplĂ©mentaires aux schĂ©mas partagĂ©s par ces 2 sous-requĂȘtes :

  • La pĂ©riode concernĂ©e
    • Le champ « date_range » est alimentĂ© avec la valeur « current » pour la pĂ©riode principale et avec « compared » pour la pĂ©riode de comparaison
  • L’ordre temporel de la date pour chaque sous-ensemble (champ row_number) : La premiĂšre date de la pĂ©riode principale et de la pĂ©riode de comparaison sont valorisĂ©es avec l’entier 1. Ce champ permettra d’aligner les dates Ă  comparer, notamment pour les sĂ©ries temporelles.

RequĂȘte SQL pour la comparaison de plages de date

2. ParamĂštres de la requĂȘte personnalisĂ©e

Mais avant d’Ă©crire la requĂȘte, nous allons d’abord configurer les paramĂštres qu’elle va utiliser.


ParamĂštres de plage de dates principale

Activer les paramÚtres de plage de dates (en début de section « ParamÚtres »).


ParamÚtres personnalisés

Puis, ajouter les paramĂštres suivants :

  • « Compared to »
    • Identifiant « date_range_for_comparison »
    • Type « Texte », avec valeurs suivantes autorisĂ©es :
      • Previous year
      • Previous year the same day of week
      • Previous period
      • Custom
    • CardinalitĂ© : SĂ©lection unique
    • Valeur par dĂ©faut « Previous year »
  • « Compared date range start »
    • Identifiant « compared_date_range_start »
    • Type « Texte », toute valeur autorisĂ©e
    • Avec la valeur par dĂ©faut « 2023-12-01 » ou toute autre valeur de dĂ©but de pĂ©riode Ă  comparer, respectant le format choisi
  • « Compared date range end »
    • Identifiant « compared_date_range_end »
    • Type « Texte », toute valeur autorisĂ©e
    • Valeur par dĂ©faut « 2023-12-31 »
  • « Compare »
    • Identifiant « compare »
    • Type « BoolĂ©en »
    • CochĂ© par dĂ©faut (valeur true par dĂ©faut)

Tous les paramĂštres de requĂȘte SQL BigQuery pour une comparaison interactive de plages de dates personnalisĂ©es avec Looker Studio

3. Source de donnĂ©es : RequĂȘte personnalisĂ©e SQL BigQuery

Passons Ă  la requĂȘte proprement dite et prĂ©cisons que :

  • Nous allons unir la sous-requĂȘte des donnĂ©es de pĂ©riode principale et celle des donnĂ©es de pĂ©riode Ă  comparer avec un « UNION ALL »
  • La 2nde sous-requĂȘte est principalement conditionnĂ©e par l’activation de la comparaison avec le boolĂ©en « Compare »
  • Les conditions liĂ©es Ă  chaque type de comparaison correspondent aussi Ă  des conditions dans la 2nde sous-requĂȘtes
  • Comparer avec les donnĂ©es de l’annĂ©e prĂ©cĂ©dente sur les mĂȘme jours de la semaine, revient Ă  comparer la mĂȘme pĂ©riode en retirant 52 semaines

Voici donc la requĂȘte Ă  saisir en guise de source de donnĂ©es, sur le mĂȘme Ă©cran oĂč vous avez renseignĂ© les paramĂštres prĂ©cĂ©demment. Il faut simplement adapter :

  • le projet, le dataset et la table dans les clauses « FROM »
  • les noms des champs dans les clauses « SELECT »

SELECT  
    date, continent, country, sales
   ,"current" as date_range
   ,DATE_DIFF( date, PARSE_DATE('%Y%m%d',  @DS_START_DATE), DAY)+1 as row_number
 FROM your-project.your_dataset.viz_sales_by_country
 WHERE TRUE
 AND 
 date between PARSE_DATE('%Y%m%d',  @DS_START_DATE) AND PARSE_DATE('%Y%m%d',  @DS_END_DATE)

 UNION ALL

 SELECT  
    date, continent, country, sales
   ,"compared" as date_range
   ,DATE_DIFF( date, 
      CASE @date_range_for_comparison
       WHEN 'Custom' THEN PARSE_DATE('%Y-%m-%d', @compared_date_range_start)
       WHEN 'Previous year' THEN  date_sub(PARSE_DATE('%Y%m%d',  @DS_START_DATE),INTERVAL 1 YEAR)
       WHEN 'Previous year the same day of week' THEN date_sub(PARSE_DATE('%Y%m%d',  @DS_START_DATE),INTERVAL 52 WEEK)
       WHEN 'Previous period' THEN date_sub(PARSE_DATE('%Y%m%d',  @DS_START_DATE),INTERVAL DATE_DIFF(PARSE_DATE('%Y%m%d',  @DS_END_DATE),PARSE_DATE('%Y%m%d',  @DS_START_DATE),DAY)+1 DAY)
      END, DAY)+1 as row_number
 FROM your-project.your_dataset.viz_sales_by_country
 WHERE @compare 
 AND
 (
     (
     @date_range_for_comparison = 'Previous year' 
     AND date between date_sub(PARSE_DATE('%Y%m%d',  @DS_START_DATE),INTERVAL 1 YEAR) AND date_sub(PARSE_DATE('%Y%m%d',  @DS_END_DATE),INTERVAL 1 YEAR)
     )
     OR
     (
     @date_range_for_comparison = 'Previous year the same day of week' 
     AND date between date_sub(PARSE_DATE('%Y%m%d',  @DS_START_DATE),INTERVAL 52 WEEK) AND date_sub(PARSE_DATE('%Y%m%d',  @DS_END_DATE),INTERVAL 52 WEEK)
     )
     OR
     (
     @date_range_for_comparison = 'Previous period' 
     AND date between date_sub(PARSE_DATE('%Y%m%d',  @DS_START_DATE),INTERVAL DATE_DIFF(PARSE_DATE('%Y%m%d',  @DS_END_DATE),PARSE_DATE('%Y%m%d',  @DS_START_DATE),DAY)+1 DAY) AND date_sub(PARSE_DATE('%Y%m%d',  @DS_START_DATE),INTERVAL 1 DAY)   
     )
     OR
     (
     @date_range_for_comparison = 'Custom' 
     AND date between PARSE_DATE('%Y-%m-%d', @compared_date_range_start) AND PARSE_DATE('%Y-%m-%d',  @compared_date_range_end) 
     )
 )


4. Champs calculés de la source de données

Nous allons Ă  prĂ©sent complĂ©ter la sources de donnĂ©es avec 2 champs calculĂ©s – 2 mĂ©triques qui nous aideront Ă  simplifier la configuration des graphiques.


Sales

SUM(IF(date_range ='current', sales ,null)) 

Compared sales

SUM(IF(date_range ='compared', sales ,null)) 

5. SĂ©lecteurs Looker Studio

Ensuite, nous allons ajouter quelques sélecteurs pour créer les blocs de sélection de plages de dates principales et de comparaison.

Ajouter un sélectionneur de date classique et les sélecteurs suivants pour le bloc dédié à la période à comparer :

  • Une liste dĂ©roulante avant le paramĂštre « Compared to » en guise de champ de contrĂŽle
  • 2 zones de saisie en utilisant les paramĂštres « Compared date range start » et « Compared date range end » comme champs de contrĂŽle, pour la plage de dates personnalisĂ©es.
    Dans l’exemple ci-dessous, j’ai ajouter aussi un texte « Custom dates – From » avant le premier champ et un autre texte « To » entre les 2 champs.
  • Une case Ă  cocher avec le paramĂštre »Compare » comme champ de contrĂŽle

Afin de prĂ©senter la pĂ©riode servant de comparaison et issue des saisies rĂ©alisĂ©es avec les champs dĂ©crits ci-dessus, j’ai aussi ajoutĂ© un graphique Tableau d’une ligne et d’une cellule utilisant pour dimension la formule suivante de champ calculĂ© ci-dessous.


CONCAT( "Vs " ,
 FORMAT_DATETIME("%b %e, %Y",
 PARSE_DATE("%Y/%m/%d" , SUBSTR(MIN(IF(date_range= "compared",date,null)), 1, 10)))
 , " - " ,
 FORMAT_DATETIME("%b %e, %Y",
 PARSE_DATE("%Y/%m/%d" , SUBSTR(MAX(IF(date_range= "compared",date,null)), 1, 10)))
 )

SĂ©lecteurs Looker Studio pour la plage de dates de comparaison

6. Graphiques

Enfin, attaquons-nous à la configuration des différents graphiques présents sur la page.

6.1. MĂ©trique simple avec variation en pourcentage (scorecard)

Pour le scorecard présent au dessus de la série temporelle :

  • Source de donnĂ©es : Notre requĂȘte BigQuery
  • Utiliser la mĂ©trique « Sales » (cartouche bleue, avec un S majuscule)
  • Pour la variation en dessous de la mĂ©trique principale
    • Ajouter un un graphique Tableau d’une ligne et d’une cellule utilisant pour mĂ©trique la formule ci-dessous
    • Appliquer 2 rĂšgles de forme conditionnelle pour afficher la variation en pourcentage en vert si elle contient un « + » et en rouge si elle contient un « -« 
    • Centrer le contenu de la cellule et placer le graphique en dessous de la mĂ©trique principale

CONCAT(
 IF (SUM(IF (date_range = 'current', sales ,NULL))>= SUM(IF(date_range = 'compared', sales,NULL)) , "+","")
 ,
 CAST(ROUND(ROUND((SUM(IF(date_range = 'current', sales ,NULL))/    SUM(IF(date_range = 'compared', sales,NULL)))-1,3) *100,1) AS TEXT)
 , "%")

MĂ©trique simple avec variation en pourcentage

6.2. Tableau des ventes par continent et par pays

Ce graphique tableau se configure comme suit :

  • Onglet « Configurer »
    • Source de donnĂ©es : Notre requĂȘte BigQuery
    • Dimensions : continent, country
    • Activer « Afficher le dĂ©tail » et sĂ©lectionner « country comme niveau par dĂ©faut »
    • MĂ©triques :
      • Sales (cartouche bleue, avec un S majuscule)
      • Compared sales
      • Un champ calculĂ© au niveau du graphique, nommĂ© « % Δ. », en utilisant la mĂȘme formule que celle indiquĂ©e pour la variation de la mĂ©trique simple plus haut. On applique exactement le mĂȘme principe sur une ventilation par pays et par continent
    • Trier par Sales par ordre dĂ©croissant
  • Onglet « Style »
    • Appliquer 2 rĂšgles de forme conditionnelle pour afficher la variation (% Δ.) en pourcentage en vert si elle contient un « + » et en rouge si elle contient un « -« 

Tableau des ventes par continent et par pays

6.3. Histogramme avec ventes par pays

Appliquer les dĂ©tails de configuration d’un « Graphique Ă  barres » ci-dessous :

  • Onglet « Configurer »
    • Source de donnĂ©es : Notre requĂȘte BigQuery
    • Dimension : country
    • Dimension « RĂ©partition » : date_range
    • MĂ©trique : sales (cartouche verte avec s minuscule)
    • Trier par sales par ordre dĂ©croissant
    • Tri secondaire : Formule ci-dessous en ordre croissant avec une agrĂ©gation en Moyenne
  • Onglet « Style »
    • Appliquer les couleurs par valeurs de dimensions : Dans l’exemple, rouge foncĂ© pour « current » et rouge clair pour « compared ».
    • Adapter les autres options de prĂ©sentation

Vous pouvez aussi recrĂ©er votre propre lĂ©gende en reportant des formules de calculs de plages de dates dans des graphiques tableau d’une cellule (cf. le chapitre 5).


Pour le tri secondaire

IF (date_range='current', 1, 2)

Histogramme avec ventes par pays

6.4. Tendance des ventes

Enfin, nous allons crĂ©er le graphique de sĂ©rie temporelle en s’appuyant sur une combinaison de donnĂ©es pour aligner les points des 2 pĂ©riodes.

Combiner donc les donnĂ©es comme dĂ©crit ci-dessous et nommer le rĂ©sultat « DB – For trends ».

  • Table de gauche
    • Source de donnĂ©es : Notre requĂȘte BigQuery
    • Dimensions : row_number, date
    • MĂ©triques : Sales (cartouche bleue, avec un S majuscule)
  • Table de droite
    • Source de donnĂ©es : Notre requĂȘte BigQuery
    • Dimensions : row_number
    • MĂ©triques : Compared sales
  • Jointure entre les 2 tables
    • Externe gauche
    • Condition de jointure : row_number pour les 2 tables

Combinaison de données Looker Studio pour comparaison des tendances de chaque plage de dates

Puis, créer le graphique de série temporelle :

  • Onglet « Configurer »
    • Source de donnĂ©es : DB – For trends (notre combinaison)
    • Dimension : date
    • MĂ©triques : Sales, Compared Sales
  • Onglet « Style »
    • SĂ©rie #1 : Utilisation de la couleur correspondant Ă  la pĂ©riode principale, ici le rouge foncĂ©
    • SĂ©rie #2 : Utilisation de la couleur correspondant Ă  la pĂ©riode de comparaison , ici le rouge clair
    • Adapter les autres options de prĂ©sentation

Comme pour l’histogramme, vous pouvez aussi recrĂ©er votre propre lĂ©gende en reportant des formules de calculs de plages de dates dans des graphiques tableau d’une cellule (cf. le chapitre 5).


SĂ©ries temporelles pour la tendance des ventes

Et voilĂ , la configuration est terminĂ©e. Je concĂšde que cela peut paraĂźtre fastidieux mais c’est trĂšs utile sur un rapport interactif, souvent consultĂ© par comparaison temporelle de performance.


Gestion de vos requĂȘtes de donnĂ©es par BigQuery et Looker Studio

Pour terminer, vous pourriez vous demander lĂ©gitimement comment BigQuery et Looker Studio gĂšrent les requĂȘtes personnalisĂ©es gĂ©nĂ©rĂ©es par l’interface que nous venons de crĂ©er.

  • Les donnĂ©es sont mises en cache. Un aller / retour sur 2 options de comparaisons vous permet de le constater
  • Par contre, oui, de nouvelles donnĂ©es seront chargĂ©es si l’utilisateur personnalise la pĂ©riode principale et/ou de comparaison
  • Mais l’utilisation de tables prĂ©parĂ©es comme dans cet exemple vous permet de scanner/charger un faible volume de donnĂ©es
  • Et d’ailleurs, la nouvelle intĂ©gration native de BigQuery en cours de dĂ©ploiement progressif offre de nombreuses nouvelles capacitĂ©s qui facilitent ce type d’usage, son monitoring grĂące Ă  des mĂ©ta donnĂ©es enrichies, et bien d’autres fonctionnalitĂ©s avancĂ©es.

Bonne comparaison temporelle !