Regrouper Par

Permet de regrouper les lignes d'une table selon la liste des valeur uniques d'une ou plusieurs colonnes. Pour chacune des lignes, on pourra faire des calculs (agrégats) sur des colonnes.

Exemples

Par exemple, on peut regrouper une table des ventes selon la colonne commercial et faire une somme de la colonne du CA pour obtenir une table qui a une ligne par Commercial et une colonne totalisant le CA de chaque commercial. C’est comme un tableau croisé dynamique qui n’aurait que les zones Lignes et Valeurs pour positionner les champs.

On voit ici que le nombre de ligne a fortement réduit ainsi que le nombre de colonne. Regrouper Par est très utile pour réduire la granularité d’une table comme passer de toutes les lignes d’une table des ventes à un cumul mensuel pour chaque article et client. Lorsque le détail n’est jamais nécessaire, c’est une opération tout indiquée pour accélérer tous les calculs ou traitements portant sur la table.

En mode avancé, on peut regrouper les lignes selon plusieurs colonnes et créer ainsi une table contenant les différentes combinaisons de ces colonnes. On peut également faire plusieurs calculs différents portant sur des colonnes différentes ou sur la même colonne.

Par exemple, on peut obtenir pour chaque Commercial et Type Com le CA total et le nombre de ventes.

C’est comme faire un résumé d’une table selon certains champs principaux ou « tête de chapitre ». Les informations des lignes de détail qui seront perdues peuvent tout de même être conservées sous la forme d’une liste de valeurs concaténées dans une colonne prévue pour cela. Par exemple, une table listant tous les points de passage d’un patient dans un hôpital contient donc une ligne par service fréquenté. Pour un séjour, il se peut qu’il y ait 4 lignes si le patient est passé par 4 services (radiologie, chirurgie, soins intensifs, cardiologie…)

Un Regrouper Par permet de n’avoir qu’une ligne par séjour et les services énumérés dans une colonne ‘Parcours’.

Fonction Table.Group

Table.Group (
            Table,
            Liste des colonnes à regrouper dans cette table,
            Liste des colonnes d’agrégation
)

Le dernier argument est une liste de listes. Chaque liste contient le nom de la colonne calculée, l’agrégation à effectuer sous forme de fonction et le type de donnée de la colonne.

La fonction d’agrégation peut utiliser les données des lignes du regroupement. Ces lignes sont stockées dans la table ‘_’. Les valeurs d’une colonne peuvent ainsi être récupérées par _[colonne], sous forme de liste, ouvrant l’accès à toutes les fonctions de liste existantes.

Pour reprendre les exemples précédents :

  • CA total par Commercial
Table.Group (
    Ventes,
    "Commercial",
    { "CA", each List.Sum ( _[CA] ), type nullable number }
)
  • CA total et nb de ventes par Commercial et Type Com
Table.Group(
  Ventes,
  {"Commercial", "Type Com"},
  {
    {"CA", each List.Sum(_[CA]), type nullable number},
    {"Nb de ventes", each Table.RowCount(_), Int64.Type}
  }

 )
  • Parcours hospitalier résumé dans une colonne
Table.Group(
  Séjours,
  {"Séjour", "Patient"},
  {
     {"Entrée", each List.Min([Entrée]), type nullable date},
     {"Sortie", each List.Max([Sortie]), type nullable date},
     {"Parcours", each Text.Combine(_[Service],", "), type text}
  }

 )
  • Autres exemples d’agrégations
    • Compter les lignes
      each Table.RowCount(_), Int64.Type
    • Compter les valeurs distinctes d’une colonne
      each List.Sum([colonne]), type nullable number
    • Récupérer toutes les lignes et colonnes sous forme de table
      each _, type table [Colonne1=nullable text, Colonne2=nullable datetime, Colonne3=nullable number, Poste=nullable Logical.Type ….
    • Récupérer les valeurs d’une colonne sous forme de liste
      each _[Colonne] (le type n’est pas utile)
    • Savoir si une colonne contient au moins un élément d’une autre liste ‘maListe’
      each List.ContainsAny(_[Colonne], maListe), Logical.Type