Previous topicNext topic
Help > 开发指南 > Excel > API > 示例 > 数据透视表 >
如何:筛选数据透视表中的项

本主题介绍如何筛选数据透视表中的项目。可以使用不同类型的筛选器:显示或隐藏特定项目、构造筛选器表达式以显示满足给定条件的项目标签(标签筛选器和日期筛选器),或者根据数据区域中的汇总值筛选字段(值筛选器)。

下表描述了允许您将筛选器应用于数据透视表字段的 API 成员。

成员 描述
PivotField.ShowSingleItem 在“数据透视表”字段中显示指定的项。
PivotItem.Visible 指定是否在字段中显示当前项。
PivotTable.Filters 提供对应用于数据透视表的筛选器集合的访问。
PivotFilterCollection.Add 将筛选器应用于指定的行或列字段。
PivotFilterType 指定要应用于数据透视表字段的筛选器的类型。
PivotFilter 表示应用于数据透视表字段的筛选器。
PivotFilter.Field 返回应用当前筛选器的数据透视表字段。
PivotFilter.Value 返回第一个筛选条件值。
PivotFilter.SecondValue 返回第二个筛选条件值。
PivotFilter.MeasureField 返回当前值筛选器使用的数据字段。
PivotFilter.Top10Type 指定“前 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")
'将“Region”字段移动到报告筛选区域。
pivotTable.PageFields.Add(pivotTable.Fields("Region"))

'在“Region”字段中选择第二个(东北)项目。
pivotTable.Fields("Region").ShowSingleItem(1)

C#
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["Report1"];
workbook.Worksheets.ActiveWorksheet = worksheet;
// 按数据透视表在集合中的名称访问数据透视表。
DevExpress.Spreadsheet.PivotTable pivotTable = worksheet.PivotTables["PivotTable1"];
// 将“Region”字段移动到报告筛选区域。
pivotTable.PageFields.Add(pivotTable.Fields["Region"]);

// 在“Region”字段中选择第二个(东北)项目。
pivotTable.Fields["Region"].ShowSingleItem(1);

使用标签筛选器

以下示例演示如何将标签筛选器应用于“区域”列字段,以仅显示南部地区的销售数据。

注意

若要执行更通用的筛选,可以使用通配符。星号 * 匹配任意数量的字符,而问号 ? 表示单个字符。要过滤包含特定字符(如星号、问号或波浪号)的标签,请将波浪号 (~) 放在其前面。

Vb.Net
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("Report1")
workbook.Worksheets.ActiveWorksheet = worksheet

'按数据透视表在集合中的名称访问数据透视表。
Dim pivotTable As DevExpress.Spreadsheet.PivotTable = worksheet.PivotTables("PivotTable1")
'访问“Region”字段。
Dim field As DevExpress.Spreadsheet.PivotField = pivotTable.Fields(0)
'按文本筛选“Region”字段,以显示“South”地区的销售数据。
pivotTable.Filters.Add(field, DevExpress.Spreadsheet.PivotFilterType.CaptionEqual, "South")

C#
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["Report1"];
workbook.Worksheets.ActiveWorksheet = worksheet;
// 按数据透视表在集合中的名称访问数据透视表。
DevExpress.Spreadsheet.PivotTable pivotTable = worksheet.PivotTables["PivotTable1"];
// 访问“Region”字段。
DevExpress.Spreadsheet.PivotField field = pivotTable.Fields[0];
// 按文本筛选“Region”字段,以显示“South”地区的销售数据。
pivotTable.Filters.Add(field, DevExpress.Spreadsheet.PivotFilterType.CaptionEqual, "South");

使用日期筛选器

以下示例演示如何对“日期”行字段应用筛选器以显示第二季度的销售数据。

Vb.Net
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("Report1")
workbook.Worksheets.ActiveWorksheet = worksheet

