Afficher les valeurs comme dans le tableau croisé dynamique

Scénarios d’utilisation possibles

Un tableau croisé dynamique agrège normalement chaque champ de données avec une fonction d’agrégation telle que Sum ou Count. La fonction Show Values As d’Excel remplace chaque résultat affiché par un calcul secondaire dérivé de cet agrégat : par exemple, un pourcentage du total général, un total cumulé, une différence par rapport à un élément de base choisi, ou un classement — ce qui permet d’effectuer une analyse comparative sans formules auxiliaires ni colonnes calculées.
Les utilisations typiques incluent l’analyse de la part du total, avec les pourcentages d’une ligne, d’une colonne ou du total général ; le reporting cumulé en utilisant un total cumulé dans un champ de période ; l’analyse des écarts par rapport à un élément de référence à l’aide d’une différence ou une différence en pourcentage ; et le classement des valeurs du plus petit au plus grand ou inversement.
Dans Aspose.Cells for Go via C++, PivotFieldDataDisplayFormat sélectionne le calcul secondaire. L’accesseur PivotField.GetShowValuesSetting() renvoie un objet PivotShowValuesSetting dont les méthodes SetCalculationType, SetBaseFieldIndex, SetBaseItemPositionType et SetBaseItemIndex configurent le comportement ; la méthode pratique PivotField.ShowValuesAs(...) applique les quatre mêmes paramètres en un seul appel. Appliquez ces paramètres à un champ de données ou de valeur obtenu via PivotTable.GetDataFields().

Membres de l’énumération PivotFieldDataDisplayFormat

Le champ de données conserve sa fonction d’agrégation, telle que Sum ou Count, tandis que Show Values As ne transforme que la façon dont la valeur agrégée est affichée.
En plus d’écrire directement les valeurs PivotShowValuesSetting (voir la dernière section), une méthode pratique en un appel applique la même configuration :

func (pivotField *PivotField) ShowValuesAs_PivotFieldDataDisplayFormat_Int_PivotItemPositionType_Int(displayFormat PivotFieldDataDisplayFormat, baseField int32, baseItemPositionType PivotItemPositionType, baseItem int32)
Paramètre Signification Quand il est requis
displayFormat Le calcul secondaire PivotFieldDataDisplayFormat à appliquer. Toujours.
baseField Index basé sur zéro du champ de base parmi les champs de base du tableau croisé dynamique (par exemple, l’index du champ de ligne auquel appartient l’élément de base). Uniquement pour les six formats relatifs à une base ci-dessous (DifferenceFrom, PercentageOf, PercentageDifferenceFrom, RunningTotalIn, PercentageOfRunningTotalIn, PercentageOfParentTotal) ; ignoré par tout autre format.
baseItemPositionType Comment l’élément de base est choisi par rapport à l’élément actuel : PivotItemPositionType.Previous, .Next ou .Custom. Uniquement pour les trois formats à élément de base (DifferenceFrom, PercentageOf, PercentageDifferenceFrom) ; ignoré par tout autre format.
baseItem Index basé sur zéro de l’élément de base. Uniquement lorsque baseItemPositionType est Custom (l’index de l’élément désigne exactement l’élément de base) ; ignoré pour Previous / Next et par tout format non‑base — passez 0.
Type de calcul Comportement Paramètres de l’élément de base
Normal Pas de calcul secondaire ; la valeur agrégée est affichée telle quelle (par défaut). —
DifferenceFrom Affiche la valeur comme une différence par rapport à la valeur d’un élément de base dans un champ de base. baseField + Previous/Next/Custom (baseItem uniquement avec Custom)
PercentageOf Affiche la valeur en pourcentage de la valeur d’un élément de base dans un champ de base. baseField + Previous/Next/Custom (baseItem uniquement avec Custom)
PercentageDifferenceFrom Affiche la valeur comme la différence en pourcentage par rapport à la valeur d’un élément de base dans un champ de base. baseField + Previous/Next/Custom (baseItem uniquement avec Custom)
RunningTotalIn Affiche la valeur comme un total cumulé pour les éléments successifs d’un champ de base. baseField (le champ dont l’ordre des éléments pilote l’accumulation)
PercentageOfRow Affiche la valeur en pourcentage du total de la ligne. —
PercentageOfColumn Affiche la valeur en pourcentage du total de la colonne. —
PercentageOfTotal Affiche la valeur en pourcentage du total général. —
Index Affiche la valeur à l’aide de la formule d’index Excel ((valeur * total général) / (total ligne * total colonne)). —
PercentageOfParentRowTotal Affiche la valeur en pourcentage du total de la ligne parente (pour les champs de ligne imbriqués). —
PercentageOfParentColumnTotal Affiche la valeur en pourcentage du total de la colonne parente (pour les champs de colonne imbriqués). —
PercentageOfParentTotal Affiche la valeur en pourcentage du total parent. baseField (le champ parent servant de référence)
PercentageOfRunningTotalIn Affiche la valeur en pourcentage d’un total cumulé dans un champ de base. baseField (le champ d’accumulation)
RankSmallestToLargest Classe la valeur du plus petit (1) au plus grand. —
RankLargestToSmallest Classe la valeur du plus grand (1) au plus petit. —

