如果预定义的聚合函数或“将值显示为”计算选项不能满足您的要求,则可以创建自己的公式,通过插入计算字段和计算项来计算数据透视表中的值。计算项是数据透视表字段中的自定义项,其值是根据同一字段中其他项的值生成的。
添加到数据透视表字段的所有计算项都存储在 PivotCalculatedItemCollection 集合中,可以使用 PivotField.CalculatedItems 属性访问该集合。使用集合的方法创建、修改或删除计算项。
在插入计算项之前,请考虑以下限制。
若要创建计算项,请使用 PivotCalculatedItemCollection.Add 方法。此方法的第一个参数允许您为计算项指定公式。
公式字符串应符合通用语法规则,并且仅包含支持的元素。
被引用 | 描述 | 例 |
项目名称 | 在数据透视表字段
(PivotItem。标题). 创建引用时,可以将项目的名称括在撇号中或省略它们。 |
以下示例演示如何汇总“状态”字段中的前三项: =Arizona+California+Colorado …或者… ='Arizona'+'California'+'Colorado' |
项目位置 | 按项目在数据透视表中当前排序和显示的位置来引用项目。隐藏项将被忽略。 | 以下示例演示如何汇总“State”字段中的前三项: =State[1]+State[2]+State[3] |
项目相对位置 | 通过项目相对于包含公式的计算项目的位置来引用项目。 正数是指计算项下方或右侧的项目。 负数是指计算项上方或左侧的项目。 如果指定位置位于字段中第一项之前或最后一项之后,则 显示#REF!错误。 |
以下示例演示如何对“State”字段中的前三个项目相对于“West Total”计算项目求和: =State[-6]+State[-5]+State[-4] |
下面的代码演示如何创建两个计算项来计算每个区域的总销售额。
Vb.Net |
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("Report1") workbook.Worksheets.ActiveWorksheet = worksheet '按数据透视表在集合中的名称访问数据透视表。 Dim pivotTable As DevExpress.Spreadsheet.PivotTable = worksheet.PivotTables("PivotTable1") '按数据透视字段在集合中的名称访问数据透视字段。 Dim field As DevExpress.Spreadsheet.PivotField = pivotTable.Fields("State") '将计算项目添加到“State”字段。 field.CalculatedItems.Add("=Arizona+California+Colorado", "West Total") field.CalculatedItems.Add("=Illinois+Kansas+Wisconsin", "Midwest Total") |
C# |
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["Report1"]; workbook.Worksheets.ActiveWorksheet = worksheet; // 按数据透视表在集合中的名称访问数据透视表。 DevExpress.Spreadsheet.PivotTable pivotTable = worksheet.PivotTables["PivotTable1"]; // 按数据透视字段在集合中的名称访问数据透视字段。 DevExpress.Spreadsheet.PivotField field = pivotTable.Fields["State"]; // 将计算项目添加到“State”字段。 field.CalculatedItems.Add("=Arizona+California+Colorado", "West Total"); field.CalculatedItems.Add("=Illinois+Kansas+Wisconsin", "Midwest Total"); |
生成的数据透视表如下图所示(工作簿在 Microsoft® Excel® 中打开)。
若要更改计算项的公式,请通过 PivotCalculatedItemCollection 集合中的索引访问所需项,然后将新公式分配给项的 PivotItem.Formula 属性。若要重命名计算项,请使用 PivotItem.Caption 属性。
Vb.Net |
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("Report1") workbook.Worksheets.ActiveWorksheet = worksheet '按数据透视表在集合中的名称访问数据透视表。 Dim pivotTable As DevExpress.Spreadsheet.PivotTable = worksheet.PivotTables("PivotTable1") '按数据透视字段在集合中的名称访问数据透视字段。 Dim field As Express.Spreadsheet.PivotField = pivotTable.Fields("Customer") '将计算项目添加到“Customer”字段。 Dim item As Express.Spreadsheet.PivotItem = field.CalculatedItems.Add("='Big Foods'*110%", "Big Foods Sales Plan") '更改计算项的公式。 item.Formula = "='Big Foods'*115%" |
C# |
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["Report1"]; workbook.Worksheets.ActiveWorksheet = worksheet; // 按数据透视表在集合中的名称访问数据透视表。 DevExpress.Spreadsheet.PivotTable pivotTable = worksheet.PivotTables["PivotTable1"]; // 按数据透视字段在集合中的名称访问数据透视字段。 DevExpress.Spreadsheet.PivotField field = pivotTable.Fields["Customer"]; // 将计算项目添加到“Customer”字段。 DevExpress.Spreadsheet.PivotItem item = field.CalculatedItems.Add("='Big Foods'*110%", "Big Foods Sales Plan"); // 更改计算项的公式。 item.Formula = "='Big Foods'*115%"; |
若要从字段中删除计算项,请使用 PivotCalculatedItemCollection.Remove 或 PivotCalculatedItemCollection.RemoveAt 方法。若要一次从集合中删除所有计算项,请使用 PivotCalculatedItemCollection.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") '按数据透视字段在集合中的名称访问数据透视字段。 Dim field As PivotField = pivotTable.Fields("Customer") '将计算项目添加到“Customer”字段。 Dim item As PivotItem = field.CalculatedItems.Add("='Big Foods'*110%", "Big Foods Sales Plan") '从集合中删除按索引计算的项。 field.CalculatedItems.RemoveAt(0) |
C# |
Format:HTML Format Version:1.0 StartHTML:
165 EndHTML: 2168 StartFragment: 314 EndFragment: 2136 StartSelection: 314
EndSelection: 314 DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["Report1"]; workbook.Worksheets.ActiveWorksheet = worksheet; // 按数据透视表在集合中的名称访问数据透视表。 DevExpress.Spreadsheet.PivotTable pivotTable = worksheet.PivotTables["PivotTable1"]; // 按数据透视字段在集合中的名称访问数据透视字段。 DevExpress.Spreadsheet.PivotField field = pivotTable.Fields["Customer"]; // 将计算项目添加到“Customer”字段。 DevExpress.Spreadsheet.PivotItem item = field.CalculatedItems.Add("='Big Foods'*110%", "Big Foods Sales Plan"); //从集合中删除按索引计算的项。 field.CalculatedItems.RemoveAt(0); |