'按数据透视表在集合中的名称访问数据透视表。
Dim pivotTable As DevExpress.Spreadsheet.PivotTable = worksheet.PivotTables("PivotTable1")
'访问“Region”字段。
Dim field As DevExpress.Spreadsheet.PivotField = pivotTable.Fields(0)
'过滤“日期”字段以显示第二季度的销售额。
pivotTable.Filters.Add(field, DevExpress.Spreadsheet.PivotFilterType.SecondQuarter)

C#
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["Report1"];
workbook.Worksheets.ActiveWorksheet = worksheet;
// 按数据透视表在集合中的名称访问数据透视表。
DevExpress.Spreadsheet.PivotTable pivotTable = worksheet.PivotTables["PivotTable1"];
// 访问“Region”字段。
DevExpress.Spreadsheet.PivotField field = pivotTable.Fields[0];
//过滤“日期”字段以显示第二季度的销售额。
pivotTable.Filters.Add(field, DevExpress.Spreadsheet.PivotFilterType.SecondQuarter);

使用值筛选器

以下示例演示了如何对“产品”行字段应用值过滤器,以显示总销售额介于 6000 美元和 13000 美元之间的产品。

Vb.Net
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("Report1")
workbook.Worksheets.ActiveWorksheet = worksheet

'按数据透视表在集合中的名称访问数据透视表。
Dim pivotTable As DevExpress.Spreadsheet.PivotTable = worksheet.PivotTables("PivotTable1")
'访问“Product”字段。
Dim field As DevExpress.Spreadsheet.PivotField = pivotTable.Fields(1)
'过滤“Product”字段以显示总销售额在6000美元至13000美元之间的产品。
pivotTable.Filters.Add(field, pivotTable.DataFields(0), DevExpress.Spreadsheet.PivotFilterType.ValueBetween, 6000, 13000)

C#
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["Report1"];
workbook.Worksheets.ActiveWorksheet = worksheet;
// 按数据透视表在集合中的名称访问数据透视表。
DevExpress.Spreadsheet.PivotTable pivotTable = worksheet.PivotTables["PivotTable1"];
// 访问“Product”字段。
DevExpress.Spreadsheet.PivotField field = pivotTable.Fields[1];
//过滤“Product”字段以显示总销售额在6000美元至13000美元之间的产品。
pivotTable.Filters.Add(field, pivotTable.DataFields(0), DevExpress.Spreadsheet.PivotFilterType.ValueBetween, 6000, 13000);

使用前 10 个过滤器

“前 10 个”值筛选器允许您显示字段中指定数量的顶部或底部项目 (PivotFilterType.Count),显示占筛选字段总计的指定百分比的顶部或底部值 (PivotFilterType.Percent),或筛选构成特定总和的顶部或底部值 (PivotFilterType.Sum)。

以下示例演示如何将“前 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")
'访问“Product”字段。
Dim field As DevExpress.Spreadsheet.PivotField = pivotTable.Fields(1)
'过滤“Product”字段以显示销售额最低的两种产品。
Dim filter As DevExpress.Spreadsheet.PivotFilter = pivotTable.Filters.Add(field, pivotTable.DataFields(0), DevExpress.Spreadsheet.PivotFilterType.Count, 2)
filter.Top10Type = DevExpress.Spreadsheet.PivotFilterTop10Type.Bottom

C#
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["Report1"];
workbook.Worksheets.ActiveWorksheet = worksheet;
// 按数据透视表在集合中的名称访问数据透视表。
DevExpress.Spreadsheet.PivotTable pivotTable = worksheet.PivotTables["PivotTable1"];
// 访问“Product”字段。
DevExpress.Spreadsheet.PivotField field = pivotTable.Fields[1];
// 过滤“Product”字段以显示销售额最低的两种产品。
DevExpress.Spreadsheet.PivotFilter filter = pivotTable.Filters.Add(field, pivotTable.DataFields[0], DevExpress.Spreadsheet.PivotFilterType.Count, 2);
filter.Top10Type = DevExpress.Spreadsheet.PivotFilterTop10Type.Bottom;

每个字段使用多个筛选器

若要启用将多个筛选器应用于单个行或列字段的功能,请将 PivotBehaviorOptions.AllowMultipleFieldFilters 属性设置为 true。默认情况下,此属性为 false,如果尝试对数据透视表字段应用多个筛选器,则仅应用最后指定的筛选器。

