Aller au contenu principal

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éesSorties
in : le flux de donnéesout : le flux agrégé
remarque

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ètreTypeDéfautDescription
keysliste[]Colonnes de regroupement. Vide = agrégation globale.
aggsliste—Agrégats à calculer (requis ; sans eux, l'opération est ignorée).

Chaque élément de aggs :

ChampTypeDéfautDescription
columnstring—Colonne à agréger.
fnstringsumFonction : sum, avg, count, min, max.
output_namestring<colonne>_<fn>Nom de la colonne résultat.

Avant :

clientmontant
A10
A5
B8

Après (keys: [client], aggs: [{ column: montant, fn: sum, output_name: total }]) :

clienttotal
A15
B8

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ètreTypeDéfautDescription
indexliste—Colonnes conservées en lignes (requis).
columnsstring—Colonne dont les valeurs deviennent des colonnes (requis).
valuesstring—Colonne des valeurs à répartir (requis).
aggfuncstringsumAgrégat en cas de doublons : sum, avg, count, min, max.

Avant :

moisproduitventes
janvA10
janvB4
févrA7

Après (index: [mois], columns: produit, values: ventes) :

moisAB
janv104
févr7—

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ètreTypeDéfautDescription
id_columnsliste[]Colonnes d'identité, répétées sur chaque ligne.
value_columnslistetoutes sauf id_columnsColonnes à déplier.
var_namestringvariableNom de la colonne recevant les noms de colonnes.
value_namestringvalueNom de la colonne recevant les valeurs.

Avant :

moisAB
janv104

Après (id_columns: [mois]) :

moisvariablevalue
janvA10
janvB4

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ètreTypeDéfautDescription
partition_byliste[]Colonnes de partition. Vide = tout le flux.
order_byliste[]Colonnes de tri appliqué avant le calcul.
fnstringrow_numberFonction : row_number, rank (rang dense), lag, lead, cumsum.
columnstring—Colonne source (requise pour rank, lag, lead, cumsum).
output_namestringwindow_resultNom de la colonne résultat.

Avant (triée par date) :

clientdatemontant
A01/0110
A02/015

Après (partition_by: [client], order_by: [date], fn: cumsum, column: montant, output_name: cumul) :

clientdatemontantcumul
A01/011010
A02/01515

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_name sur chaque agrégat plutôt que de dépendre du nom généré <colonne>_<fn>.
  • window a besoin d'un tri : sans order_by, l'ordre des lignes (donc le résultat de row_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.