Regrouper les champs du tableau croisé dynamique

Scénarios d’utilisation possibles

  • Le regroupement des champs du tableau croisé dynamique est utile lorsqu’un champ de ligne ou de colonne d’un tableau croisé dynamique contient de nombreux éléments distincts, par exemple un champ de date avec des centaines de dates ou un champ numérique avec de nombreuses valeurs dispersées. Le regroupement condense ces éléments en sections significatives : les dates en mois, trimestres et années, et les nombres en plages telles que 0-1, 2-3, 4-5. Cela rend un grand tableau croisé dynamique compact et plus facile à analyser. Aspose.Cells offre cette fonctionnalité via la méthode PivotField.Group() (regroupement automatique par type de données) et PivotField.Group(PivotFieldGroupOptions) (options de regroupement personnalisées).
  • Le regroupement par dates agrège les dates individuelles en périodes plus larges, telles que les jours, les mois, les trimestres et les années, et construit une hiérarchie temporelle (par exemple Années, Trimestres, Mois). Les tendances dans le temps deviennent visibles d’un seul coup d’œil, et chaque niveau de période devient son propre champ de tableau croisé dynamique dans la zone des lignes ou des colonnes du tableau croisé dynamique.
  • Le regroupement n’est disponible que pour les champs placés dans la zone LIGNE ou COLONNE d’un tableau croisé dynamique. Un champ de données (valeur) ne peut pas être regroupé directement. Pour regrouper un tel champ, vous devez d’abord l’ajouter à la zone des lignes ou des colonnes du tableau croisé dynamique.

Regrouper automatiquement les champs du tableau croisé dynamique

La surcharge sans paramètre PivotField.Group() inspecte le type de données du champ et le regroupe automatiquement. Un champ qui ne contient que des dates (et des valeurs vides) est regroupé par mois. Un champ qui ne contient que des nombres (et des valeurs vides) est regroupé en plages numériques à l’aide d’un intervalle automatique.

#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Pivot;
int main() {
    Aspose::Cells::Startup();
    Workbook wb(u"sampleGroupPivotFieldsInPivotTable.xlsx");
    Worksheet ws = wb.GetWorksheets().Get(1);
    PivotTable pt = ws.GetPivotTables().Get(0);
    PivotField field = pt.GetRowFields().Get(0);
    field.Group();
    pt.CalculateData();
    wb.Save(u"outputAutoGroupPivotField.xlsx");
    Aspose::Cells::Cleanup();
    return 0;
}

Regrouper les champs du tableau croisé dynamique avec des options personnalisées

La classe PivotFieldGroupOptions fournit une configuration de regroupement personnalisée. Pour les champs de date, définissez StartDate, EndDate et GroupTypes. Pour les champs numériques, définissez StartNumber, EndNumber et Interval. La propriété NewPivotField contrôle si le regroupement crée de nouveaux champs de tableau croisé dynamique à côté de l’original (voir la section Note à la fin de cet article).

Regrouper un champ de date par mois et trimestres

L’exemple suivant regroupe le champ de ligne de date du tableau croisé dynamique d’exemple par mois et trimestres entre une date de début et une date de fin. Le code charge le fichier Excel d’exemple, effectue le regroupement, calcule les données du tableau croisé dynamique, puis enregistre le résultat regroupé. La capture d’écran montre l’effet : le champ de ligne de date est désormais regroupé par trimestres et mois. Notez que l’ordre des valeurs dans options.GroupTypes est ignoré. Quel que soit l’ordre dans lequel les types de groupes sont listés, les champs regroupés sont toujours affichés de la plus grande période à la plus petite : années, trimestres, mois, jours, heures, minutes, secondes. Dans cet exemple, les mois sont listés avant les trimestres dans options.GroupTypes, pourtant les trimestres sont affichés comme niveau externe et les mois comme niveau interne.

#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Pivot;
int main() {
    Aspose::Cells::Startup();
    // Charger le classeur d'exemple
    Workbook wb(u"sampleGroupPivotFieldsInPivotTable.xlsx");
    // Accéder à la deuxième feuille de calcul et à son tableau croisé dynamique
    Worksheet ws = wb.GetWorksheets().Get(1);
    PivotTable pt = ws.GetPivotTables().Get(0);
    // Grouper le premier champ de ligne (un champ de date) par mois et trimestres
    PivotFieldGroupOptions options;
    Date startDate{2008, 1, 1, 0, 0, 0, 0};
    Date endDate{2008, 9, 5, 0, 0, 0, 0};
    options.SetStartDate(startDate);
    options.SetEndDate(endDate);
    // Définir les types de groupe : Mois et Trimestres
    Vector<PivotGroupByType> groupTypes{ PivotGroupByType::Months, PivotGroupByType::Quarters };
    options.SetGroupTypes(groupTypes);
    // Appliquer le regroupement au premier champ de ligne
    PivotField rowField = pt.GetRowFields().Get(0);
    rowField.Group(options);
    // Calculer les données du tableau croisé dynamique et enregistrer le fichier de sortie
    pt.CalculateData();
    wb.Save(u"outputGroupPivotFieldsInPivotTable.xlsx");
    Aspose::Cells::Cleanup();
    return 0;
}

Tableau croisé dynamique regroupé par mois et trimestres

Regrouper un champ numérique en plages

FieldTwo du tableau croisé dynamique d’exemple est initialement un champ de données (valeur). Comme seuls les champs de ligne ou de colonne peuvent être regroupés, le code appelle d’abord PivotTable.AddFieldToArea(PivotFieldType.Row, "FieldTwo") pour déplacer FieldTwo vers la zone des lignes, actualise le tableau croisé dynamique, puis regroupe le champ numérique dans les plages 0-1, 2-3 et 4-5 à l’aide de StartNumber = 0, EndNumber = 5 et Interval = 2.

#include "Aspose.Cells.h"
using namespace Aspose::Cells;
using namespace Aspose::Cells::Pivot;
int main() {
    Aspose::Cells::Startup();
    Workbook wb(u"sampleGroupPivotFieldsInPivotTable.xlsx");
    Worksheet ws = wb.GetWorksheets().Get(1);
    PivotTable pt = ws.GetPivotTables().Get(0);
    pt.AddFieldToArea(PivotFieldType::Row, U16String("FieldTwo"));
    pt.CalculateData();
    PivotFieldGroupOptions options;
    options.SetStartNumber(0);
    options.SetEndNumber(5);
    options.SetInterval(2);
    pt.GetRowFields().Get(1).Group(options);
    pt.CalculateData();
    wb.Save(u"outputNumberGroupPivotField.xlsx");
    Aspose::Cells::Cleanup();
    return 0;
}

Remarque

Articles connexes