Your search did not match any results.
Pivot Grid

Header Filter

A header filter allows a user to filter field values by including or excluding them from the applied filter. Click a header filter icon in the field chooser or on the field panel to open a popup menu that displays all unique field values.

Use the following properties to configure the header filter:

  • allowSearch
    Enables a user to search through field values.

  • showRelevantValues
    Specifies whether to show all field values or only those that satisfy the other applied filters.

  • width and height
    Configures the popup menu size.

In this demo, a filter is applied to the Country field. This filter includes only the United Kingdom. The City field displays only cities in this country because the showRelevantValues property is true. If you clear the corresponding checkbox under the PivotGrid, the City field displays all cities, regardless of the other applied filters.

Copy to CodeSandBox
<dx-pivot-grid id="sales" [allowSortingBySummary]="true" [allowSorting]="true" [allowFiltering]="true" [showBorders]="true" [height]="570" [dataSource]="pivotGridDataSource"> <dxo-header-filter [allowSearch]="allowSearch" [showRelevantValues]="showRelevantValues" [width]="300" [height]="400" ></dxo-header-filter> <dxo-field-chooser [allowSearch]="true" ></dxo-field-chooser> <dxo-field-panel [visible]="true"> </dxo-field-panel> </dx-pivot-grid> <div class="options"> <div class="caption">Options</div> <div class="option"> <dx-check-box text="Allow Search" [(value)]="allowSearch"></dx-check-box> </div> <div class="option"> <dx-check-box text="Show Relevant Values" [(value)]="showRelevantValues"></dx-check-box> </div> </div>
import { NgModule, Component, enableProdMode } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { DxPivotGridModule, DxCheckBoxModule } from 'devextreme-angular'; import PivotGridDataSource from 'devextreme/ui/pivot_grid/data_source'; if(!/localhost/.test( { enableProdMode(); } @Component({ selector: 'demo-app', templateUrl: 'app/app.component.html', styleUrls: ['app/app.component.css'], preserveWhitespaces: true }) export class AppComponent { pivotGridDataSource: any; allowSearch: boolean = true; showRelevantValues: boolean = true; constructor() { this.pivotGridDataSource = new PivotGridDataSource({ fields: [ { dataField: "[Product].[Category]", area: "column" }, { dataField: "[Product].[Subcategory]", area: "column" }, { dataField: "[Customer].[City]", area: "row" }, { dataField: "[Measures].[Internet Total Product Cost]", area: "data", format: "currency" }, { dataField: "[Customer].[Country]", area: "filter", filterValues: ["[Customer].[Country].&[United Kingdom]"] }, { dataField: "[Ship Date].[Calendar Year]", area: "filter", filterValues: ["[Ship Date].[Calendar Year].&[2004]"] } ], store: { type: "xmla", url: "", catalog: "Adventure Works DW Standard Edition", cube: "Adventure Works" } }); } } @NgModule({ imports: [ BrowserModule, DxPivotGridModule, DxCheckBoxModule ], declarations: [AppComponent], bootstrap: [AppComponent] }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule);
::ng-deep #sales { max-height: 570px; } ::ng-deep .options { padding: 20px; margin-top: 20px; background-color: rgba(191, 191, 191, 0.15); } ::ng-deep .caption { font-size: 18px; font-weight: 500; } ::ng-deep .option { width: 24%; display: inline-block; margin-top: 10px; }
// In real applications, you should not transpile code in the browser. You can see how to create your own application with Angular and DevExtreme here: // System.config({ transpiler: 'ts', typescriptOptions: { module: "system", emitDecoratorMetadata: true, experimentalDecorators: true }, meta: { 'typescript': { "exports": "ts" }, 'devextreme/localization.js': { "esModule": true } }, paths: { 'npm:': '' }, map: { 'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js', 'typescript': 'npm:typescript@3.5.3/lib/typescript.js', '@angular': 'npm:@angular', 'tslib': 'npm:tslib@2.2.0/tslib.js', 'rxjs': 'npm:rxjs@6.4.0', 'rrule': 'npm:rrule@2.6.6/dist/es5/rrule.js', 'luxon': 'npm:luxon@1.26.0/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign@1.1.0', 'devextreme': 'npm:devextreme@20.2.7', 'jszip': 'npm:jszip@3.6.0/dist/jszip.min.js', 'devextreme-quill': 'npm:devextreme-quill@0.10.3/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.0.23', 'devexpress-gantt': 'npm:devexpress-gantt@2.0.29', 'devextreme-angular': 'npm:devextreme-angular@20.2.6', 'preact': 'npm:preact@10.5.13/dist/preact.js', 'preact/hooks': 'npm:preact@10.5.13/hooks/dist/hooks.js' }, packages: { 'app': { main: './app.component.ts', defaultExtension: 'ts' }, 'devextreme': { defaultExtension: 'js' }, 'devextreme/events/utils': { main: 'index' }, 'devextreme/events': { main: 'index' }, 'es6-object-assign': { main: './index.js', defaultExtension: 'js' } }, packageConfigPaths: [ "npm:@angular/*/package.json", "npm:@angular/common/*/package.json", "npm:rxjs/package.json", "npm:rxjs/operators/package.json", "npm:devextreme-angular/*/package.json", "npm:devextreme-angular/ui/*/package.json", "npm:devextreme-angular/package.json", "npm:devexpress-diagram/package.json", "npm:devexpress-gantt/package.json", ] });
<!DOCTYPE html> <html xmlns=""> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <link rel="stylesheet" type="text/css" href="" /> <link rel="stylesheet" type="text/css" href="" /> <script src=""></script> <script src=""></script> <script src=""></script> <script src=""></script> <script src="config.js"></script> <script> System.import('app').catch(console.error.bind(console)); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <demo-app>Loading...</demo-app> </div> </body> </html>