“Hey, j’ai déjà utilisé la fonctionnalité PIVOT sur BigQuery pour passer de lignes vers colonnes. Mais tu penses qu’il est possible de passer de colonnes vers lignes ?”.
Il est effectivement possible de passer de données dont un ou plusieurs dimensions sont représentés en colonnes vers des données dont les dimensions sont exclusivement en ligne. On pourrait dire que l’on passe d’un format large à un format long.
Pour réaliser cette opération, il existe UNPIVOT en SQL sur BigQuery.
En voici la syntaxe :
SELECT *
FROM maSuperTableLarge
UNPIVOT(
nomNouvelleColonneDesValeursDeBase
FOR nouvelleColonneDesColonnesVersDesLignes
IN (nomColVersLigne1, nomColVersLigne2, nomColVersLigneX)
)
Comment ça, ce n’est pas clair ? Bon, on va vite s’orienter vers l’exemple alors 😅.
J’ai repris l’exemple de la documentation de Google qui m’a semblé adapté.
Nous avons le suivi des ventes de fruits sur 4 trimestres.
WITH Produce AS (
SELECT 'Kale' as product, 51 as Q1, 23 as Q2, 45 as Q3, 3 as Q4 UNION ALL
SELECT 'Apple', 77, 0, 25, 2)
SELECT * FROM Produce
Résultat
product | Q1 | Q2 | Q3 | Q4 |
Kale | 51 | 23 | 45 | 3 |
Apple | 77 | 0 | 25 | 2 |
Nous voudrions avoir ces ventes par trimestre et par produit en ligne. C’est à ce moment que l’opération UNPIVOT devient utile.
WITH Produce AS (
SELECT 'Kale' as product, 51 as Q1, 23 as Q2, 45 as Q3, 3 as Q4 UNION ALL
SELECT 'Apple', 77, 0, 25, 2)
SELECT * FROM Produce
UNPIVOT(sales FOR quarter IN (Q1, Q2, Q3, Q4))
;
Résultat
product | sales | quarter |
Kale | 51 | Q1 |
Kale | 23 | Q2 |
Kale | 45 | Q3 |
Kale | 3 | Q4 |
Apple | 77 | Q1 |
Apple | 0 | Q2 |
Apple | 25 | Q3 |
Apple | 2 | Q4 |
Dans le premier mot clé du UNPIVOT, “sales”, c’est à cet endroit que l’on va indiquer le nom que représente les valeurs de la table. En effet, la table est un suivi des ventes et tous les nombres contenu dedans sont donc la niveau des ventes. Comme nous souhaitons plutôt mettre ces données lignes, ce la engendre la création d’une nouvelle colonne.
Après le FOR on lui indique le nom de la colonne qui va contenir les différentes modalités de ce qui était avant les colonnes. Au début nous avions les ventes par trimestre et là nous souhaitons mettre ces 4 trimestres en ligne. Il faudra donc nommer cette nouvelle colonne et lister les colonnes (Q1, Q2, Q3 et Q4 dans notre cas) qui seront intégrées dans cette nouvelles colonne.
A la fin nous avons donc garder la colonne déjà présente en ligne qui est “product” et nous avons intégré en ligne également les trimestres avec leurs ventes respectives selon le produit.
Merci de votre lecture !