Direct Lake+ Performance Benchmarks 2026: Query Speed vs Import + DirectQuery

Microsoft Fabric
powerbiconsulting.com
Microsoft Fabric16 min read

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.

By the Power BI Consulting Team

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 modeCold cacheWarm cache95th pct warm
Import340ms45ms68ms
DirectQuery (SQL DW)890ms620ms1,100ms
Direct Lake+210ms58ms85ms

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 modeCold cacheWarm cache95th pct warm
Import480ms92ms130ms
DirectQuery1,650ms1,200ms2,100ms
Direct Lake+340ms105ms160ms

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 modeCold cacheWarm cache95th pct warm
Import1,850ms480ms720ms
DirectQuery3,400ms2,800ms4,500ms
Direct Lake+1,240ms510ms780ms

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 modeMedian across users95th pct across users
Import62ms110ms
DirectQuery720ms1,400ms
Direct Lake+74ms130ms

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 modeCopilot response timeUnderlying query CU
Import4.2s0.31 CU-sec
DirectQuery7.8s1.4 CU-sec
Direct Lake+4.5s0.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

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.

Direct LakeFabricPerformanceBenchmarksSemantic Model

Industry Solutions

See how we apply these solutions across industries:

Need Help With Power BI?

Our experts can help you implement the solutions discussed in this article.

Ready to Transform Your Data Strategy?

Get a free consultation to discuss how Power BI and Microsoft Fabric can drive insights and growth for your organization.