如果预定义的聚合函数或“将值显示为”计算选项不能满足您的要求,则可以创建自己的公式,通过插入计算字段和计算项来计算数据透视表中的值。
数据透视表的所有计算字段都存储在 PivotCalculatedFieldCollection 集合中,可以使用 PivotTable.CalculatedFields 属性访问该集合。使用集合的方法创建、修改或删除计算字段。
若要创建计算字段,请使用 PivotCalculatedFieldCollection.Add 方法。此方法的第一个参数允许您为计算字段指定公式。
公式字符串应符合通用语法规则,并且仅包含支持的元素。
创建计算字段后,使用 PivotTable.DataFields 集合的 PivotDataFieldCollection.Add 方法将其添加到数据透视表的数据区域。
注意
计算字段存储在数据透视缓存中,可用于共享同一缓存的所有数据透视表。
下面的代码演示如何创建一个字段,该字段为“Sales”字段中的值计算 10% 的销售税。
Vb.Net |
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("Report1") workbook.Worksheets.ActiveWorksheet = worksheet '按数据透视表在集合中的名称访问数据透视表。 Dim pivotTable As DevExpress.Spreadsheet.PivotTable = worksheet.PivotTables("PivotTable1") '根据“Sales”字段中的数据创建一个计算字段。 Dim field As DevExpress.Spreadsheet.PivotField = pivotTable.CalculatedFields.Add("=Sales*10%", "Sales Tax") '将计算字段添加到数据区域,并指定自定义字段名称。 Dim dataField As DevExpress.Spreadsheet.PivotDataField = pivotTable.DataFields.Add(field, "Total Tax") '指定数据字段的数字格式。 dataField.NumberFormat = "_([$$-409]* #,##0.00_);_([$$-409]* (#,##0.00);_([$$-409]* "" - ""??_);_(@_)" |
C# |
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["Report1"]; workbook.Worksheets.ActiveWorksheet = worksheet; // 按数据透视表在集合中的名称访问数据透视表。 DevExpress.Spreadsheet.PivotTable pivotTable = worksheet.PivotTables["PivotTable1"]; // 根据“Sales”字段中的数据创建一个计算字段。 DevExpress.Spreadsheet.PivotField field = pivotTable.CalculatedFields.Add("=Sales*10%", "Sales Tax"); // 将计算字段添加到数据区域,并指定自定义字段名称。 DevExpress.Spreadsheet.PivotDataField dataField = pivotTable.DataFields.Add(field, "Total Tax"); // 指定数据字段的数字格式。 dataField.NumberFormat = "_([$$-409]* #,##0.00_);_([$$-409]* (#,##0.00);_([$$-409]* \" - \"??_);_(@_)"; |
生成的数据透视表如下图所示(工作簿在 Microsoft® Excel® 中打开)。
若要更改计算字段的公式,请在 PivotCalculatedFieldCollection 集合中按其名称或索引访问所需字段,然后将新公式分配给该字段的 PivotField.Formula 属性。若要重命名计算字段,请使用 PivotField.Name 属性。
Vb.Net |
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("Report1") workbook.Worksheets.ActiveWorksheet = worksheet '按数据透视表在集合中的名称访问数据透视表。 Dim pivotTable As DevExpress.Spreadsheet.PivotTable = worksheet.PivotTables("PivotTable1") '根据“Sales”字段中的数据创建一个计算字段。 pivotTable.CalculatedFields.Add("=Sales*10%", "Sales Tax Rate 10") '按计算字段在集合中的名称访问该字段。 Dim field As DevExpress.Spreadsheet.PivotField = pivotTable.CalculatedFields("Sales Tax Rate 10") '更改计算字段的公式。 field.Formula = "=Sales*15%" '更改计算字段名称。 field.Name = "Sales Tax Rate 15" '将计算字段添加到数据区域,并指定自定义字段名称。 Dim dataField As DevExpress.Spreadsheet.PivotDataField = pivotTable.DataFields.Add(field, "Total Tax") '指定数据字段的数字格式。 dataField.NumberFormat = "_([$$-409]* #,##0.00_);_([$$-409]* (#,##0.00);_([$$-409]* "" - ""??_);_(@_)" |
C# |
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["Report1"]; workbook.Worksheets.ActiveWorksheet = worksheet; // 按数据透视表在集合中的名称访问数据透视表。 DevExpress.Spreadsheet.PivotTable pivotTable = worksheet.PivotTables["PivotTable1"]; // 根据“Sales”字段中的数据创建一个计算字段。 pivotTable.CalculatedFields.Add("=Sales*10%", "Sales Tax Rate 10"); // 按计算字段在集合中的名称访问该字段。 DevExpress.Spreadsheet.PivotField field = pivotTable.CalculatedFields("Sales Tax Rate 10"); // 更改计算字段的公式。 field.Formula = "=Sales*15%"; // 更改计算字段名称。 field.Name = "Sales Tax Rate 15"; // 将计算字段添加到数据区域,并指定自定义字段名称。 DevExpress.Spreadsheet.PivotDataField dataField = pivotTable.DataFields.Add(field, "Total Tax"); // 指定数据字段的数字格式。 dataField.NumberFormat = "_([$$-409]* #,##0.00_);_([$$-409]* (#,##0.00);_([$$-409]* \" - \"??_);_(@_)"; |
若要从集合中删除特定的计算字段,请使用 PivotCalculatedFieldCollection.Remove 或 PivotCalculatedFieldCollection.RemoveAt 方法。若要一次从集合中删除所有计算字段,请使用 PivotCalculatedFieldCollection.Clear 方法。
Vb.Net
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("Report1")
workbook.Worksheets.ActiveWorksheet = worksheet
'按数据透视表在集合中的名称访问数据透视表。
Dim pivotTable As DevExpress.Spreadsheet.PivotTable = worksheet.PivotTables("PivotTable1")
'根据“Sales”字段中的数据创建一个计算字段。
pivotTable.CalculatedFields.Add("=Sales*10%", "Sales Tax")
'按计算字段在集合中的名称访问该字段。
Dim field As DevExpress.Spreadsheet.PivotField = pivotTable.CalculatedFields("Sales Tax")
'将计算字段添加到数据区域。
Dim dataField As DevExpress.Spreadsheet.PivotDataField = pivotTable.DataFields.Add(field)
'删除计算字段。
pivotTable.CalculatedFields.RemoveAt(0)
C# |
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["Report1"]; workbook.Worksheets.ActiveWorksheet = worksheet; // 按数据透视表在集合中的名称访问数据透视表。 DevExpress.Spreadsheet.PivotTable pivotTable = worksheet.PivotTables["PivotTable1"]; // 根据“Sales”字段中的数据创建一个计算字段。 pivotTable.CalculatedFields.Add("=Sales*10%", "Sales Tax"); // 按计算字段在集合中的名称访问该字段。 DevExpress.Spreadsheet.PivotField field = pivotTable.CalculatedFields("Sales Tax"); // 将计算字段添加到数据区域。 DevExpress.Spreadsheet.PivotDataField dataField = pivotTable.DataFields.Add(field); // 删除计算字段。 pivotTable.CalculatedFields.RemoveAt(0); |