1.2 Storage Modes: Import, DirectQuery, and Direct Lake
Key Takeaways
- Import mode copies data into the Power BI model for fastest query performance but requires scheduled refreshes.
- DirectQuery sends queries to the source at report time for real-time data but depends on source performance.
- Direct Lake reads directly from OneLake Parquet files, combining Import speed with DirectQuery freshness.
- Composite models allow mixing Import and DirectQuery tables in a single model.
- The storage mode choice impacts model size limits, refresh requirements, DAX functionality, and licensing needs.
Storage Modes: Import, DirectQuery, and Direct Lake
Quick Answer: Import copies data into the model (fastest but needs refresh). DirectQuery queries the source live (real-time but slower). Direct Lake reads from OneLake files (near-Import speed, no refresh needed, Fabric only). Composite models mix Import and DirectQuery in one model for flexibility.
Choosing the right storage mode is one of the most critical decisions in Power BI development. The PL-300 tests this topic extensively because it impacts performance, data freshness, model size, and licensing.
Import Mode (In-Memory)
Import mode is the default and most common storage mode. Data is copied from the source into the Power BI model's in-memory columnar engine (VertiPaq).
How Import Works
- Power BI connects to the data source
- Data is loaded and compressed into the VertiPaq engine
- The connection to the source is closed
- All queries are resolved from the in-memory cache
- Data must be refreshed to pick up changes at the source
Import Mode Advantages
- Fastest query performance — all data is in memory
- Full DAX functionality — all DAX functions are supported
- Offline capability — reports work without source connectivity
- Query folding — transformations can be pushed to the source during load
- Compression — VertiPaq typically achieves 10:1 compression
Import Mode Limitations
| Limitation | Details |
|---|---|
| Model size | 1 GB (Pro/PPU shared), 10 GB (Premium default), up to 400 GB (Premium large) |
| Data freshness | Only as current as the last refresh |
| Refresh limits | 8/day (Pro), 48/day (Premium) |
| Refresh duration | Maximum 2 hours (Pro), 5 hours (Premium) |
| Memory pressure | Large models consume significant capacity resources |
When to Use Import
- Datasets under 1 GB (compressed)
- Data that changes on a predictable schedule (daily, hourly)
- Reports requiring complex DAX calculations
- Scenarios where query performance is the top priority
- Data sources with slow query performance
DirectQuery Mode
DirectQuery sends queries to the underlying data source every time a user interacts with a report. No data is stored in the Power BI model.
How DirectQuery Works
- User interacts with a report visual
- Power BI translates the visual's data requirements into a source query (SQL, etc.)
- The query is sent to the data source
- Results are returned and rendered in the visual
- No data is cached (each interaction generates new queries)
DirectQuery Advantages
- Real-time data — always shows current data from the source
- No model size limits — data stays at the source
- No refresh needed — eliminates refresh scheduling and failures
- Suitable for large datasets — works with multi-terabyte sources
DirectQuery Limitations
| Limitation | Details |
|---|---|
| Performance | Depends entirely on source query speed |
| DAX restrictions | Some DAX functions not supported or perform poorly |
| Query limits | Maximum 1 million rows per query |
| Source load | Heavy report usage can overwhelm the source |
| Transformation limits | Limited Power Query transformations available |
| No calculated tables | Cannot create calculated tables with DirectQuery |
When to Use DirectQuery
- Data changes frequently and near-real-time visibility is required
- Datasets are too large to import (multi-terabyte)
- Corporate policies prevent data duplication
- The source database is well-optimized for analytical queries
- Row-level security must be enforced at the source level
Direct Lake Mode
Direct Lake is the newest storage mode, available exclusively with Microsoft Fabric (F or P SKUs). It reads data directly from Parquet/Delta files in OneLake.
How Direct Lake Works
- Data is stored as Parquet/Delta files in a Fabric Lakehouse or Warehouse
- Power BI reads the data directly from OneLake (no copy, no query translation)
- Data is loaded into memory on-demand, similar to Import
- If data exceeds available memory, the engine falls back to DirectQuery
- Data freshness is automatic when source files are updated
Direct Lake Advantages
- Near-Import performance without copying data
- Automatic data freshness — no scheduled refresh needed
- Large dataset support — handles much larger datasets than Import
- Reduced storage costs — data stays in OneLake (one copy)
- Full DAX support — same capabilities as Import mode
Direct Lake Limitations
| Limitation | Details |
|---|---|
| Fabric required | Only available with Fabric capacity |
| Data format | Must be Parquet/Delta in OneLake |
| Fallback behavior | Falls back to DirectQuery if memory limits are exceeded |
| Guardrails | Row count and column limits based on SKU size |
| New technology | Fewer community resources and best practices |
When to Use Direct Lake
- Organization uses Microsoft Fabric
- Data is already in a Fabric Lakehouse or Warehouse
- Need Import-like performance without refresh overhead
- Dataset is too large for Import but too demanding for DirectQuery
Composite Models
Composite models allow mixing Import and DirectQuery tables in a single model:
- Import small dimension tables for fast filtering
- Use DirectQuery for large fact tables that change frequently
- Create aggregation tables (imported) that speed up high-level queries
- DirectQuery tables handle detail-level drill-through
Dual Storage Mode
Tables set to Dual mode can function as either Import or DirectQuery depending on the query context:
- When joined with Import tables → acts as Import
- When joined with DirectQuery tables → acts as DirectQuery
- Automatically optimized by the engine
Decision Framework
| Criteria | Import | DirectQuery | Direct Lake |
|---|---|---|---|
| Data < 1 GB, daily refresh OK | Best | OK | OK |
| Data > 10 GB, real-time needed | Poor | Best | Best |
| Fabric environment, any size | OK | OK | Best |
| Slow source, complex DAX | Best | Poor | Good |
| Strict no-copy data policy | No | Best | Best |
On the Exam
The PL-300 frequently tests:
- Choosing the correct storage mode for a given scenario
- Understanding the performance implications of each mode
- Knowing the limitations of DirectQuery (DAX restrictions, no calculated tables)
- Recognizing when Direct Lake is the appropriate choice
- Understanding composite model architecture and dual storage mode
A company has a 500 GB data warehouse and needs reports that always show the latest data. They do NOT use Microsoft Fabric. Which storage mode is most appropriate?
Which storage mode falls back to DirectQuery when memory limits are exceeded?
In a composite model, which storage mode allows a table to behave as either Import or DirectQuery depending on the query context?