

Direct Lake is a Power BI semantic model storage mode in Microsoft Fabric. It loads only the columns a query needs directly from Delta tables in OneLake into memory, then processes them with the same VertiPaq engine that powers Import mode. The result is Import-like query speed without maintaining a full imported copy of your data, and without the latency of DirectQuery.
For years, analytics teams have been forced to choose between two imperfect options: Import mode, which is fast but requires copying and refreshing entire datasets, or DirectQuery, which avoids duplication but adds query latency and leans heavily on the source system. Direct Lake was designed to close that gap. This guide explains how it actually works, when to use it, how it compares to Import and DirectQuery, and how to design for performance in production.
Direct Lake is a table storage mode for Power BI semantic models, available only in Microsoft Fabric. It sits alongside the two long-established options , Import and DirectQuery , as a third choice that blends the strengths of both.
Here is what Direct Lake is not, because this is where most confusion begins:
In plain terms: you prepare your data as Delta tables in OneLake, and Direct Lake reads the columns it needs, on demand, into memory for fast interactive reporting.
Direct Lake's behavior comes down to four core concepts: column loading (transcoding), framing, automatic updates, and DirectQuery fallback. Understanding these four is the difference between a model that flies and one that mysteriously slows down.
Delta Tables in OneLake
Every Direct Lake model reads from Delta tables stored in OneLake. The underlying storage for a Delta table is one or more Parquet files, which organize data by column rather than by row. This columnar layout is exactly why Direct Lake can load a small number of columns quickly instead of scanning entire rows.
Column Loading (Transcoding)
Direct Lake loads data from OneLake only when a query requests a column for the first time. This on-demand process is called transcoding.
When the model receives a DAX (or MDX) query, it first works out which columns are actually needed , the columns used directly, plus those required by relationships and measures. Typically that is a small fraction of the columns defined in the model. It then checks which of those are already in memory and loads only the missing ones from OneLake. Once loaded, a column stays resident in memory, so future queries that use only resident columns don't trigger any new loading.
This is why the first query against a "cold" model can feel slower , you're paying for the initial warm-up , while subsequent queries against warm columns perform like Import mode.
Framing and Data Freshness
A refresh in Direct Lake is fundamentally different from an Import refresh. Import mode copies the entire dataset into a cached in-memory copy. A Direct Lake refresh, by contrast, copies only metadata , a low-cost operation known as framing that can complete in seconds.
Framing analyzes the metadata of the latest version of the Delta tables and updates the model's references to point to the newest Parquet files in OneLake. It does not re-copy the data. This is what gives Direct Lake near-real-time freshness without the cost of a full refresh cycle.
Column Eviction and Memory Management
A resident column does not stay in memory forever. It can be evicted when:
This is why capacity sizing and query patterns matter so much , an under-provisioned capacity evicts columns more aggressively, forcing repeated cold loads.
DirectQuery Fallback
Under certain conditions, a Direct Lake on SQL model can seamlessly switch a query to DirectQuery , retrieving data directly from the SQL analytics endpoint of the lakehouse or warehouse. This is called fallback, and while it keeps reports working, it typically results in slower performance. (Direct Lake on OneLake does not support fallback , more on that distinction next.)
This is the single most important update to understand, because Direct Lake now comes in two flavors. Both are still Direct Lake storage mode , VertiPaq loads column data on demand from Delta tables in OneLake , but they differ in how they discover tables, check permissions, and handle fallback.
Choose Direct Lake on OneLake when you need to combine tables from multiple lakehouses or workspaces into one model, you want OneLake security, and you want to guarantee you stay on the fast in-memory path.
Choose Direct Lake on SQL when you depend on SQL analytics endpoint security, you reference SQL views, or you want DirectQuery fallback as a safety net for unsupported scenarios.
Direct Lake and Import queries are both processed by VertiPaq, so they deliver comparable interactive performance , but Direct Lake avoids the overhead of copying and refreshing the entire data volume. And because only the columns needed to answer a query are loaded, the analyzed data volume can exceed the capacity's maximum memory limit, which is impossible with Import mode.
Direct Lake is ideal when:
Direct Lake is less suitable when your data isn't in Delta table format, when you need extremely complex modeling features not yet supported, or when a small dataset would run perfectly well , and more simply , in Import mode.
A typical enterprise flow looks like this:
Source systems → Fabric pipelines / Dataflows / Spark → OneLake Delta tables (gold layer) → Direct Lake semantic model → Power BI reports
The critical shift for architects: performance now lives upstream. With Import mode, refresh settings dominated performance tuning. With Direct Lake, the biggest levers are Delta table design, capacity sizing, and storage optimization in OneLake. Get the data layer right and the reporting layer takes care of itself.
Security is where the two flavors diverge most sharply.
Access is verified against the effective identity, and supports workspace roles, item permissions, and OneLake security roles depending on your configuration.
Rather than generic disadvantages, here are the real architectural factors to plan for:
Direct Lake shifts the hard work upstream , into architecture, capacity planning, and storage design. That's exactly where a specialist partner earns its keep. WaferWire helps enterprises:
If you're weighing Import vs Direct Lake , or fighting unexpected fallback , our team can help you design an architecture that stays on the fast path.



