This time we’re going bigger than ever. Fabric, Power BI, SQL, AI and more. We're covering it all. You won't want to miss it.
Learn moreDid you hear? There's a new SQL AI Developer certification (DP-800). Start preparing now and be one of the first to get certified. Register now
Hey Fabric Community! I'm working on a challenging Power BI performance optimization case and would love to get your thoughts and ideas. Here's what we're dealing with:
The Situation:
Source Table Characteristics:
-- Current Synapse table structure
- 127 columns total- Many nvarchar(1000) fields that could be right-sized- Key fields: sales_order_no, product_sku, created_on, ship_to_cot- Date range: 104-week rolling window (created_on >= DATEADD(WK, -104, GETDATE()))
Current Power BI Setup:
Key Constraints:
Migration to Fabric Options:
Have you tackled similar large-scale semantic model optimizations?
Any specific Fabric features or approaches you'd recommend?
War stories or lessons learned from similar migrations?
Performance optimization techniques that worked well for your use cases?
Looking forward to hearing your thoughts, ideas, and experiences! Every suggestion helps as we plan our optimization strategy.
Solved! Go to Solution.
Hi @Koraganti77 ,
Thank you for reaching out to Microsoft Community.
Inorder to reduce the 3.5-hour refresh time of your Power BI semantic model, try migrating to Microsoft Fabric Lakehouse with Delta tables and Direct Lake mode might be effective strategy. Direct Lake leverages the VertiPaq engine, offering import-mode-like performance while avoiding full data duplication. It loads columnar data directly from Parquet-based Delta tables in OneLake, enabling high-speed access with minimal overhead. This approach far outperforms DirectQuery, which federates queries back to Synapse and performs poorly with complex M logic.
Incremental refresh for semantic models in Power BI - Power BI | Microsoft Learn
Semantic Model Refresh in Fabric: Beyond the Defaults
Direct Lake overview - Microsoft Fabric | Microsoft Learn
As a first step, you should use Dataflows Gen2 or Fabric pipelines to load your Synapse data into a Lakehouse Delta table. During this process, implement schema optimization by trimming oversized nvarchar(1000) fields, pruning unused columns, and flattening any nested structures. These changes significantly reduce memory usage and improve compression, especially by lowering column cardinality. Fabric tools like Power BI usage analytics can help identify which columns are actually needed.
To preserve your critical M Query logic, replicate it upstream using Dataflows Gen2 or Spark notebooks. This allows complex business rules such as CASE statements and transformations to be precomputed before the data hits the semantic model. If you're using semantic link, notebooks can also be a powerful tool for embedding complex logic into Delta tables while maintaining flexibility.
Once the Delta tables are structured, build your Power BI semantic model in Direct Lake mode, mapping the tables via shortcuts. While Direct Lake does not currently support calculated columns or tables that reference Direct Lake sources, these transformations should be handled upstream or refactored into DAX measures within the model. For complex logic, DAX VAR statements can improve readability and performance.
For incremental refresh, define RangeStart and RangeEnd parameters on a reliable created_on column and enable query folding to push the filter logic back to the Lakehouse. To avoid refreshing full partitions unnecessarily, implement change detection based on metadata columns like ModifiedDateTime. This will help maintain efficiency during weekly refreshes. If you need near real-time freshness, consider using Hybrid Tables for recent data.
To ensure smooth operation, take advantage of Fabric's Semantic Model Refresh Pipelines to manage refresh parallelism and retries. Monitor overall system performance using the Fabric Metrics App, which provides insight into refresh duration, query execution, memory usage, and dataset size. Tools like Analyze My Refresh can help pinpoint bottlenecks and identify optimization opportunities.
By migrating to Delta tables in Fabric Lakehouse, optimizing your schema, pushing business logic upstream, and fully utilizing Direct Lake with incremental refresh and change detection, you can expect to bring your Power BI refresh time well below the 30-minute threshold possibly eliminating refresh time altogether. This architecture not only preserves data accuracy and business rules but also offers scalable, maintainable performance moving forward.
Best Regards,
Chaithra E.
Hi @Koraganti77 ,
Thank you for reaching out to Microsoft Community.
Inorder to reduce the 3.5-hour refresh time of your Power BI semantic model, try migrating to Microsoft Fabric Lakehouse with Delta tables and Direct Lake mode might be effective strategy. Direct Lake leverages the VertiPaq engine, offering import-mode-like performance while avoiding full data duplication. It loads columnar data directly from Parquet-based Delta tables in OneLake, enabling high-speed access with minimal overhead. This approach far outperforms DirectQuery, which federates queries back to Synapse and performs poorly with complex M logic.
Incremental refresh for semantic models in Power BI - Power BI | Microsoft Learn
Semantic Model Refresh in Fabric: Beyond the Defaults
Direct Lake overview - Microsoft Fabric | Microsoft Learn
As a first step, you should use Dataflows Gen2 or Fabric pipelines to load your Synapse data into a Lakehouse Delta table. During this process, implement schema optimization by trimming oversized nvarchar(1000) fields, pruning unused columns, and flattening any nested structures. These changes significantly reduce memory usage and improve compression, especially by lowering column cardinality. Fabric tools like Power BI usage analytics can help identify which columns are actually needed.
To preserve your critical M Query logic, replicate it upstream using Dataflows Gen2 or Spark notebooks. This allows complex business rules such as CASE statements and transformations to be precomputed before the data hits the semantic model. If you're using semantic link, notebooks can also be a powerful tool for embedding complex logic into Delta tables while maintaining flexibility.
Once the Delta tables are structured, build your Power BI semantic model in Direct Lake mode, mapping the tables via shortcuts. While Direct Lake does not currently support calculated columns or tables that reference Direct Lake sources, these transformations should be handled upstream or refactored into DAX measures within the model. For complex logic, DAX VAR statements can improve readability and performance.
For incremental refresh, define RangeStart and RangeEnd parameters on a reliable created_on column and enable query folding to push the filter logic back to the Lakehouse. To avoid refreshing full partitions unnecessarily, implement change detection based on metadata columns like ModifiedDateTime. This will help maintain efficiency during weekly refreshes. If you need near real-time freshness, consider using Hybrid Tables for recent data.
To ensure smooth operation, take advantage of Fabric's Semantic Model Refresh Pipelines to manage refresh parallelism and retries. Monitor overall system performance using the Fabric Metrics App, which provides insight into refresh duration, query execution, memory usage, and dataset size. Tools like Analyze My Refresh can help pinpoint bottlenecks and identify optimization opportunities.
By migrating to Delta tables in Fabric Lakehouse, optimizing your schema, pushing business logic upstream, and fully utilizing Direct Lake with incremental refresh and change detection, you can expect to bring your Power BI refresh time well below the 30-minute threshold possibly eliminating refresh time altogether. This architecture not only preserves data accuracy and business rules but also offers scalable, maintainable performance moving forward.
Best Regards,
Chaithra E.
@v-echaithra , Thank you for the excellent Fabric Lakehouse + Direct Lake recommendations! Your approach is absolutely the gold standard for maximum performance and future-ready analytics. We're implementing a dual-track strategy based on your insights: Phase 1 uses Fabric Warehouse + DirectQuery to achieve immediate wins (eliminating our 3.5-hour refresh completely) while preserving our team's existing T-SQL/M Query skills for a 6-week delivery. This allows us to demonstrate Fabric value quickly with minimal cultural disruption. Phase 2 will then migrate to your recommended Lakehouse + Spark notebooks + Direct Lake architecture as part of our enterprise migration from Synapse Analytics to Fabric engagement. This phased approach lets us achieve 70-80% performance improvement immediately while building toward the 95%+ optimization your Lakehouse solution provides. Your Delta table optimization and upstream logic processing recommendations will be invaluable for our long-term implementation. Thanks for sharing such comprehensive Fabric-native best practices.
Once again appreciate your time and support to the community.
Best
Srikanth
Direct Lake will not speed up reporting performance, but will help with developing the semantic model and reduce refresh because data is not imported into the model. I feel over time, this performance for reporting will improve as Microsoft invests in the Delta Table and Direct Lake approach.
Check out the April 2026 Fabric update to learn about new features.
Sign up to receive a private message when registration opens and key events begin.
| User | Count |
|---|---|
| 15 | |
| 11 | |
| 6 | |
| 6 | |
| 5 |
| User | Count |
|---|---|
| 33 | |
| 21 | |
| 13 | |
| 10 | |
| 9 |