This architecture diagram illustrates the internal flow of a DAX query within Power BI—from query generation to data retrieval and calculation. It captures the roles of the Formula Engine, DAX Calculation Engine, Storage Engine, and various data sources, giving you a clear snapshot of how insights are assembled beneath the surface.

Query (MDX/DAX):
- What it is: These are the languages used to interact with your data in Power BI.
- DAX (Data Analysis Expressions) is used in most Power BI reports.
- MDX (Multidimensional Expressions) is occasionally used when connecting to multidimensional models.
- What happens: When a report is loaded or refreshed, a query (usually DAX) is generated to fetch data for visuals.
DAX Calculation Engine (Formula Engine):
- This engine interprets the DAX query.
- It parses and converts it into steps.
- Coordinates the work between internal engines.
- Computes logic like aggregations, conditional logic, and calculated columns.
- It’s single-threaded (mostly), which can affect performance for complex calculations.
VertiPaq + Cache / DirectQuery (Storage Engine):
- This is where the data lives and is retrieved from:
- VertiPaq: Columnar storage engine for in-memory data. Super fast because it’s compressed and optimized for reads.
- Cache: Previous queries’ results that are temporarily stored for quick reuse.
- DirectQuery: When not importing data into the model, it connects live to the underlying source. Slower but always current.
- The Storage Engine responds to requests from the Formula Engine, retrieves data,, and returns it back for calculation.
Data Source:
- These are the places where you data actually resides e.g. SQL Server, Excel, SharePoint etc.
- If using Import mode, data is pulled and stored in VertiPaq.
- If using DirectQuery, data stays in the source but is queried on demand.