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)
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.
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)
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)))
)
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)
, "%")
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 « -«Â
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)
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
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).
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.