Get certified for free when you join Fabric Data Days 2026 and dive into Fabric, Power BI, SQL, AI, and other essential data skills.
Join nowData Days is here! Join us now for 60+ days of learning, challenges, and connection. Learn more
Hello,
We are currently in the phase of implementing Microsoft Fabric and are evaluating whether to use Fabric Warehouse vs Lakehouse for our dimensional model.
We completed a POC using Warehouse, where we successfully implemented a metadata-driven ETL framework:
Pattern used:
Landing Zone (Lakehouse) → Conformed Views (Warehouse) → Stored Procedures (Warehouse)This approach has worked well for loading both dimensions and facts in a scalable and orchestrated way.
We are now exploring a similar approach using Lakehouse for storing dimensions and facts, but are running into some design questions:
We are trying to design a robust, scalable, metadata-driven orchestration framework that can support:
Solved! Go to Solution.
Hi @Ira_27 ,
Thanks for reaching out to Microsoft Fabric Community.
To address your core concern first: your existing Warehouse pattern is solid and you don't need to abandon it. The recommended approach for enterprise-scale dimensional modeling in Fabric is actually a hybrid -- Lakehouse for ingestion and transformation, Warehouse for the serving layer. Both share OneLake under the hood and use Delta format, so the interoperability is seamless. You can shortcut Silver Lakehouse tables directly into the Warehouse and keep all your existing stored procedures and conformed views exactly as they are. Microsoft's own FastTrack team published a metadata-driven pipeline pattern that follows this same structure, worth going through in detail: Metadata Driven Pipelines for Microsoft Fabric | Microsoft Community Hub
On the notebook design question -- with 100+ dimensions and 30 facts, creating one notebook per entity will become a maintenance problem quickly. The right approach would be a small set of generic, parameterized notebooks (one for SCD1/2 dim loads, one for fact loads, one for silver materialization) that read all their configuration from your control table at runtime. The notebook is the engine; the metadata row is the config. This is covered well in the official decision guide here: Microsoft Fabric Decision Guide: Choose between Warehouse and Lakehouse - Microsoft Fabric | Microso...
For transformations and joins in Lakehouse -- since the SQL analytics endpoint is read-only, you can't replicate Warehouse views directly. The cleanest workaround is materializing Silver as Delta tables via Spark notebooks, then either shortcutting those into the Warehouse for your conformed view logic, or using Spark SQL managed views within the Lakehouse SQL endpoint for lighter joins. The shortcut approach is particularly useful because it means zero data movement and your Warehouse views can point straight at Lakehouse data.
For dependency management and parallel execution, look into notebookutils.notebook.runMultiple() -- it lets you define a DAG directly in a notebook, specifying which notebooks run in parallel and which wait on others. This is more reliable than trying to parallelize notebook calls inside a Pipeline ForEach, which runs into Spark session concurrency limits.
NotebookUtils notebook run and orchestration for Fabric - Microsoft Fabric | Microsoft Learn
Also worth noting: pipeline variable libraries are now GA in Fabric and were specifically designed to support metadata-driven pipeline patterns -- New Innovations for Fabric Data Factory Orchestrat... - Microsoft Fabric Community
For lineage and debugging, logging execution details (rows read/inserted/updated, pipeline run ID, status) to a dedicated control Lakehouse table from within each notebook gives you a clean audit trail that works well with Fabric's built-in monitoring.
Hope this helps. Please reach out for further assistance.
Thank you.
Hi @Ira_27 ,
Thanks for reaching out to Microsoft Fabric Community.
To address your core concern first: your existing Warehouse pattern is solid and you don't need to abandon it. The recommended approach for enterprise-scale dimensional modeling in Fabric is actually a hybrid -- Lakehouse for ingestion and transformation, Warehouse for the serving layer. Both share OneLake under the hood and use Delta format, so the interoperability is seamless. You can shortcut Silver Lakehouse tables directly into the Warehouse and keep all your existing stored procedures and conformed views exactly as they are. Microsoft's own FastTrack team published a metadata-driven pipeline pattern that follows this same structure, worth going through in detail: Metadata Driven Pipelines for Microsoft Fabric | Microsoft Community Hub
On the notebook design question -- with 100+ dimensions and 30 facts, creating one notebook per entity will become a maintenance problem quickly. The right approach would be a small set of generic, parameterized notebooks (one for SCD1/2 dim loads, one for fact loads, one for silver materialization) that read all their configuration from your control table at runtime. The notebook is the engine; the metadata row is the config. This is covered well in the official decision guide here: Microsoft Fabric Decision Guide: Choose between Warehouse and Lakehouse - Microsoft Fabric | Microso...
For transformations and joins in Lakehouse -- since the SQL analytics endpoint is read-only, you can't replicate Warehouse views directly. The cleanest workaround is materializing Silver as Delta tables via Spark notebooks, then either shortcutting those into the Warehouse for your conformed view logic, or using Spark SQL managed views within the Lakehouse SQL endpoint for lighter joins. The shortcut approach is particularly useful because it means zero data movement and your Warehouse views can point straight at Lakehouse data.
For dependency management and parallel execution, look into notebookutils.notebook.runMultiple() -- it lets you define a DAG directly in a notebook, specifying which notebooks run in parallel and which wait on others. This is more reliable than trying to parallelize notebook calls inside a Pipeline ForEach, which runs into Spark session concurrency limits.
NotebookUtils notebook run and orchestration for Fabric - Microsoft Fabric | Microsoft Learn
Also worth noting: pipeline variable libraries are now GA in Fabric and were specifically designed to support metadata-driven pipeline patterns -- New Innovations for Fabric Data Factory Orchestrat... - Microsoft Fabric Community
For lineage and debugging, logging execution details (rows read/inserted/updated, pipeline run ID, status) to a dedicated control Lakehouse table from within each notebook gives you a clean audit trail that works well with Fabric's built-in monitoring.
Hope this helps. Please reach out for further assistance.
Thank you.
Hi @Ira_27 ,
Just wanted to check if the response provided was helpful. If further assistance is needed, please reach out.
Thank you.