Documentation
MDX API

MDX API

The MDX API enables Cube to connect to Microsoft Excel. It derives its name from multidimensional data expressions (opens in a new tab), a query language for OLAP in the Microsoft ecosystem.

Unlike Cube Cloud for Excel, it only works with Excel on Microsoft Windows. However, it allows using the data from the MDX API with the native PivotTable (opens in a new tab) in Excel.

The MDX API is available in Cube Cloud on Enterprise and above (opens in a new tab) product tiers. It also requires the M deployment tier.

The MDX API is currently in preview.

Key features:

  • Direct connectivity: Connect Excel directly to Cube Cloud using standard XMLA protocols.
  • Advanced analytical functions: Utilize the power of MDX to execute sophisticated queries that include slicing, dicing, drilling down, and rolling up of data.
  • Real-time access: Fetch live data from Cube Cloud, ensuring that your analyses and reports always reflect the most current information.

Configuration

While the MDX API is in preview, your Cube account team will enable and configure it for you.

To enable or disable the MDX API on a specific deployment, go to Settings in the Cube Cloud sidebar, then Configuration, and then toggle the Enable MDX API option.

Performance considerations

To ensure the best user experience in Excel, the MDX API should be able to respond to requests with a subsecond latency. Consider the following recommendations:

  • The deployment should be collocated with users, so deploy it a region that is closest to your users.
  • Queries should hit pre-aggregations whenever possible. Consider turning on the rollup-only mode to disallow queries that go directly to the upstream data source.
  • If some queries still go to the upstream data source, it should respond with a subsecond latency. Consider tuning the concurrency and quotas to achieve that.

Using MDX API with Excel

The MDX API works only with views, not cubes.

The following section describes Excel-specific configuration options.

Dimension hierarchies

MDX API supports dimension hierarchies. You can define multiple hierarchies. Each level in the hierarchy is a dimension from the view.

views:
  - name: orders_view
    description: "Data about orders, amount, count and breakdown by status and geography."
    meta:
      hierarchies:
        - name: "Geography"
          levels:
            - country
            - state
            - city

For historical reasons, the syntax shown above differ from how hierarchies are supposed to be defined in the data model. This is going to be harmonized in the future.

Dimension keys

You can define a member that will be used as a key for a dimension in the cube's model file.

cubes:
  - name: users
    sql_table: USERS
    public: false
 
    dimensions:
      - name: id
        sql: "{CUBE}.ID"
        type: number
        primary_key: true
 
      - name: first_name
        sql: FIRST_NAME
        type: string
        meta:
          key_member: users_id

Dimension labels

You can define a member that will be used as a label for a dimension in the cube's model file.

cubes:
  - name: users
    sql_table: USERS
    public: false
 
    dimensions:
      - name: id
        sql: "{CUBE}.ID"
        type: number
        meta:
          label_member: users_first_name

Custom properties

You can define custom properties for dimensions in the cube's model file.

cubes:
  - name: users
    sql_table: USERS
    public: false
 
    dimensions:
      - name: id
        sql: "{CUBE}.ID"
        type: number
        meta:
          properties:
            - name: "Property A"
              column: users_first_name
            - name: "Property B"
              value: users_city

Measure groups

MDX API supports organizing measures into groups (folders). You can define measure groups in the view's model file.

views:
  - name: orders_view
    description: "Data about orders, amount, count and breakdown by status and geography."
    meta:
      folders:
          - name: "Folder A"
            members:
              - total_amount
              - average_order_value
          - name: "Folder B"
            members:
              - completed_count
              - completed_percentage

For historical reasons, the syntax shown above differ from how folders are supposed to be defined in the data model. This is going to be harmonized in the future.

Formatting

MDX API supports formatting for measures to control how values are displayed in Excel.

Percent format

You can format measures as percentages using the percent format type:

cubes:
  - name: orders
    sql_table: ORDERS
 
    measures:
      - name: completion_rate
        sql: "COUNT(CASE WHEN {CUBE}.status = 'completed' THEN 1 END) / COUNT(*)"
        type: number
        format: percent

Currency format

You can format measures as currency using the currency format type:

cubes:
  - name: orders
    sql_table: ORDERS
 
    measures:
      - name: total_revenue
        sql: "{CUBE}.amount"
        type: sum
        format: currency

Currency formatting is locale-aware and responds to the language configuration set via the CUBE_XMLA_LANGUAGE environment variable. This variable accepts either Microsoft LCID (Locale Identifier) (opens in a new tab) values or language tags. The default value is 1033 (English - United States).

For example, to display currency values using the Netherlands locale (Euro with comma as decimal separator), you can use either:

# Using LCID
CUBE_XMLA_LANGUAGE=1043
 
# Using language tag
CUBE_XMLA_LANGUAGE=nl-NL

Authentication and authorization

Authentication and authorization work the same as for the SQL API.