Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Try your skills in the Power BI Dataviz World Championship! Round one ends June 26. Join now

Reply
jaryszek
Resident Rockstar
Resident Rockstar

Modeling for Multiple Granularities and 1000+ Customers (OneLake layer)

Hi all,

I’m designing a solution in Fabric (OneLake, Direct Lake only – no Power Query, no Warehouse) and need advice on how to model for multiple granularities across 1000+ customers.

Context:
- I’ll have 1000+ customers.

- A baseline semantic model should hold the common schema and measures.

- Each customer may need different levels of detail:

- Monthly (e.g. year 2024 by months)

- Daily / Last 7 days vs Previous 7 days

- I’m unsure how many Lakehouses should be created:

- One per customer?

- Or one large Lakehouse with partitioning/RLS/shortcuts?

My main question is:
👉 What are the possible modeling approaches for handling multiple granularities?
Do people usually build a star schema with multiple fact tables (daily, monthly, rolling 7d)?

- Or do they keep just one detailed fact table and aggregate on the fly?

- Are there other approaches I should consider?

I’d also appreciate any advice on:

  1. How to design the baseline semantic model so it scales across 1000 customers.

  2. Best practices for balancing performance, maintainability, and storage in this kind of multi-customer / multi-granularity setup.

Thanks,
Jacek

1 ACCEPTED SOLUTION

Hi @jaryszek,

When organizing data in a shared Lakehouse by tenant_id and date, files are stored in a nested folder structure like:
/tenant_id=<tenant_id>/year=<yyyy>/month=<mm>/day=<dd>/.
Fabric automatically manages file names and partitions when using Spark or Pipelines. You can view the folder structure by selecting “View Files” in the Lakehouse UI. This method enables scalable and efficient management of data across multiple customers and granularities.

Load data to Lakehouse using partition - Microsoft Fabric | Microsoft Learn

 

Thank you.

View solution in original post

5 REPLIES 5
AmiraBedh
Super User
Super User

Hello !

Thank you for posting on Fabric community.

For 1k+ customers in Fabric (Direct Lake only), you may choose small number of shared Lakehouses by domain over one per customer where you store all tenants in shared delta tables partitioned by tenant_id and date and keep it with OPTIMIZE/Z-ORDER.

You can split into separate lakehouses and very large tenants.

You can use multi-grain facts where you keep a detailed daily or transaction fact with materialized daily and monthly aggregates and refresh them with Fabric notebooks or data engineering pipelines.

You can publish one baseline semantic model with conformed dimensions and apply dynamic RLS over a security_user_customer mapping so each user only sees their tenants and keep the reports with live connection so you deploy and manage the dataset once.


Proud to be a Power BI Super User !

Microsoft Community : https://docs.microsoft.com/en-us/users/AmiraBedhiafi
Linkedin : https://www.linkedin.com/in/amira-bedhiafi/
StackOverflow : https://stackoverflow.com/users/9517769/amira-bedhiafi
C-Sharp Corner : https://www.c-sharpcorner.com/members/amira-bedhiafi
Power BI Community :https://community.powerbi.com/t5/user/viewprofilepage/user-id/332696

thank you. 

Can you elaborate this? 

"shared Lakehouses by domain over one per customer where you store all tenants in shared delta tables partitioned by tenant_id and date and keep it with OPTIMIZE/Z-ORDER."

what doest it mean shared lakehouses which store tenants inside? 

Hi @jaryszek,

Thank you @AmiraBedh, for your insights.

Use a single shared Lakehouse to store detailed data, partitioned by tenant_id and date. To query performance, include lightweight pre-aggregated tables, like monthly or rolling 7-day summaries. Improve efficiency by clustering on tenant_id, partitioning by date, and running OPTIMIZE regularly. For very large customers, consider separate lakehouses. This strategy ensures scalability, efficiency, and simpler management.

Understand star schema and the importance for Power BI - Power BI | Microsoft Learn

Direct Lake overview - Microsoft Fabric | Microsoft Learn

 

Thank you.

 

"Use a single shared Lakehouse to store detailed data, partitioned by tenant_id and date. "

Please describe exactly how files names should look like? Can you please provide patterns? 

Hi @jaryszek,

When organizing data in a shared Lakehouse by tenant_id and date, files are stored in a nested folder structure like:
/tenant_id=<tenant_id>/year=<yyyy>/month=<mm>/day=<dd>/.
Fabric automatically manages file names and partitions when using Spark or Pipelines. You can view the folder structure by selecting “View Files” in the Lakehouse UI. This method enables scalable and efficient management of data across multiple customers and granularities.

Load data to Lakehouse using partition - Microsoft Fabric | Microsoft Learn

 

Thank you.

Helpful resources

Announcements
Fabric Data Days is here Carousel

Fabric Data Days 2026

Don't miss out on Data Days, June 15 through August 7. Learn Fabric, Power BI, SQL, AI and more.

May Power BI Update Carousel

Power BI Monthly Update - May 2026

Check out the May 2026 Power BI update to learn about new features.

Power BI DataViz World Championships carousel

Power BI DataViz World Championships - June 2026

A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.

Top Kudoed Authors