Afficher les valeurs en pourcentage du total

Appelez la méthode PivotField.ShowValuesAs avec PivotFieldDataDisplayFormat.PercentageOfTotal pour convertir chaque cellule du champ de données, y compris le total général, en sa part du total général. Les nombres affichés sont donc interprétés comme des proportions de l’ensemble du résultat. Ce format ne compare chaque valeur qu’au total général, il ne nécessite donc aucun champ ou élément de base — les arguments supplémentaires (0, PivotItemPositionType.Previous, 0) sont des espaces réservés que le format ignore, comme l’indique le tableau des paramètres ci‑dessus.

package main
import (
	. "github.com/aspose-cells/aspose-cells-go-cpp/v26"
)
func main() {
	// Load or create a workbook with source data
	workbook, _ := NewWorkbook()
	worksheets, _ := workbook.GetWorksheets()
	dataSheet, _ := worksheets.Get_Int(0)
	cells, _ := dataSheet.GetCells()
	cell, _ := cells.Get_String("A1")
	cell.PutValue_String("Fruit")
	cell, _ = cells.Get_String("B1")
	cell.PutValue_String("Amount")
	fruits := []string{"Apple", "Banana", "Apple", "Cherry", "Banana", "Apple"}
	amounts := []int{10, 20, 30, 40, 50, 60}
	for i := range fruits {
		fruitCell, _ := cells.Get_Int_Int(int32(i+1), int32(0))
		fruitCell.PutValue_String(fruits[i])
		amountCell, _ := cells.Get_Int_Int(int32(i+1), int32(1))
		amountCell.PutValue_Int(int32(amounts[i]))
	}
	// Add a pivot table on a new worksheet
	pivotSheetIndex, _ := worksheets.Add()
	pivotSheet, _ := worksheets.Get_Int(pivotSheetIndex)
	pivotTables, _ := pivotSheet.GetPivotTables()
	pivotTable, _ := pivotTables.Add_String_Int_Int("=Sheet1!A1:B7", 2, 2)
	pivotTable.AddFieldToArea_PivotFieldType_String(PivotFieldType_Row, "Fruit")
	pivotTable.AddFieldToArea_PivotFieldType_String(PivotFieldType_Data, "Amount")
	pivotTable.CalculateData()
	// Show the Amount data field as a percentage of the grand total with the
	// one-call method; PercentageOfTotal takes no base item, so the trailing
	// base arguments (0, Previous, 0) are placeholders the format ignores
	dataFields, _ := pivotTable.GetDataFields()
	dataField, _ := dataFields.Get_Int(0)
	dataField.ShowValuesAs_PivotFieldDataDisplayFormat_Int_PivotItemPositionType_Int(
		PivotFieldDataDisplayFormat_PercentageOfTotal,
		int32(0),
		PivotItemPositionType_Previous,
		int32(0),
	)
	pivotTable.CalculateData()
	// Body now reads: Apple 47.62%, Banana 33.33%, Cherry 19.05%, Grand Total 100.00%
	workbook.Save_String("ShowValuesAsPercentageOfTotal.xlsx")
}

