Resolving Direct Lake Row Limits in Fabric F32 Capacity
Short answer
A Create views to logically partition or filter the 500M row fact table, ensuring queries stay within the F32 Direct Lake 300M row limit and minimizing costs compared to scaling capacity.
Question
DW1 contains a single fact table that has grown from 200 million rows to 500 million rows during the past year.
You have Microsoft Power BI reports that are based on Direct Lake. The reports show year-over-year values.
Users report that the performance of some of the reports has degraded over time and some visuals show errors.
You need to resolve the performance issues. The solution must meet the following requirements:
• Provide the best query performance.
• Minimize operational costs.
Which should you do?
Key Takeaways
The trap is focusing on data type optimization (B) or capacity scaling (D); the real issue is the 300M row hard limit for Direct Lake on F-series, which requires logical partitioning via views.
Learn how to resolve Direct Lake performance errors and row limit violations in Microsoft Fabric F32 capacity by using views to optimize data access patterns.
Common mistake: Many users select Option D (Increase capacity) because it seems like a direct fix, but it violates the 'minimize costs' requirement. Others choose B (Modify data types), which helps storage but doesn't bypass the hard row count limit causing the Direct Lake failure.
Expert Analysis
The core constraint in this scenario is the F32 capacity combined with a Direct Lake semantic model. According to Microsoft Fabric documentation, F-series capacities (specifically F2 through F64) impose a hard limit of 300 million rows per table for Direct Lake mode. If a table exceeds this row count, the query engine cannot serve it via Direct Lake and typically falls back to DirectQuery or fails entirely, leading to the reported performance degradation and visual errors.
While comments suggest modifying data types (Option B) to improve efficiency, this does not resolve the fundamental architectural violation of the row limit. Changing an MD5 hash to a BIGINT reduces storage size but does not reduce the row count; the table remains at 500 million rows, which still exceeds the F32 Direct Lake threshold. Similarly, increasing capacity (Option D) would solve the problem, but the requirement to "minimize operational costs" makes scaling up expensive infrastructure less optimal than optimizing the schema if possible. However, since the row limit is a hard ceiling for F-series Direct Lake, simply changing data types won't fix the error.
The most effective way to resolve the performance issues and errors while keeping costs low on an F32 capacity is to reduce the number of rows processed per query. Creating views (Option A) allows you to partition or filter the data logically without moving it. By creating views that aggregate or filter data (e.g., by year, as mentioned in the context of "year-over-year values"), you can ensure that queries only access subsets of the data that fit within the memory and row limits of the F32 capacity. This avoids the need for expensive capacity upgrades (D) and works within the existing storage constraints. It provides the best query performance by reducing I/O and memory pressure, directly addressing the root cause of the Direct Lake fallback/errors.
Official Reference
This link opens the official vendor documentation in a new tab.
Exam Strategy
When facing performance issues in Fabric Direct Lake, always check the capacity tier's specific row limits first. For F-series, the 300M row limit is a critical bottleneck. If your data exceeds this, look for schema optimizations like views or partitions that keep query payloads under the limit before considering expensive capacity upgrades.
Frequently Asked Questions
Why doesn't changing the surrogate key data type fix the error?
Is increasing capacity the only solution for large tables?
Community Votes
50% of anonymous learners picked answer B. Votes are pick records left by other test-takers — they are not the verified answer.
Discussion 17 contributions
Compiled from public community threads and reader submissions, lightly edited for clarity. Handles and vote tallies are shown as recorded, and comments reflect the views of individual contributors.
From public community threads 17
-
PBridge 👍 7 Answered BChanging surrogate keys from MD5 (string) to integers improves query speed, storage efficiency, and reduces costs.
-
2bc006e 👍 6 Answered DD. https://learn.microsoft.com/en-us/fabric/fundamentals/direct-lake-overview#fabric-capacity-requirements '' For Direct Lake semantic models, Max Memory represents the upper memory resource limit for how much data can be paged in. For this reason, it's not a guardrail because exceeding it doesn't result in a fallback to DirectQuery mode; however, it can have a performance impact if the amount of data is large enough to cause excessive paging in and out of the model data from the OneLake data. ''
-
92ef42d 👍 5 Answered DD - Capacity. F32 is too low
-
kaushikcbs 👍 4 Answered BModify the surrogate keys to use a different data type Why? - MD5 hash surrogate keys are 128-bit values, which can be inefficient for large datasets. - Switching to a more efficient data type (such as BIGINT or INT) reduces storage and processing overhead, improving query performance. - Smaller data types are faster to process, leading to better indexing and query execution. Answer validated with ChatGPT
-
Rozamunde 👍 4 Answered DDuplicate of Question#5
Show 12 more comments
-
Acrious 👍 3 Answered BWhile adding capacity would possibly do this, minimizing costs pushes us to select B, as changing a string type to an INT type would improve performance. Will it be enough... no way to measure but it would be the first step I would take
-
ca_acc 👍 3 Answered DI dunno if this answer is correct within the exam. But it only can be: D. 300 Mio Row Lmitations in a warehouse at F32. Otherwise, we could split into to Views, to be within the Row Limits of 200 and 300 rows, for two different Years.
-
Rozamunde 👍 3 Answered Dhttps://learn.microsoft.com/en-us/fabric/fundamentals/direct-lake-overview#:~:text=model%20permissions.-,Fabric%20capacity%20requirements,-Direct%20Lake%20semantic Limitation of Direct Lake/F32 - Rows per table --> 300 millions
-
gretito_g 👍 3 Answered BModify the surrogate keys to use a different data type.
-
32950cb 👍 2 Answered BThe core issue is that MD5 hash surrogate keys are stored as strings (VARCHAR/CHAR). At 500 million rows in a fact table, string-based joins and lookups are significantly more expensive than integer-based ones. This is the root cause of both the performance degradation and potentially the Direct Lake fallback errors (which occur when data types or column cardinality exceed Direct Lake thresholds).
-
Bin_Hashim 👍 2Good point but another point DW1 contains a single fact table that has grown from 200 million rows to 500 million rows during the past year. F32 Capacity ** Tables in a Power BI semantic model using Direct Lake mode on an F32 capacity are limited to 300 million rows per table any comments from the Team
-
VenkataPhaniPavanKumar 👍 2 Answered DWe should increase the capacity. Check this explanation https://www.youtube.com/watch?v=LX3EJX-LIFY&list=PLO3dD0hSou5e4ErRvooMc-ifeotjAt06g&index=4
-
5d361b3 👍 2wont increasing the capacity increase cost ?
-
raweb 👍 2 Answered DNumber of rows.. > Capacity
-
nahida 👍 1 Answered BThe warehouse uses MD5 hash surrogate keys, and the fact table has grown to 500 million rows. Hash-based keys can consume more storage than numeric surrogate keys. Using a more efficient data type can reduce storage and memory requirements, potentially improving Direct Lake query performance while minimizing operational costs.
-
bcbc59b 👍 1Did you consider how much ETL cost will increase? Using and int key requires a join of fact and dimension tables to assign the keys while a hash does not.
-
EddEe 👍 1 Answered BMD5 Performance: Large, 32-character string keys can be less efficient for joins and storage compared to 8-byte integers.
Reader comments & corrections
No reader corrections yet — spotted an error or have a note? Share it below.