Agrégations
La méga-brick Agrégations enchaîne plusieurs opérations d'agrégation, dans
l'ordre déclaré : regroupement (group_by), pivot (pivot), dépivot
(unpivot) et fonctions de fenêtre (window).
Elle remplace les anciennes bricks Aggregate, Pivot, Unpivot et Window (voir Bricks héritées).
| Entrées | Sorties |
|---|---|
in : le flux de données | out : le flux agrégé |
Les opérations d'agrégation changent la forme du flux (colonnes et nombre de
lignes). Le schéma de sortie dépend des données : après un pivot, les colonnes
sont créées dynamiquement à partir des valeurs rencontrées.
group_by : regrouper et agréger
Regroupe les lignes par une ou plusieurs clés et calcule des agrégats. Sans
clé (keys vide), l'agrégation porte sur tout le flux (une ligne par
colonne agrégée).
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
keys | liste | [] | Colonnes de regroupement. Vide = agrégation globale. |
aggs | liste | — | Agrégats à calculer (requis ; sans eux, l'opération est ignorée). |
Chaque élément de aggs :
| Champ | Type | Défaut | Description |
|---|---|---|---|
column | string | — | Colonne à agréger. |
fn | string | sum | Fonction : sum, avg, count, min, max. |
output_name | string | <colonne>_<fn> | Nom de la colonne résultat. |
Avant :
| client | montant |
|---|---|
| A | 10 |
| A | 5 |
| B | 8 |
Après (keys: [client], aggs: [{ column: montant, fn: sum, output_name: total }]) :
| client | total |
|---|---|
| A | 15 |
| B | 8 |
pivot : lignes vers colonnes
Pivote des lignes en colonnes : une colonne fournit les noms des nouvelles colonnes, une autre leurs valeurs, agrégées si plusieurs lignes tombent dans la même case.
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
index | liste | — | Colonnes conservées en lignes (requis). |
columns | string | — | Colonne dont les valeurs deviennent des colonnes (requis). |
values | string | — | Colonne des valeurs à répartir (requis). |
aggfunc | string | sum | Agrégat en cas de doublons : sum, avg, count, min, max. |
Avant :
| mois | produit | ventes |
|---|---|---|
| janv | A | 10 |
| janv | B | 4 |
| févr | A | 7 |
Après (index: [mois], columns: produit, values: ventes) :
| mois | A | B |
|---|---|---|
| janv | 10 | 4 |
| févr | 7 | — |
unpivot : colonnes vers lignes
Opération inverse du pivot : déplie plusieurs colonnes en paires variable / valeur, une ligne par colonne dépliée.
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
id_columns | liste | [] | Colonnes d'identité, répétées sur chaque ligne. |
value_columns | liste | toutes sauf id_columns | Colonnes à déplier. |
var_name | string | variable | Nom de la colonne recevant les noms de colonnes. |
value_name | string | value | Nom de la colonne recevant les valeurs. |
Avant :
| mois | A | B |
|---|---|---|
| janv | 10 | 4 |
Après (id_columns: [mois]) :
| mois | variable | value |
|---|---|---|
| janv | A | 10 |
| janv | B | 4 |
window : fonctions de fenêtre
Calcule une valeur par ligne au sein d'une partition, après tri : numéro de ligne, rang, valeur précédente / suivante ou cumul.
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
partition_by | liste | [] | Colonnes de partition. Vide = tout le flux. |
order_by | liste | [] | Colonnes de tri appliqué avant le calcul. |
fn | string | row_number | Fonction : row_number, rank (rang dense), lag, lead, cumsum. |
column | string | — | Colonne source (requise pour rank, lag, lead, cumsum). |
output_name | string | window_result | Nom de la colonne résultat. |
Avant (triée par date) :
| client | date | montant |
|---|---|---|
| A | 01/01 | 10 |
| A | 02/01 | 5 |
Après (partition_by: [client], order_by: [date], fn: cumsum, column: montant, output_name: cumul) :
| client | date | montant | cumul |
|---|---|---|---|
| A | 01/01 | 10 | 10 |
| A | 02/01 | 5 | 15 |
Bonnes pratiques
- Une agrégation détruit le détail : si vous avez besoin des lignes d'origine plus loin dans le pipeline, dérivez l'agrégation sur une branche séparée plutôt qu'en ligne.
- Nommez vos sorties : renseignez
output_namesur chaque agrégat plutôt que de dépendre du nom généré<colonne>_<fn>. windowa besoin d'un tri : sansorder_by, l'ordre des lignes (donc le résultat derow_number,lag,cumsum…) n'est pas garanti.- Pour des agrégations très spécifiques, la brick Execute SQL permet d'écrire la requête directement.
Voir aussi : Bricks héritées.