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
| Where | Address |
|---|---|
| Same machine | http://localhost/xmla |
| Another machine | http://<server-address>/xmla — see [[install/remote-access |
Port changed in .env | http://localhost:8081/xmla |
| Public demo | https://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
| Method | Purpose |
|---|---|
Discover | Metadata: catalogs, cubes, dimensions, hierarchies, measures, properties |
Execute | Run 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.