Obtenir et configurer PivotField.ShowValuesSetting

Lisez la configuration actuelle via PivotField.GetShowValuesSetting() : l’accesseur renvoie l’objet PivotShowValuesSetting du champ, dont les quatre méthodes d’accès décrivent le calcul Show Values As actif. Pour modifier la configuration, appelez la méthode PivotField.ShowValuesAs ; elle écrit les quatre paramètres en un seul appel, vous n’avez donc jamais besoin de les définir un par un.
L’objet PivotShowValuesSetting expose les quatre valeurs que ShowValuesAs écrit :

  • GetCalculationType() / SetCalculationType() sélectionnent le calcul secondaire PivotFieldDataDisplayFormat.
  • GetBaseFieldIndex() / SetBaseFieldIndex() spécifient l’index basé sur zéro du champ de base parmi les champs pivots. Il est utilisé par les formats relatifs à une base.
  • GetBaseItemPositionType() / SetBaseItemPositionType() déterminent comment l’élément de base est positionné par rapport à l’élément actuel et acceptent PivotItemPositionType.Next, PivotItemPositionType.Previous ou PivotItemPositionType.Custom.
  • GetBaseItemIndex() / SetBaseItemIndex() spécifient l’index basé sur zéro de l’élément de base et sont utilisés lorsque le type de position est Custom. Après avoir appelé ShowValuesAs, appelez à nouveau PivotTable.CalculateData() afin que le corps du tableau croisé dynamique soit recalculé et rendu avec la nouvelle configuration.
package main
import (
	"fmt"
	. "github.com/aspose-cells/aspose-cells-go-cpp/v26"
)
func main() {
	workbook, _ := NewWorkbook_String("ShowValuesAsPercentageOfTotal.xlsx")
	worksheets, _ := workbook.GetWorksheets()
	worksheet, _ := worksheets.Get_Int(1)
	pivotTables, _ := worksheet.GetPivotTables()
	pivotTable, _ := pivotTables.Get_Int(0)
	dataFields, _ := pivotTable.GetDataFields()
	dataField, _ := dataFields.Get_Int(0)
	// Read the current show-values settings
	settings, _ := dataField.GetShowValuesSetting()
	calculationType, _ := settings.GetCalculationType()
	baseFieldIndex, _ := settings.GetBaseFieldIndex()
	baseItemPositionType, _ := settings.GetBaseItemPositionType()
	baseItemIndex, _ := settings.GetBaseItemIndex()
	fmt.Println("CalculationType:", calculationType)
	fmt.Println("BaseFieldIndex:", baseFieldIndex)
	fmt.Println("BaseItemPositionType:", baseItemPositionType)
	fmt.Println("BaseItemIndex:", baseItemIndex)
	// Switch to a base-item calculation with the one-call method: difference
	// from the value of the previous item in the row field
	rowFields, _ := pivotTable.GetRowFields()
	rowField, _ := rowFields.Get_Int(0)
	baseIndex, _ := rowField.GetBaseIndex()
	dataField.ShowValuesAs_PivotFieldDataDisplayFormat_Int_PivotItemPositionType_Int(
		PivotFieldDataDisplayFormat_DifferenceFrom,
		baseIndex,
		PivotItemPositionType_Previous,
		0,
	)
	pivotTable.CalculateData()
	// Note: the percentage number format saved by the previous example still
	// clings to the data field cells; the underlying values are now differences
	// Re-read the applied configuration
	updatedSettings, _ := dataField.GetShowValuesSetting()
	updatedCalculationType, _ := updatedSettings.GetCalculationType()
	fmt.Println("CalculationType now:", updatedCalculationType)
	workbook.Save_String("ShowValuesAsDifferenceFrom.xlsx")
}

Articles associés