Forum Discussion
Snowflake schema
- 29 days ago
Hi powerbiexpert22,
You don't necessarily need to denormalize everything to get a star schema.
I'd start with the fact table and define its grain first. Then look at the related tables and see which ones are mainly providing descriptive attributes.
For example:
FactSales
→ DimProduct
→ DimSubcategory
→ DimCategorycould become a single DimProduct containing Product, Subcategory, Category, Brand, etc.
The same can be done with other dimensions where it makes sense.
You also don't have to physically change the Snowflake tables. You can keep the source schema as it is and create a dimensional layer using Snowflake views or your ETL/ELT process for Power BI.
The main goal is to have simple relationships such as:
DimProduct 1 → * FactSales
DimCustomer 1 → * FactSales
DimDate 1 → * FactSalesI wouldn't flatten every table blindly, though. Tables with different grains or many-to-many relationships need to be handled separately to avoid duplicate rows and incorrect measures.
If you share the table names/relationships, it would be easier to suggest exactly which ones I'd combine.
Hi powerbiexpert22 -One additional point I’d consider is that the Snowflake schema in the data/warehouse layer and the Star Schema in the Power BI semantic layer don't necessarily have to be identical. In a Fabric/Power BI architecture, you can keep the source/integration layer normalized and create a dimensional/serving layer specifically for analytics. This gives you the flexibility to flatten only the dimensions that benefit from denormalization while retaining bridges or entities with independent grain. validate the grain, cardinality, SCD requirements, and row-count impact before merging tables. The goal isn't simply fewer tables, it’s a predictable 1: relationship from dimensions to facts, clear filter propagation, and correct measures.
Hope this helps.