Direct Lake Fallback to Direct Query
Your Power BI report was instant yesterday. Today it is stuck loading and nobody knows why. You are on call. Work the incident yourself.
Work the Incident
Incident Resolved
| Root cause | Sales_Fact → Delta table exceeds guardrails |
| Failure mode | Direct Lake → Direct Query fallback |
| Trigger | Weekend batch load pushed file/row-group count over the guardrail |
| Detection | EVALUATE TABLETRAITS() — DirectLakeFallbackInfo |
| Resolution | OPTIMIZE silver.sales_fact VORDER, then VACUUM |
What To Monitor in Production
| Signal | Why It Matters |
|---|---|
| Parquet file count | Guardrail is 5,000 on F64 (1,000 on F2–F32, 10,000 on F512+) — rising count ahead of the line is the earliest warning |
| Row group count | Same 5,000 guardrail on F64 — fragmentation from frequent small writes, independent of raw row count |
| Direct Query operations | A spike against a model configured for Direct Lake means a table already fell back |
| TABLETRAITS() on a schedule | The exact, documented diagnostic — not a symptom, a confirmed cause |
What Is a Direct Lake Fallback to Direct Query?
A Direct Lake fallback is when Fabric switches a semantic model from Direct Lake to Direct Query. Per Microsoft’s documented conditions, a table stays in Direct Lake mode only if all of the following are true: no row-level security (RLS) or dynamic data masking (DDM) at the SQL analytics endpoint, no object-level security (OLS) at the SQL endpoint, no reference to an unmaterialized SQL view, the table within its Fabric SKU’s Parquet file, row group, and row count guardrails, and the table already framed. If any one fails, the default DirectLakeBehavior setting (Automatic) falls back silently. Capacity memory pressure can also force fallback. EVALUATE TABLETRAITS() is the documented way to confirm which one applies, via the DirectLakeFallbackInfo column.
F64, this incident’s capacity, allows 5,000 Parquet files, 5,000 row groups, and 1.5 billion rows per table before a guardrail is crossed — see the full Fabric capacity requirements table on Microsoft Learn.
| Fallback Cause | How To Fix It |
|---|---|
| Table isn’t framed | Refresh the semantic model to frame the tables |
| Table is based on a SQL view | Materialize the view as a Delta table |
| OLS defined at SQL endpoint | Move object-level security to the semantic model |
| RLS or DDM defined at SQL endpoint | Move row-level security to the semantic model |
| Delta table exceeds guardrails | Run OPTIMIZE and VACUUM; upgrade the SKU if still over |
| Capacity under memory pressure | Reduce concurrent workloads or upgrade the capacity SKU |
Source: Microsoft Learn — How Direct Lake works, sections Diagnose fallback and Fix common fallback causes.
Prevent This From Happening Again
Checklist
- Schedule OPTIMIZE right after every large batch load — not on a fixed weekly clock, immediately after the load that grows the table
- Run EVALUATE TABLETRAITS() on your riskiest models regularly — it is the precise, documented diagnostic, not a guess from dashboard symptoms. See Cross-workload table maintenance and optimization for V-Order and row group guidance.
- If compaction alone is not enough, consider the capacity SKU — Microsoft documents SKU increase as a valid option when a table still exceeds limits after optimization
Direct Lake Fallback to Direct Query: FAQ
Related Resources
Next Case · Monday
3am. Your F64 capacity is throttled, and finance is already awake.



