0
0
Power-biConceptBeginner · 4 min read

Snowflake Schema in Power BI: What It Is and How It Works

A snowflake schema in Power BI is a way to organize data tables where dimension tables are normalized into multiple related tables, forming a structure like a snowflake. It helps reduce data redundancy and improves data integrity by splitting data into smaller, linked tables instead of one big table.
⚙️

How It Works

Imagine you have a big family tree. Instead of writing all details about each family member in one big list, you break it down into smaller groups like parents, children, and grandparents, each with their own details. This is similar to how a snowflake schema works in Power BI.

In a snowflake schema, the main fact table holds the core data, like sales numbers. The dimension tables, which describe details like customers or products, are split into smaller related tables. For example, a product dimension might be split into product category and product subcategory tables. This splitting reduces repeated data and keeps the model tidy.

Power BI uses relationships to connect these tables, so when you create reports, it can pull the right details from each linked table smoothly.

💻

Example

This example shows a simple snowflake schema with a sales fact table and normalized product dimension tables.

DAX
FactSales = DATATABLE(
    {"SaleID", "ProductID", "Quantity", "SaleAmount"},
    {
        {1, 101, 2, 200},
        {2, 102, 1, 150},
        {3, 103, 5, 500}
    }
)

DimProduct = DATATABLE(
    {"ProductID", "ProductName", "SubCategoryID"},
    {
        {101, "Laptop", 10},
        {102, "Tablet", 11},
        {103, "Smartphone", 10}
    }
)

DimSubCategory = DATATABLE(
    {"SubCategoryID", "SubCategoryName", "CategoryID"},
    {
        {10, "Computers", 1},
        {11, "Mobile Devices", 1}
    }
)

DimCategory = DATATABLE(
    {"CategoryID", "CategoryName"},
    {
        {1, "Electronics"}
    }
)

// Relationships:
// FactSales[ProductID] -> DimProduct[ProductID]
// DimProduct[SubCategoryID] -> DimSubCategory[SubCategoryID]
// DimSubCategory[CategoryID] -> DimCategory[CategoryID]
Output
FactSales table with 3 rows DimProduct table with 3 rows DimSubCategory table with 2 rows DimCategory table with 1 row
🎯

When to Use

Use a snowflake schema in Power BI when your data has many related details that can be logically grouped into smaller tables. This helps keep your data model clean and reduces repeated information.

It is especially useful for large datasets with complex hierarchies, like product categories, geographic regions, or organizational structures. For example, a retail company might use a snowflake schema to organize products by category and subcategory, or a multinational company might organize locations by country, state, and city.

However, snowflake schemas can be more complex and may require more joins, so they are best when data integrity and storage efficiency are priorities over query speed.

Key Points

  • A snowflake schema normalizes dimension tables into multiple related tables.
  • It reduces data duplication and improves data integrity.
  • Power BI connects these tables with relationships for accurate reporting.
  • Best for complex data with hierarchical details.
  • May add complexity and affect query performance compared to simpler schemas.

Key Takeaways

A snowflake schema organizes data by splitting dimension tables into related smaller tables.
It reduces repeated data and keeps your Power BI model clean and efficient.
Use it when your data has complex hierarchies or detailed categories.
Power BI uses relationships to connect these tables for smooth reporting.
Snowflake schemas improve data integrity but can add complexity to queries.