☝️Small business or a startup? See if you qualify for our special offer.
+
All documentation
Connecting to data source

Mapping

The mapping defines how fields from the data source are treated and presented within the component. 

The mapping is described by the MappingObject, where each key is the field’s unique name, and a value is the FieldMappingObject. The FieldMappingObject contains properties that will be applied to the field.

To see different examples of using the mapping, visit our Examples page.

Usage

You can define the mapping for all data sources but with some differences:

Mapping properties

See the full list of available MappingObject properties.

How to define the mapping

You can define the mapping in the following ways:

  1. As an inline MappingObject.
  2. As a URL to a JSON file with the mapping.

As an inline MappingObject

The mapping can be defined as an inline MappingObject in the following way:

report: {
dataSource: {
filename: "data.csv",
mapping: {
"Month": {
type: "month"
},
"Company Name": {
type: "string"
},
"Region": {
type: "string",
hierarchy: "Geography"
},
// ...
}
}
}

Live example

As a URL to a file

To define the mapping as a URL to a file, follow the steps below:

Step 1. Create a new JSON file with the mapping (e.g., mapping.json). Your code should look similar to the following example:

{
"Month": {
"type": "month"
},
"Company Name": {
"type": "string"
},
"Region": {
"type": "string",
"hierarchy": "Geography"
},
// ...
}

Step 2. Put your mapping file where Flexmonster can access it.

Step 3. In the report, define the mapping as a URL to your file:

report: {
dataSource: {
filename: "data.csv",
mapping: "<URL_to_your_mapping_file>"
}
}

Live example

Use cases

Specify a caption for a field

By default, a caption is a field’s uniqueName. To specify the field’s custom caption, use the [field_name].caption property:

report: {
dataSource: {
filename: "data.csv",
mapping: {
"item_price": {
caption: "Price"
},
// Other fields
}
}
}

Live example

Define the type of a field

By default, Flexmonster autodetects the field types. You can manually specify the type of a field when working with JSON, CSV, Flexmonster Data Server, MongoDB, or the custom data source API.

To specify the field type, use the [field_name].type property:

report: {
dataSource: {
filename: "data.csv",
mapping: {
"Month": {
type: "month",
}
}
}
}

Live example

Watch the video that demonstrates how a type is set for a field: Mapping in Flexmonster Pivot.

Hide a field in the component

To hide a field in the component, set the [field_name].visible property to false:

report: {
dataSource: {
filename: "data.csv",
mapping: {
"Country": {
visible: false,
}
}
}
}

As a result, the "Country" field will be hidden on the grid, charts, and in the Field List Live example.

Group several fields in a folder

To group several fields in the Field List, use the [field_name].folder property:

report: {
dataSource: {
filename: "data.csv",
mapping: {
"Country": {
folder: "Place",
},
"State": {
folder: "Place",
},
"City": {
folder: "Place",
}
}
}
}

Live example

This feature is supported for JSON, CSV, Flexmonster Data Server, MongoDB, and the custom data source API.

Format a date field

You can format date fields when working with JSON, CSV, Flexmonster Data Server, MongoDB, the custom data source API, or Elasticsearch.

To format a specific date field, use the [field_name].format property:

report: {
dataSource: {
data: [
// ...
],
mapping: {
"OrderDate": {
type: "date string",
format: "MM/dd/yyyy"
}
}
}
}

Live example

Learn more about date and time formatting.

Define available aggregations for a field

Each field has a list of available aggregations based on the field’s type. You can limit the list to aggregations you need by specifying them in the <uniqueName>.aggregations property:

report: {
dataSource: {
filename: "data/data.csv",
mapping: {
"Price": {
aggregations: ["max", "min"]
}
}
}
}

Live example

Configure multilevel hierarchies

Using the mapping, you can create multilevel hierarchies from non-hierarchical data. This feature is supported for JSON, CSV, Flexmonster Data Server, MongoDB, and the custom data source API.

Note In the custom data source API, multilevel hierarchies should be supported on the server side. See how to support multilevel hierarchies.

To configure multilevel hierarchies, specify the [field_name].hierarchy and [field_name].parent properties in the mapping.

In the example below, we create the "Geography" hierarchy with the "Country" field as the first level, the "State" field as the second level, and the "City" field as the third level:

report: {
dataSource: {
   filename: "data.json",
    mapping: {
    "Country": {
       hierarchy: "Geography",
      },
     "State": {
        hierarchy: "Geography",
        parent: "Country"
      },
     "City": {
        hierarchy: "Geography",
        parent: "State"
      }
    }
 }
}

Live example

Watch the video that shows how to create a multilevel hierarchy: Mapping in Flexmonster Pivot.

Creating several fields from one field

Starting from version 2.9, you can create multiple fields from one field and use them separately in the slice. This feature is available for JSON and CSV data sources.

To create several fields from one field, specify the mapping as follows:

dataSource: {
mapping: {
"Date": [
{
type: "date",
uniqueName: "DateHierarchical",
caption: "Date (hierarchical)"
},
{
type: "date string",
uniqueName: "DateString",
caption: "Date (string)"
}
],
// ...
}
}

Notice that we use an array of FieldMappingObjects as a mapping value for the "Date" field. Each FieldMappingObject describes a separate field that will be created in the component.

Each created field should have a unique value for the uniqueName property. Specify other mapping properties as usual.

After you have defined the necessary fields, include them in the slice as ordinary fields:

report: {
slice: {
rows: [
{
uniqueName: "DateString"
}
],
// ...

}

Live example

Defining available aggregations for fields of a certain type

In JSON and CSV

Each field type has a list of available aggregations. Starting from version 2.8.33, you can limit the availability of aggregation functions for fields of the following types: "number", "string", "date", and "time".

To define available aggregations for a certain field type, specify an array with the aggregations in the aggregations.[field_type] property. For example:

report: {
dataSource: {
filename: "data.json",
mapping: {
aggregations: {
number: [ "sum", "average" ],
date: [ "max", "min" ],
string: [ "count", "distinctcount" ]
}
}
}
}

As a result, the following aggregations will be available:

  • For number fields: "sum" and "average".
  • For date fields: "max" and "min".
  • For string fields: "count" and "distinctcount".

Live example

If a type is not listed in the aggregations property, fields of this type will have default aggregations.

In the custom data source API

When using the custom data source API, specify supported aggregations for a certain field type in the aggregations property of the response to the /fields request.

Learn more about aggregations in the custom data source API here: Configuring aggregation functions.

See also