XMLA (XML for Analysis) is the protocol Excel, Power BI and other OLAP clients use to talk to eMondrian — the same protocol Microsoft Analysis Services uses. Requests are SOAP messages over HTTP.

Address

WhereAddress
Same machinehttp://localhost/xmla
Another machinehttp://<server-address>/xmla — see [[install/remote-access
Port changed in .envhttp://localhost:8081/xmla
Public demohttps://demo.emondrian.com/xmla

Clients connect through their Analysis Services connection: Excel From Analysis Services, Power BI Analysis Services, Tableau Microsoft Analysis Services.

Web applications on another origin can call the endpoint from the browser: the front door answers CORS requests, including the SOAPAction header. CORS_ALLOW_ORIGIN in .env sets the allowed origin — see CORS.

Methods

MethodPurpose
DiscoverMetadata: catalogs, cubes, dimensions, hierarchies, measures, properties
ExecuteRun a query — MDX, or DAX with the [[clients/dax

Sessions and caching

Clients such as Excel and Power BI open an XMLA session and reuse it. Within a session, eMondrian reuses the loaded schema and cached results, so repeated queries don’t hit the database again.

Requests without a session — for example one-off calls with curl — get a fresh session each time. They still work, but every request loads the schema again, so they’re slower and always run SQL. Keep this in mind when testing performance with scripts.

Example request

An MDX query against the OnTime sample with curl:

curl -X POST http://localhost/xmla \
  -H 'Content-Type: text/xml' \
  -d '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Body>
    <Execute xmlns="urn:schemas-microsoft-com:xml-analysis">
      <Command>
        <Statement>SELECT [Measures].[Flights] ON COLUMNS, [Airline].[Airline].Members ON ROWS FROM [OnTime (attributes)]</Statement>
      </Command>
      <Properties>
        <PropertyList>
          <Catalog>OnTime</Catalog>
          <Format>Tabular</Format>
        </PropertyList>
      </Properties>
    </Execute>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>'

<Format>Tabular</Format> returns rows; Multidimensional returns axes and cells, as Excel uses.