Vb.Net
Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets("Report1")
workbook.Worksheets.ActiveWorksheet = worksheet

'按数据透视表在集合中的名称访问数据透视表。
Dim pivotTable As DevExpress.Spreadsheet.PivotTable = worksheet.PivotTables("PivotTable1")
'允许一个字段有多个筛选器。
pivotTable.Behavior.AllowMultipleFieldFilters = True

'过滤“Date”字段以显示第二季度的销售额。
Dim field1 As DevExpress.Spreadsheet.PivotField = pivotTable.Fields(0)
pivotTable.Filters.Add(field1, DevExpress.Spreadsheet.PivotFilterType.SecondQuarter)

'在“Date”字段中添加第二个过滤器,以显示销售额最低的两天。
Dim filter As PDevExpress.Spreadsheet.ivotFilter = pivotTable.Filters.Add(field1, pivotTable.DataFields(0), DevExpress.Spreadsheet.PivotFilterType.Count, 2)
filter.Top10Type = DevExpress.Spreadsheet.PivotFilterTop10Type.Bottom

C#
DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets["Report1"];
workbook.Worksheets.ActiveWorksheet = worksheet;
// 按数据透视表在集合中的名称访问数据透视表。
DevExpress.Spreadsheet.PivotTable pivotTable = worksheet.PivotTables["PivotTable1"];
// 允许一个字段有多个筛选器。
pivotTable.Behavior.AllowMultipleFieldFilters = true;

// 过滤“Date”字段以显示第二季度的销售额。
DevExpress.Spreadsheet.PivotField field1 = pivotTable.Fields[0];
pivotTable.Filters.Add(field1, DevExpress.Spreadsheet.PivotFilterType.SecondQuarter);

// 在“Date”字段中添加第二个过滤器,以显示销售额最低的两天。
PDevExpress.Spreadsheet.ivotFilter filter = pivotTable.Filters.Add(field1, pivotTable.DataFields[0], DevExpress.Spreadsheet.PivotFilterType.Count, 2);
filter.Top10Type = DevExpress.Spreadsheet.PivotFilterTop10Type.Bottom;

删除过滤器

清除特定筛选器

您可以使用下表中列出的方法之一删除应用于数据透视表字段的筛选器。

方法 描述
PivotFilter.Delete 从应用于数据透视表的筛选器集合中删除当前筛选器。
PivotFilterCollection.Remove 从应用于数据透视表的筛选器集合中删除指定的筛选器。
PivotFilterCollection.RemoveAt 从应用于数据透视表的筛选器集合中删除指定索引处的筛选器。
PivotField.ShowAllItems 重新显示指定数据透视表字段中的所有项目。

Vb.Net
'按数据透视表在集合中的名称访问数据透视表。
Dim pivotTable As DevExpress.Spreadsheet.PivotTable = worksheet.PivotTables("PivotTable1")
'将筛选器应用于“Region”字段。
Dim labelFilter As DevExpress.Spreadsheet.PivotFilter = pivotTable.Filters.Add(pivotTable.Fields("Region"), DevExpress.Spreadsheet.PivotFilterType.CaptionEqual, "South")

'删除指定筛选 
labelFilter.Delete()

C#
// 按数据透视表在集合中的名称访问数据透视表。
DevExpress.Spreadsheet.PivotTable pivotTable = worksheet.PivotTables["PivotTable1"];
// 将筛选器应用于“Region”字段。
DevExpress.Spreadsheet.PivotFilter labelFilter = pivotTable.Filters.Add(pivotTable.Fields["Region"], DevExpress.Spreadsheet.PivotFilterType.CaptionEqual, "South");

// 删除指定筛选
labelFilter.Delete();

清除所有筛选条件

若要一次删除应用于数据透视表的行和列字段的所有筛选器,请使用 PivotFilterCollection.Clear 方法。

Vb.Net
pivotTable.Filters.Clear()

C#
pivotTable.Filters.Clear();