Direct Lake+ Performance Benchmarks 2026: Query Speed vs Import + DirectQuery
Direct Lake+ Performance Benchmarks 2026: Query Speed vs Import + DirectQuery
Direct Lake+ is Microsoft's answer to the Import-vs-DirectQuery trade-off. This benchmark study measures query performance across 5 workloads on Import, DirectQuery, and Direct Lake+ — plus optimization patterns that unlock 5-10x speedups on Direct Lake+ specifically.
Direct Lake+ is Microsoft's Build 2026 evolution of Direct Lake — the storage mode that reads Delta tables from OneLake without an Import step, delivering Import-mode query performance without the semantic model refresh window. This benchmark study measures Direct Lake+ query performance against Import and DirectQuery across 5 real-world workloads, then documents the optimization patterns that separate a fast Direct Lake+ model from a slow one.
Benchmark Environment
- Semantic model: 1.2B-row fact table, 8 dimension tables, 40 explicit measures, RLS on region dimension
- Capacity: Fabric F64, isolated (no competing workload)
- Storage: Delta tables in OneLake with V-ORDER enabled, weekly OPTIMIZE + Z-ORDER on join keys
- Client: Power BI Desktop 2026.07.03 → Power BI Service
- Metric: Median query time across 20 warm-cache runs (cold-cache times noted separately)
Workload 1: Simple aggregation with 1 dim filter
Query: sum of revenue filtered to `Region = "North America"`, grouped by `Product Category`.
| Storage mode | Cold cache | Warm cache | 95th pct warm |
|---|---|---|---|
| Import | 340ms | 45ms | 68ms |
| DirectQuery (SQL DW) | 890ms | 620ms | 1,100ms |
| Direct Lake+ | 210ms | 58ms | 85ms |
Direct Lake+ beats Import cold and matches Import warm. DirectQuery is 10x slower warm.
Workload 2: Time intelligence YTD/PYTD
Query: 6 measures with SAMEPERIODLASTYEAR, TOTALYTD, and difference-vs-prior calculations, grouped by month.
| Storage mode | Cold cache | Warm cache | 95th pct warm |
|---|---|---|---|
| Import | 480ms | 92ms | 130ms |
| DirectQuery | 1,650ms | 1,200ms | 2,100ms |
| Direct Lake+ | 340ms | 105ms | 160ms |
Direct Lake+ warm within 15% of Import. Cold materially faster (no re-hydration of large Import compressed columns).
Workload 3: High-cardinality drill-through (100k rows returned)
Query: table visual returning 100,000 line-item rows joined across 4 dim tables.
| Storage mode | Cold cache | Warm cache | 95th pct warm |
|---|---|---|---|
| Import | 1,850ms | 480ms | 720ms |
| DirectQuery | 3,400ms | 2,800ms | 4,500ms |
| Direct Lake+ | 1,240ms | 510ms | 780ms |
Direct Lake+ within 6% of Import warm, 33% faster cold. This is the classic "big drill-through" pattern that used to be forced onto DirectQuery for Import size limits — Direct Lake+ now handles it natively.
Workload 4: RLS-enforced query (5 concurrent users)
Same as workload 1, but with 5 concurrent users each hitting a different RLS region filter.
| Storage mode | Median across users | 95th pct across users |
|---|---|---|
| Import | 62ms | 110ms |
| DirectQuery | 720ms | 1,400ms |
| Direct Lake+ | 74ms | 130ms |
Direct Lake+ RLS overhead is 20% vs Import (Import cache is per-user, Direct Lake+ shares Delta metadata across users). Still 10x faster than DirectQuery.
Workload 5: Copilot Insights Agent question
Question: "What was our revenue growth by category in Q1 versus prior year?"
| Storage mode | Copilot response time | Underlying query CU |
|---|---|---|
| Import | 4.2s | 0.31 CU-sec |
| DirectQuery | 7.8s | 1.4 CU-sec |
| Direct Lake+ | 4.5s | 0.35 CU-sec |
Direct Lake+ within 7% of Import for Copilot Insights Agent. DirectQuery penalizes Copilot heavily because SQL round-trip time compounds LLM latency.
Aggregate Result
Direct Lake+ delivers 90-95% of Import performance across every workload, while eliminating the refresh window entirely. DirectQuery is 5-10x slower and disproportionately penalizes Copilot workloads.
Direct Lake+ Optimization Patterns (5-10x Speedups)
1. V-ORDER on write
Every Delta table backing a Direct Lake+ semantic model should have V-ORDER enabled. V-ORDER is Microsoft's proprietary Parquet variant that materially improves VertiPaq-style column scanning. Enable via table properties: `ALTER TABLE fact_sales SET TBLPROPERTIES (delta.parquet.compression = 'SNAPPY', delta.autoOptimize.optimizeWrite = true, delta.autoOptimize.autoCompact = true);`
Typical impact: 40-60% query time reduction on aggregate scans.
2. Weekly OPTIMIZE + Z-ORDER on join keys
Direct Lake+ query performance degrades as small Parquet files accumulate. Schedule weekly:
```sql OPTIMIZE fact_sales ZORDER BY (customer_key, product_key, date_key); ```
Reduces file count 10-100x, groups related rows in same files. Typical impact: 30-50% query time reduction on joins.
3. Star schema with narrow dim tables
Direct Lake+ loads dimension tables into memory more aggressively than fact tables. Keep dims under 100k rows where possible; snowflake if a dim exceeds 10M rows. Wide dim tables (100+ columns) load slowly on first-access; split into narrow "core" and "extended" dims and use composite dim relationships.
4. Aggregation tables for high-cardinality drills
For drill-through queries returning 10k+ rows, add a Delta aggregation table pre-summarized at the drill grain and add `Aggregation Storage Mode: Import` to the semantic model. Direct Lake+ automatically routes coarse queries to the aggregation and fine queries to the base fact. Typical impact: 5-10x speedup on drill workloads.
5. Filter push-down via `EARLIEREST` and `REMOVEFILTERS` discipline
DAX iterators that reference `EARLIER` or `EARLIEREST` are formula-engine bottlenecks in every storage mode; more so in Direct Lake+ because there is no Import cache to mask them. Refactor iterator-heavy measures to use variables and set operations.
6. Materialize expensive DAX to calculated columns
If a measure requires row-level context transitions repeatedly, materialize the underlying row logic as a Delta table calculated column (via Spark notebook writing to the source Delta) instead of a DAX calculated column. Direct Lake+ scans the materialized column at storage-engine speed; DAX calculated columns are formula-engine only.
7. Semantic Model Cache for repeated queries
Enable Semantic Model Cache (Build 2026 GA) at workspace level. Direct Lake+ query cache hits return in under 50ms regardless of underlying data size. Typical dashboard scenarios where users repeatedly view the same page benefit heavily.
When NOT to Use Direct Lake+
Direct Lake+ is not the right choice for:
- Sub-100k-row semantic models — Import loads in 100ms and eliminates the Delta layer overhead
- Semantic models that require Live Q&A on real-time streaming data — use DirectQuery against Eventhouse instead
- Semantic models with heavy calculated columns that cannot be materialized to source Delta — Import wins for pure formula-engine workloads
- Composite scenarios where Direct Lake+ is only 20% of the model — Import + limited DirectQuery is simpler to reason about
Related Guides
- Direct Lake+ vs Import Mode: 2026 Decision Framework
- Fabric Lakehouse vs Warehouse: 2026 Decision Framework
- Fabric SQL Database vs Azure SQL Database: 2026 Decision Tree
- Azure Synapse Analytics + Power BI Integration
- Why Dashboard Painters Fail in Enterprise Power BI
- DAX Optimization Consulting
- Microsoft Fabric Consulting Services
Ready to benchmark your specific workload on Direct Lake+? Book a 30-minute performance review and we will model your existing semantic model against Direct Lake+ speedups.
Frequently Asked Questions
How fast is Direct Lake+ vs Import mode?
Direct Lake+ delivers 90-95% of Import mode query performance across every workload we benchmarked in 2026 — simple aggregations, time intelligence, high-cardinality drill-through, RLS-enforced queries, and Copilot Insights Agent questions. Direct Lake+ eliminates the refresh window entirely since it reads Delta tables directly from OneLake without an Import step. Cold-cache queries are often faster on Direct Lake+ than Import because Import has to re-hydrate large compressed columns.
Is Direct Lake+ faster than DirectQuery?
Yes — Direct Lake+ is 5-10x faster than DirectQuery in real benchmarks. On a simple aggregation query, Direct Lake+ warm-cache 58ms vs DirectQuery 620ms. On time intelligence, Direct Lake+ 105ms vs DirectQuery 1,200ms. On high-cardinality drill-through, Direct Lake+ 510ms vs DirectQuery 2,800ms. DirectQuery also penalizes Copilot workloads disproportionately because SQL round-trip time compounds LLM latency. Direct Lake+ is the recommended default for new Fabric semantic models.
How do I optimize Direct Lake+ performance?
Seven patterns unlock 5-10x speedups on Direct Lake+: (1) enable V-ORDER on every Delta table backing the semantic model; (2) schedule weekly OPTIMIZE + Z-ORDER on join keys; (3) use star schema with narrow dim tables under 100k rows; (4) add Delta aggregation tables for drill-through queries returning 10k+ rows; (5) refactor iterator-heavy DAX to avoid EARLIER/EARLIEREST; (6) materialize expensive row-level DAX to Delta calculated columns via Spark notebooks; (7) enable Semantic Model Cache at workspace level (Build 2026 GA).
What is Direct Lake+ mode in Power BI?
Direct Lake+ is Microsoft's Build 2026 evolution of Direct Lake — a semantic model storage mode that reads Delta tables directly from OneLake without an Import step, delivering Import-mode query performance without the refresh window. Direct Lake+ adds support for calculated tables, calculated columns, DAX transformations at query time, and composite storage modes with mixed Import + Direct Lake+ semantic models. Requires Fabric F-SKU capacity and Delta-format source data.
When should I NOT use Direct Lake+?
Direct Lake+ is not the right choice for: (1) sub-100k-row semantic models where Import loads in 100ms and eliminates the Delta layer overhead; (2) semantic models requiring live Q&A on real-time streaming data (use DirectQuery against Fabric Eventhouse instead); (3) semantic models with heavy calculated columns that cannot be materialized to source Delta (Import wins for pure formula-engine workloads); (4) composite scenarios where Direct Lake+ would only cover 20% of the model — Import plus limited DirectQuery is simpler to reason about.
Does Direct Lake+ work with row-level security?
Yes — Direct Lake+ fully supports row-level security (RLS) with a modest overhead versus Import mode. In our benchmarks with 5 concurrent users each hitting a different RLS filter, Direct Lake+ was 74ms median vs Import 62ms median — approximately 20% overhead. This is because Import cache is per-user while Direct Lake+ shares Delta metadata across users. Still 10x faster than DirectQuery in the same RLS scenario. RLS DAX filter expressions work identically across storage modes.