> ## Documentation Index
> Fetch the complete documentation index at: https://docs.activeviam.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Data Export REST API

## DataExport

The [Data Export](/engine/rest/6.1.20/data-export) service allows you to download the result of MDX
queries as a stream or directly export them to files in the server or in the cloud. The exports can
be customized.

The minimal configuration for an export requires an MDX query and a format but many options are
available.

## Formats

All export orders should precise a format for the output. By default, the available formats are:

* *arrow*: Arrow format (using the format version 1.0.0) that conserves the type of the values
  exported (for more details on Arrow [here](https://arrow.apache.org/))
* *csvTabular*: CSV format with one level per column and one measure per column
* *csvPivotTable*: CSV format to reproduce the format of the MDX query. Can only handle MDX query with
  columns and/or rows (only 2 axis)

When using the csv formats you can add a custom charset or/and a custom separator.

### Difference between the two csv formats

The csvPivotTable will not change the structure of the MDX result. The csvTabular will change the
structure of the MDX result to have one level per column and one measure per column. The difference
is only visible if the query puts several measures or levels in the same column.

Let's take this query as an example:

```
"SELECT [People].[People].[traderId].Members ON ROWS,
Crossjoin([Currency].[Currency].[currency].Members, {[Measures].[PNL]}) ON COLUMNS
FROM [myCube]"
```

The query result will have two axis: the ROWS with the traderId level, and the COLUMNS with the
currency level members and the measure PNL. The csvPivotTable format will return:

```
People,EUR>PNL,USD>PNL
2,1.1,1.2 
3,-1.1,-0.2 
4,1.4,1.5
```

But the csvTabular format will put the currency and the PNL measure on different columns and return:

```
[Currency].[Currency].[currency],[People].[People].[traderId],PNL
EUR,2,1.1
USD,2,1.2
EUR,3,-1.1
USD,3,-0.2
EUR,4,1.4
USD,4,1.5
```

## Customization

The data export service is made to allow customization. You can easily add measure formatters or
even add a whole new export format.

### Configure the export directory

Use the `activeviam.dataexportservice.rootpath` property to specify a root folder for the exported files.

### Add a New Measure Formatter

To add a new measure formatter you will need to implement a `IMeasureFormatter` and give it a plugin
key to use it in the export orders. A measure formatter can transform the headers and/or the value
of a measure.

### Cloud exports

To export your query results to a cloud storage, override `ActivePivotRestServicesConfig#dataExportService`
to create a `CloudDataExportService`.