Direct Lake is a Power BI semantic model storage mode in Microsoft Fabric. It loads only the columns a query needs directly from Delta tables in OneLake into memory, then processes them with the same VertiPaq engine that powers Import mode. The result is Import-like query speed without maintaining a full imported copy of your data, and without the latency of DirectQuery.
For years, analytics teams have been forced to choose between two imperfect options: Import mode, which is fast but requires copying and refreshing entire datasets, or DirectQuery, which avoids duplication but adds query latency and leans heavily on the source system. Direct Lake was designed to close that gap. This guide explains how it actually works, when to use it, how it compares to Import and DirectQuery, and how to design for performance in production.
Direct Lake is a table storage mode for Power BI semantic models, available only in Microsoft Fabric. It sits alongside the two long-established options , Import and DirectQuery , as a third choice that blends the strengths of both.
Here is what Direct Lake is not, because this is where most confusion begins:
In plain terms: you prepare your data as Delta tables in OneLake, and Direct Lake reads the columns it needs, on demand, into memory for fast interactive reporting.
Direct Lake's behavior comes down to four core concepts: column loading (transcoding), framing, automatic updates, and DirectQuery fallback. Understanding these four is the difference between a model that flies and one that mysteriously slows down.
Delta Tables in OneLake
Every Direct Lake model reads from Delta tables stored in OneLake. The underlying storage for a Delta table is one or more Parquet files, which organize data by column rather than by row. This columnar layout is exactly why Direct Lake can load a small number of columns quickly instead of scanning entire rows.
Column Loading (Transcoding)
Direct Lake loads data from OneLake only when a query requests a column for the first time. This on-demand process is called transcoding.
When the model receives a DAX (or MDX) query, it first works out which columns are actually needed , the columns used directly, plus those required by relationships and measures. Typically that is a small fraction of the columns defined in the model. It then checks which of those are already in memory and loads only the missing ones from OneLake. Once loaded, a column stays resident in memory, so future queries that use only resident columns don't trigger any new loading.
This is why the first query against a "cold" model can feel slower , you're paying for the initial warm-up , while subsequent queries against warm columns perform like Import mode.
Framing and Data Freshness
A refresh in Direct Lake is fundamentally different from an Import refresh. Import mode copies the entire dataset into a cached in-memory copy. A Direct Lake refresh, by contrast, copies only metadata , a low-cost operation known as framing that can complete in seconds.
Framing analyzes the metadata of the latest version of the Delta tables and updates the model's references to point to the newest Parquet files in OneLake. It does not re-copy the data. This is what gives Direct Lake near-real-time freshness without the cost of a full refresh cycle.
Column Eviction and Memory Management
A resident column does not stay in memory forever. It can be evicted when:
This is why capacity sizing and query patterns matter so much , an under-provisioned capacity evicts columns more aggressively, forcing repeated cold loads.
DirectQuery Fallback
Under certain conditions, a Direct Lake on SQL model can seamlessly switch a query to DirectQuery , retrieving data directly from the SQL analytics endpoint of the lakehouse or warehouse. This is called fallback, and while it keeps reports working, it typically results in slower performance. (Direct Lake on OneLake does not support fallback , more on that distinction next.)
This is the single most important update to understand, because Direct Lake now comes in two flavors. Both are still Direct Lake storage mode , VertiPaq loads column data on demand from Delta tables in OneLake , but they differ in how they discover tables, check permissions, and handle fallback.
Choose Direct Lake on OneLake when you need to combine tables from multiple lakehouses or workspaces into one model, you want OneLake security, and you want to guarantee you stay on the fast in-memory path.
Choose Direct Lake on SQL when you depend on SQL analytics endpoint security, you reference SQL views, or you want DirectQuery fallback as a safety net for unsupported scenarios.
Direct Lake and Import queries are both processed by VertiPaq, so they deliver comparable interactive performance , but Direct Lake avoids the overhead of copying and refreshing the entire data volume. And because only the columns needed to answer a query are loaded, the analyzed data volume can exceed the capacity's maximum memory limit, which is impossible with Import mode.
Direct Lake is ideal when:
Direct Lake is less suitable when your data isn't in Delta table format, when you need extremely complex modeling features not yet supported, or when a small dataset would run perfectly well , and more simply , in Import mode.
A typical enterprise flow looks like this:
Source systems → Fabric pipelines / Dataflows / Spark → OneLake Delta tables (gold layer) → Direct Lake semantic model → Power BI reports
The critical shift for architects: performance now lives upstream. With Import mode, refresh settings dominated performance tuning. With Direct Lake, the biggest levers are Delta table design, capacity sizing, and storage optimization in OneLake. Get the data layer right and the reporting layer takes care of itself.
Security is where the two flavors diverge most sharply.
Access is verified against the effective identity, and supports workspace roles, item permissions, and OneLake security roles depending on your configuration.
Rather than generic disadvantages, here are the real architectural factors to plan for:
Direct Lake shifts the hard work upstream , into architecture, capacity planning, and storage design. That's exactly where a specialist partner earns its keep. WaferWire helps enterprises:
If you're weighing Import vs Direct Lake , or fighting unexpected fallback , our team can help you design an architecture that stays on the fast path.
1. What is Direct Lake in Microsoft Fabric?
Direct Lake is a Power BI semantic model storage mode in Microsoft Fabric. It loads only the columns a query needs from Delta tables in OneLake into memory and processes them with the VertiPaq engine, delivering Import-like performance without maintaining a full imported copy of the data
2. Is Direct Lake the same as a data lake?
No. A data lake is where data is stored; Direct Lake is a semantic model storage mode that reads from Delta tables in OneLake. They operate at different layers of the architecture.
3. What is the difference between Direct Lake and Delta Lake?
Delta Lake is the open table format (backed by Parquet files) used to store your data. Direct Lake is the mechanism that reads those Delta tables into a Power BI semantic model.
4. How does modernization improve AI ROI?
DirectQuery federates each query to the underlying source, which adds latency. Direct Lake loads columns into memory and serves them through VertiPaq, so it typically outperforms DirectQuery for interactive reporting.
5. Is Direct Lake faster than Import mode?
Once columns are warm in memory, Direct Lake delivers performance comparable to Import , because both use VertiPaq. Import can be faster for a fully cached small model, but Direct Lake avoids full-refresh overhead and can analyze data larger than available memory.
6. Does Direct Lake require a refresh?
Not in the traditional sense. Instead of copying data, Direct Lake performs framing , a low-cost metadata operation that updates references to the latest Delta files in OneLake, usually completing in seconds.
7. What is framing in Direct Lake?
Framing is the Direct Lake refresh operation. It analyzes the metadata of the latest Delta table version and updates the model's references to the newest Parquet files, without re-copying the data.
8. What is transcoding in Direct Lake?
Transcoding is the on-demand process of loading the columns a query needs from Delta tables in OneLake into memory the first time they're requested. Loaded columns stay resident for subsequent queries.
9. What causes DirectQuery fallback?
On Direct Lake on SQL, fallback can occur when the model references SQL views, when RLS/OLS is defined at the SQL endpoint, when guardrail limits are exceeded, or when unsupported constructs are used. Direct Lake on OneLake does not support fallback and errors instead.
10. What is the difference between Direct Lake on OneLake and Direct Lake on SQL?
Direct Lake on OneLake reads Delta tables directly, supports multiple sources, uses OneLake security, and never falls back to DirectQuery. Direct Lake on SQL uses the SQL analytics endpoint for discovery and permissions, is tied to a single source, and can fall back to DirectQuery.
11. Does Direct Lake support row-level security?
Yes. The recommended approach is dynamic RLS defined in the semantic model using DAX, which runs within VertiPaq. RLS defined at the SQL endpoint triggers DirectQuery fallback and loses the performance benefit.
12. Can Direct Lake semantic models be edited in Power BI Desktop?
Yes. You can create and live-edit Direct Lake semantic models in Power BI Desktop while the data remains in OneLake, with support for version history, Git integration, and deployment pipelines.
13. When should an organization not use Direct Lake?
When the data isn't in Delta table format, when a small dataset would run perfectly well in Import mode, or when required modeling features aren't yet supported by Direct Lake.