0

J'ajouter des champs de données à un tableau croisé dynamique comme ceci:Comment puis-je fournir une valeur calculée basée sur deux autres valeurs dans un tableau croisé dynamique Aspose.Cells?

int TOTALQTY_COLUMN = 4; 
int TOTALPRICE_COLUMN = 5; 
. . . 
pivotTable.AddFieldToArea(Aspose.Cells.Pivot.PivotFieldType.Data, TOTALQTY_COLUMN); 
pivotTable.AddFieldToArea(Aspose.Cells.Pivot.PivotFieldType.Data, TOTALPRICE_COLUMN); 

Ou, fournissant davantage de contexte:

Aspose.Cells.Pivot.PivotTableCollection pivotTables = pivotTableSheet.PivotTables; 
int colcount = COLUMNS_IN_DATA_SHEET; 
string lastColAsStr = ReportRunnerConstsAndUtils.GetExcelColumnName(colcount); 
int rowcount = sourceDataSheet.Cells.Rows.Count; 
string sourceDataArg = string.Format("sourceDataSheet!A1:{0}{1}", lastColAsStr, rowcount); 
int index = pivotTableSheet.PivotTables.Add(sourceDataArg, "A7", "PivotTableSheet"); 
Aspose.Cells.Pivot.PivotTable pivotTable = pivotTables[index]; 

pivotTable.AddFieldToArea(Aspose.Cells.Pivot.PivotFieldType.Row, DESCRIPTION_COLUMN); 

pivotTable.AddFieldToArea(Aspose.Cells.Pivot.PivotFieldType.Column, MONTHYR_COLUMN); 

pivotTable.AddFieldToArea(Aspose.Cells.Pivot.PivotFieldType.Data, TOTALQTY_COLUMN); 
pivotTable.AddFieldToArea(Aspose.Cells.Pivot.PivotFieldType.Data, TOTALPRICE_COLUMN); 

Je besoin d'un autre champ de données qui repose sur les valeurs fournies à ces deux champs de données (à partir des colonnes TOTALQTY_COLUMN et TOTALPRICE_COLUMN des données source), en particulier TotalPrice divisé par Qté totale.

Est-ce possible? Si oui, comment puis-je faire cela?

Je pourrais créer une autre colonne pour la feuille de données source qui contiendrait cette valeur et la référencer simplement, mais si je peux éviter cela en utilisant un certain calcul de "tromperie", ce serait préférable.

+0

Depuis Aspose.Cells suit la logique d'Excel, je me demandais: avez-vous essayé si l'approche que vous avez à l'esprit est possible dans Excel (lorsque vous créez le tableau croisé dynamique à la main, sans Aspose. Cellules)? –

+0

Oui, mais je transfère ceci à Aspose Cells car Excel Interop est trop lent et, dans certains cas, ne générera jamais le fichier - même après plusieurs heures d'utilisation. –

+0

Je n'ai jamais créé le tableau croisé dynamique à la main, mais je le crée avec Excel Interop, dans une ancienne version de cette application génératrice de rapports. –

Répondre

2

I résolu en ajoutant une colonne supplémentaire dans ma feuille de données source, le remplissage qu'en faisant le calcul décrit ci-dessus (TotalPrice/qte_totale):

decimal avgPrice = 0.0M; 
if ((TotalPrice > 0.0M) && (Quantity > 0)) 
{ 
    avgPrice = TotalPrice/Quantity; 
} 
cell = sourceDataSheet.Cells[_lastRowAddedPivotTableData, 10]; 
cell.PutValue(Math.Round(avgPrice, 2)); 

... puis référence que nouvelle colonne de source de données en conséquence:

pivotTable.AddFieldToArea(Aspose.Cells.Pivot.PivotFieldType.Data, AVGPRICE_COLUMN);