En bossant sur un projet GA4, j’ai découvert une astuce SQL en BigQuery qui évite de répéter les définitions de fenêtres à la pelle : les fenêtres nommées. Cette technique méconnue améliore nettement la lisibilité et la maintenance des requêtes, un vrai gain pour tout analyste.
3 principaux points à retenir.
- Une fenêtre nommée simplifie les requêtes SQL en évitant la répétition des définitions complexes.
- Elle améliore la lisibilité, facilitant la compréhension et la maintenance des scripts BigQuery.
- Applicable sur GA4 et d’autres données, particulièrement utile pour corriger les données perdues dans les événements récents.
Qu’est-ce qu’une fenêtre nommée en SQL et à quoi ça sert
Alors, qu’est-ce qu’une fenêtre nommée en SQL ? Tiens-toi bien, car c’est plus passionnant que ça en a l’air. Imagine que tu es en train de concocter la recette parfaite pour un plat complexe. Tu as besoin de répéter certaines techniques plusieurs fois sans avoir à réécrire ce que tu as fait auparavant. C’est exactement ce qu’offre une fenêtre nommée : tu définis une fois ta « fenêtre » (le cadre de tes données sur lequel tu vas travailler) et tu peux la réutiliser comme bon te semble tout au long de ta requête. En gros, c’est un alias pour ta fenêtre, simplifiant ainsi ta vie de développeur SQL.
Pourquoi diable utiliser une fenêtre nommée ? Laisse-moi te donner quelques raisons en or :
- Réduire la verbosité : Moins de code à écrire, c’est toujours ça de pris dans l’univers souvent verbeux du SQL.
- Améliorer la lisibilité : Qui aime déchiffrer des hiéroglyphes en SQL ? Avec une fenêtre nommée, la requête devient un peu plus limpide.
- Limiter les erreurs de copie : Au lieu de risquer de faire des fautes en recopiant ta logique, tu l’écris une fois et c’est réglé. Fini les ‘ORDER BY’ mal placés !
- Accélérer la maintenance des requêtes : Si tu as besoin d’apporter des modifications, il te suffit de changer une seule définition de ta fenêtre au lieu de jongler avec plusieurs occurrences.
Pour illustrer ça, prenons un exemple. Imaginons que tu veuille calculer le cumul des ventes d’un produit :
SELECT
produit,
ventes,
SUM(ventes) OVER (PARTITION BY produit ORDER BY date) AS cumul_ventes
FROM
ventes_table
Maintenant, sans utiliser de fenêtre nommée, tu devrais répéter quatre fois cette logique :
SELECT
produit,
ventes,
SUM(ventes) OVER (PARTITION BY produit ORDER BY date) AS cumul_ventes,
AVG(ventes) OVER (PARTITION BY produit ORDER BY date) AS moyenne_ventes,
MAX(ventes) OVER (PARTITION BY produit ORDER BY date) AS max_ventes
FROM
ventes_table
Ça commence à devenir lourd, n’est-ce pas ? Maintenant, avec une fenêtre nommée :
SELECT
produit,
ventes,
SUM(ventes) OVER nom_fenetre AS cumul_ventes,
AVG(ventes) OVER nom_fenetre AS moyenne_ventes,
MAX(ventes) OVER nom_fenetre AS max_ventes
FROM
ventes_table
WINDOW nom_fenetre AS (PARTITION BY produit ORDER BY date)
Avec une poignée de lignes, voilà de la clarté et de l’efficacité. Ça ne fait pas de mal, non ? Pour explorer encore plus le potentiel du SQL, tu peux jeter un œil à la documentation officielle sur BigQuery. C’est une mine d’or d’informations pour raffiner ton utilisation de SQL.
Comment définir et utiliser une fenêtre nommée dans BigQuery SQL
Dans BigQuery SQL, les fenêtres nommées, c’est un peu comme avoir un super pouvoir pour trier et analyser vos données. Ces fenêtres vous permettent de définir des ensembles de lignes sur lesquels vous pouvez exécuter des fonctions analytiques. Mais comment les définir et les utiliser ? Accrochez-vous, c’est parti !
La syntaxe pour déclarer une fenêtre nommée dans BigQuery est simple. Vous devez insérer le mot-clé WINDOW après le FROM ou WHERE, puis définir le nom de la fenêtre ainsi que sa définition. Voici la structure basique :
SELECT
col1,
col2,
LAG(col1) OVER lag_window AS previous_value
FROM
your_table
WINDOW
lag_window AS (PARTITION BY col2 ORDER BY col1)
Dans cet exemple, lag_window représente la définition de la fenêtre. Ici, on partitionne les données par col2 et on les ordonne selon col1. Une fois la fenêtre définie, on peut l’utiliser dans des fonctions comme LAG, LEAD, ou d’autres fonctions analytiques. Imaginons que vous vouliez obtenir plusieurs valeurs avec cette même fenêtre :
SELECT
col1,
col2,
LAG(col1) OVER lag_window AS previous_value,
LEAD(col1) OVER lag_window AS next_value
FROM
your_table
WINDOW
lag_window AS (PARTITION BY col2 ORDER BY col1)
Vous obtenez alors à la fois la valeur d’avant et celle d’après, toutes basées sur la même définition de fenêtre. Pratique, non ?
Pour ceux qui se demandent si ces fenêtres nommées sont compatibles avec d’autres dialectes comme PostgreSQL ou T-SQL, sachez que l’idée est similaire dans ces systèmes. Cependant, la syntaxe peut légèrement varier. PostgreSQL, par exemple, utilise également le mot-clé WINDOW, mais il est toujours bon de vérifier la documentation spécifique pour chaque dialecte.
N’hésitez pas à explorer davantage ce sujet passionnant, et si vous avez des questions sur BigQuery, vous pouvez trouver des ressources utiles à cet endroit.
Quand et pourquoi utiliser les fenêtres nommées avec des données GA4
Imaginez-vous en train d’analyser les données de votre site web, quand soudainement, un bug inattendu survient. En 2023, c’est ce qu’ont vécu de nombreux utilisateurs de Google Analytics 4 (GA4). Un nombre incroyable d’événements se retrouvaient avec un champ collected_traffic_source à NULL, plongeant tout le monde dans le flou. Pas de panique ! C’est ici que les fenêtres nommées de BigQuery entrent en scène comme les héros inattendus de votre histoire d’analyse de données.
Les fenêtres nommées permettent de traiter les données en utilisant des fonctions analytiques qui rendent votre requête SQL plus élégante et plus efficace. Dans le contexte de GA4, où les info-traces de trafic peuvent disparaître, on peut rétablir le dernier trafic connu d’une session grâce à une fonction comme LAST_VALUE ou LAG. Cela peut sembler complexe, mais en réalité, c’est un jeu d’enfant une fois que l’on sait comment s’y prendre.
Pourquoi utiliser ces fenêtres ? Tout simplement parce qu’elles simplifient vos requêtes. Au lieu de jongler entre des sous-requêtes et des jointures compliquées, vous pouvez d’un coup d’œil remplir les champs source, medium et campaign dans chaque événement. En maintenant vos requêtes simples et élégantes, vous réduisez également les risques d’erreurs et vous facilitez la maintenance. À long terme, votre équipe pourra mettre à jour les requêtes plus rapidement, ce qui signifie davantage de temps pour l’analyse réelle.
Voici un exemple de code SQL pour appliquer cette logique :
WITH traffic_data AS (
SELECT
event_name,
traffic_source,
SESSION_ID,
LAST_VALUE(traffic_source) OVER(PARTITION BY SESSION_ID ORDER BY TIMESTAMP_RANGE ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS last_known_traffic_source
FROM
`your_project.your_dataset.ga4_events`
)
SELECT
event_name,
COALESCE(traffic_source, last_known_traffic_source) AS filled_traffic_source
FROM
traffic_data
Dans cet exemple, on utilise LAST_VALUE pour récupérer la dernière source de trafic connue, ce qui permet de lutter contre le phénomène de NULL. Ainsi, vous pourrez encore faire parler vos données, même lorsque des obstacles inattendus se dressent sur votre chemin.
Préparez-vous à naviguer dans cet océan de données avec une plus grande confiance. À chaque requête, vous affinez votre compréhension, tout en rendant votre processus d’analyse à la fois plus fluide et plus robuste. Pour en savoir plus sur les problèmes liés aux champs NULL dans GA4, jetez un œil à cet article dédié sur le site de Google ici.
Faut-il maîtriser les fenêtres nommées pour sublimer vos requêtes BigQuery ?
Maîtriser les fenêtres nommées en SQL BigQuery est un atout indéniable pour quiconque manipule régulièrement des données complexes comme GA4. Cette technique, souvent ignorée, permet d’écrire du code plus clair, plus court et plus robuste. Plus important encore, elle évite la duplication et les erreurs, ce qui est vital dans des environnements de données critiques. Si vous souhaitez optimiser vos flux analytiques et gagner en efficacité, intégrer cette astuce dans votre arsenal SQL est indispensable. Vous y gagnerez en temps, qualité et sérénité dans vos analyses.
FAQ
Qu’est-ce qu’une fenêtre nommée (window alias) en SQL ?
Comment définir une fenêtre nommée dans BigQuery SQL ?
Quels avantages pour l’analyse des données GA4 ?
Cette technique fonctionne-t-elle sur d’autres systèmes SQL ?
Est-ce que cela améliore vraiment la performance des requêtes ?
A propos de l’auteur
Franck Scandolera est expert en Web Analytics, Data Engineering et automatisation depuis plus de 10 ans. Responsable de l’agence webAnalyste et formateur reconnu, il accompagne de nombreuses entreprises à exploiter pleinement leurs données avec des outils comme BigQuery, GA4, et SQL. Passionné par le traitement avancé des données et la pédagogie, il partage des astuces pointues pour rendre les analyses accessibles et efficaces, notamment avec le SQL avancé et les techniques d’optimisation des requêtes.
⭐ Analytics engineer, Data Analyst et Automatisation IA indépendant ⭐
- Ref clients : Logis Hôtel, Yelloh Village, BazarChic, Fédération Football Français, Texdecor…
Mon terrain de jeu :
- Data Analyst & Analytics engineering : tracking avancé (GTM server, e-commerce, CAPI, RGPD), entrepôt de données (BigQuery, Snowflake, PostgreSQL, ClickHouse), modèles (Airflow, dbt, Dataform), dashboards décisionnels (Looker, Power BI, Metabase, SQL, Python).
- Automatisation IA des taches Data, Marketing, RH, compta etc : conception de workflows intelligents robustes (n8n, App Script, scraping) connectés aux API de vos outils et LLM (OpenAI, Mistral, Claude…).
- Engineering IA pour créer des applications et agent IA sur mesure : intégration de LLM (OpenAI, Mistral…), RAG, assistants métier, génération de documents complexes, APIs, backends Node.js/Python.






