DAX and Data Modeling
Written By: Sajagan Thirugnanam
Last Updated on September 23, 2026
Import mode copies your data into Power BI's in-memory engine, which makes reports fast but only as fresh as the last refresh. DirectQuery sends a live query to your source every time a reader interacts with a visual, so the data stays current but report speed depends on the source. Default to Import unless you have a specific reason the data needs to be live.
What Import mode does
Import mode brings a copy of your data into the Power BI model. There is no live connection to the source once the copy is loaded; visuals read from Power BI's own compressed, in-memory storage. This is why Import reports are usually the fastest to interact with. The cost is that data goes stale between refreshes, so you need a scheduled or manual refresh before every use.
What DirectQuery does
DirectQuery keeps no copy of the data in Power BI. Every filter, slicer change, or click on a visual sends a new query to the source system, and the result is calculated there rather than pre-processed in Power BI. This keeps the report current without a refresh schedule, at the cost of depending on the source database's own performance for every interaction.
By default, a DirectQuery visual returns at most 1,000,000 rows per query. A visual whose result would exceed that limit shows a warning instead of the full result, so DirectQuery reports built on very large tables usually need aggregation or filters built into the visual rather than relying on the raw table.
Import vs. DirectQuery
Factor | Import | DirectQuery |
|---|---|---|
Data freshness | As of the last refresh | Live, every interaction queries the source |
Report speed | Fast; data is cached in memory | Depends on the source system and network |
Dataset size | Limited by model memory | Not stored in Power BI, so very large sources are workable |
DAX and modeling | Full support for measures, calculated columns and transformations | Several DAX functions and calculated columns are restricted |
Refresh needed | Yes, scheduled or manual | No |
Row limit per query | None beyond model size | 1,000,000 rows by default |
When to choose each mode
Choose Import when the report can tolerate a scheduled refresh, needs complex DAX or heavy transformations, and the source data fits within your capacity's memory limits. This is the right default for most reports.
Choose DirectQuery when the source changes by the minute and the report must reflect that without a refresh, such as an operational dashboard on a live order system, or when the source table is too large to import at all.
Combine both with a composite model. Keep small, slow-changing dimension tables such as Customer or Product in Import mode, and connect a large, fast-changing fact table with DirectQuery. This balances speed against freshness instead of forcing one mode on the whole model.
Direct Lake, a third mode in Microsoft Fabric
Microsoft Fabric adds a storage mode called Direct Lake for semantic models built on a Fabric lakehouse or warehouse. It reads Parquet files directly from OneLake without importing a copy and without sending a query to a source database on every interaction.
It sits between the other two modes: near-Import speed with data that reflects what is in the lakehouse, without a refresh step. It only applies to Fabric-backed sources, so it does not replace Import or DirectQuery for a model built on Excel files or an on-premises database.
Modeling still matters either way
Whichever mode you choose, the shape of your model affects performance. A star schema keeps both Import and DirectQuery reports faster than a flat, denormalized table; see our star schema vs. snowflake schema guide. If you import large fact tables, incremental refresh keeps refresh times down by only reloading the rows that changed. And if a report already feels slow regardless of mode, our troubleshooting guide walks through finding the actual bottleneck before you change storage mode at all. Our performance optimization guide goes deeper into fixing what you find.
FAQs
Which is faster: Import or DirectQuery?
Import, in nearly every case, because visuals read from data already cached in memory rather than waiting on a query to the source. DirectQuery speed depends entirely on how well-tuned the source system is; a well-indexed warehouse under light load can feel close to Import, but a busy or poorly indexed source will feel slow on every click.
Can you use DAX in DirectQuery?
Yes, but some DAX functions and calculated columns are restricted or unavailable, particularly functions that would require scanning the full table locally. Import mode supports the full DAX surface. Check a specific function's documentation if you are unsure whether it works in DirectQuery before building around it.
Sources
DirectQuery in Power BI - Microsoft Learn
Direct Lake overview - Microsoft Learn
Related to DAX and Data Modeling