If you have technical questions, please create a support ticket in the DevExpress Support Center.
import React from 'react';
import PivotGrid, {
FieldChooser,
} from 'devextreme-react/pivot-grid';
import PivotGridDataSource from 'devextreme/ui/pivot_grid/data_source';
import XmlaStore from 'devextreme/ui/pivot_grid/xmla_store';
const App = () => (
<React.Fragment>
<div className="long-title">
<h3>Sales Statistics</h3>
</div>
<PivotGrid
dataSource={dataSource}
allowSortingBySummary={true}
allowSorting={true}
allowFiltering={true}
allowExpandAll={true}
height={570}
showBorders={true}
>
<FieldChooser enabled={true} allowSearch={true} />
</PivotGrid>
</React.Fragment>
);
const dataSource = new PivotGridDataSource({
fields: [
{ dataField: '[Product].[Category]', area: 'row' },
{
dataField: '[Product].[Subcategory]',
area: 'row',
headerFilter: {
search: {
enabled: true,
},
},
},
{ dataField: '[Ship Date].[Calendar Year]', area: 'column' },
{ dataField: '[Ship Date].[Month of Year]', area: 'column' },
{ dataField: '[Measures].[Reseller Freight Cost]', area: 'data', format: 'currency' },
],
store: new XmlaStore({
url: 'https://demos.devexpress.com/Services/OLAP/msmdpump.dll',
catalog: 'Adventure Works DW Standard Edition',
cube: 'Adventure Works',
}),
});
export default App;
xxxxxxxxxx
import React from 'react';
import PivotGrid, { FieldChooser } from 'devextreme-react/pivot-grid';
import PivotGridDataSource from 'devextreme/ui/pivot_grid/data_source';
import XmlaStore from 'devextreme/ui/pivot_grid/xmla_store';
const App = () => (
<React.Fragment>
<div className="long-title">
<h3>Sales Statistics</h3>
</div>
<PivotGrid
dataSource={dataSource}
allowSortingBySummary={true}
allowSorting={true}
allowFiltering={true}
allowExpandAll={true}
height={570}
showBorders={true}
>
<FieldChooser
enabled={true}
allowSearch={true}
/>
</PivotGrid>
</React.Fragment>
);
const dataSource = new PivotGridDataSource({
fields: [
{ dataField: '[Product].[Category]', area: 'row' },
{
dataField: '[Product].[Subcategory]',
area: 'row',
headerFilter: {
search: {
enabled: true,
},
},
},
{ dataField: '[Ship Date].[Calendar Year]', area: 'column' },
{ dataField: '[Ship Date].[Month of Year]', area: 'column' },
{ dataField: '[Measures].[Reseller Freight Cost]', area: 'data', format: 'currency' },
],
store: new XmlaStore({
url: 'https://demos.devexpress.com/Services/OLAP/msmdpump.dll',
catalog: 'Adventure Works DW Standard Edition',
cube: 'Adventure Works',
}),
});
export default App;
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.tsx';
ReactDOM.render(
<App />,
document.getElementById('app'),
);
xxxxxxxxxx
window.exports = window.exports || {};
window.config = {
transpiler: 'ts',
typescriptOptions: {
module: 'system',
emitDecoratorMetadata: true,
experimentalDecorators: true,
jsx: 'react',
},
meta: {
'react': {
'esModule': true,
},
'typescript': {
'exports': 'ts',
},
'devextreme/time_zone_utils.js': {
'esModule': true,
},
'devextreme/localization.js': {
'esModule': true,
},
'devextreme/viz/palette.js': {
'esModule': true,
},
'openai': {
'esModule': true,
},
},
paths: {
'npm:': 'https://unpkg.com/',
'bundles:': 'bundles/',
'externals:': 'bundles/externals/',
},
defaultExtension: 'js',
map: {
'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js',
'typescript': 'npm:typescript@4.2.4/lib/typescript.js',
'jszip': 'npm:jszip@3.10.1/dist/jszip.min.js',
'react': 'npm:react@17.0.2/umd/react.development.js',
'react-dom': 'npm:react-dom@17.0.2/umd/react-dom.development.js',
'prop-types': 'npm:prop-types/prop-types.js',
'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js',
'luxon': 'npm:luxon@3.4.4/build/global/luxon.min.js',
'es6-object-assign': 'npm:es6-object-assign',
'devextreme': 'npm:devextreme@link:../../packages/devextreme/artifacts/npm/devextreme/cjs',
'devextreme-react': 'npm:devextreme-react@link:../../packages/devextreme-react/npm/cjs',
'devextreme-quill': 'npm:devextreme-quill@1.7.1/dist/dx-quill.min.js',
'devexpress-diagram': 'npm:devexpress-diagram@2.2.5/dist/dx-diagram.js',
'devexpress-gantt': 'npm:devexpress-gantt@4.1.54/dist/dx-gantt.js',
'@devextreme/runtime': 'npm:@devextreme/runtime@3.0.12',
'inferno': 'npm:inferno@7.4.11/dist/inferno.min.js',
'inferno-compat': 'npm:inferno-compat/dist/inferno-compat.min.js',
'inferno-create-element': 'npm:inferno-create-element@7.4.11/dist/inferno-create-element.min.js',
'inferno-dom': 'npm:inferno-dom/dist/inferno-dom.min.js',
'inferno-hydrate': 'npm:inferno-hydrate/dist/inferno-hydrate.min.js',
'inferno-clone-vnode': 'npm:inferno-clone-vnode/dist/inferno-clone-vnode.min.js',
'inferno-create-class': 'npm:inferno-create-class/dist/inferno-create-class.min.js',
'inferno-extras': 'npm:inferno-extras/dist/inferno-extras.min.js',
'devextreme-cldr-data': 'npm:devextreme-cldr-data@1.0.3',
// SystemJS plugins
'plugin-babel': 'npm:systemjs-plugin-babel@0.0.25/plugin-babel.js',
'systemjs-babel-build': 'npm:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js',
// Prettier
'prettier/standalone': 'npm:prettier@2.8.8/standalone.js',
'prettier/parser-html': 'npm:prettier@2.8.8/parser-html.js',
},
packages: {
'devextreme': {
defaultExtension: 'js',
},
'devextreme-react': {
main: 'index.js',
},
'devextreme/events/utils': {
main: 'index',
},
'devextreme/localization/messages': {
format: 'json',
defaultExtension: 'json',
},
'devextreme/events': {
main: 'index',
},
'es6-object-assign': {
main: './index.js',
defaultExtension: 'js',
},
},
packageConfigPaths: [
'npm:@devextreme/*/package.json',
'npm:@devextreme/runtime@3.0.12/inferno/package.json',
],
babelOptions: {
sourceMaps: false,
stage0: true,
react: true,
},
};
System.config(window.config);
xxxxxxxxxx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.js';
ReactDOM.render(<App />, document.getElementById('app'));
xxxxxxxxxx
<html lang="en">
<head></head>
<body class="dx-viewport">
<div class="demo-container">
<div id="app"></div>
</div>
</body>
</html>
xxxxxxxxxx
.long-title h3 {
font-family:
'Segoe UI Light',
'Helvetica Neue Light',
'Segoe UI',
'Helvetica Neue',
'Trebuchet MS',
Verdana;
font-weight: 200;
font-size: 28px;
text-align: center;
margin-bottom: 20px;
}
Configure the Store
Use XmlaStore to connect your component to an OLAP storage. Specify the following properties to configure it:
-
url
The OLAP server's URL. -
catalog
The initial catalog that contains the OLAP cube. -
cube
The name of the OLAP cube to use from the catalog.
Pass the XmlaStore to the store property of the PivotGridDataSource component. Assign the component to the PivotGrid's dataSource property.
Configure PivotGrid Fields
To display data in the PivotGrid, assign an array to the fields[] property. Each object in this array configures a single pivot grid field. Assign a field name to the dataField property to populate the pivot grid field with data.
You can distribute fields between four different areas: row, column, filter, and data. To specify the area, set the area property. Add measures to the "data" area and dimensions to other areas. Fields that do not belong to any area are displayed in the field chooser.