A good Power BI report starts with a good data model.
You can create beautiful charts and dashboards, but if the tables in your model are not properly connected or your fields are poorly configured, your report can produce misleading results.
This is where a semantic model comes in.
A semantic model in Power BI defines how your data is organized and how different tables interact with one another. It includes tables, columns, relationships, hierarchies, measures, and other properties that make your data easier to understand and use when building reports.
In this guide, we will walk through how to configure a semantic model in Power BI Desktop using a practical sales dataset.
By the end of the tutorial, you will know how to:
- Create relationships between tables
- Understand cardinality and filter direction
- Create and configure hierarchies
- Organize fields using display folders
- Configure data categories
- Add descriptions and formatting to columns
- Hide technical columns
- Configure default summarization
- Turn off automatic date/time hierarchies
- Create quick measures
- Configure a many-to-many relationship
- Use a bridging table
- Connect a targets table to your model
What Is a Semantic Model in Power BI?
Before we start building, let's understand what we are configuring.
A semantic model is the structure that tells Power BI how your data should be understood and used.
For example, imagine you have these tables:
- Product: contains product information
- Sales: contains sales transactions
- Reseller: contains reseller information
- Region: contains sales territory information
- Salesperson: contains salesperson information
- Targets: contains sales targets
These tables contain related information, but Power BI needs to know how they are connected.
For example:
One product can appear in many sales transactions.
This means the Product table and Sales table can have a one-to-many relationship.
Once relationships are correctly configured, selecting a product category can automatically filter the corresponding sales records.
That is the foundation of a useful Power BI semantic model.
Getting Started
For this tutorial, we will use the Microsoft Power BI learning dataset.
Download the starter ZIP file and extract it to your computer.
Inside the extracted folder, open:
03-Starter-Sales Analysis.pbix
When Power BI Desktop opens the file, you may see a sign-in window. If you do, select Cancel.
If Power BI displays other informational messages, close them. If prompted to apply changes later, select Apply Later.
Once the file opens, you are ready to begin.
Step 1: Inspect the Existing Data
Before creating relationships, it is useful to understand the tables available in the model.
In Power BI Desktop:
- Go to the Data pane.
- Right-click an empty area inside the pane.
- Select Expand All.
This allows you to see the columns available in each table.
Some of the important tables in this model include:
- Product
- Sales
- Reseller
- Region
- Salesperson
- SalespersonRegion
- Targets
The Sales table contains transaction-level information, while the other tables provide additional information that can be used to analyze those transactions.
Step 2: See What Happens Without a Relationship
Let's first see why relationships are important.
In Report view, create a table visual.
From the Product table, select:
Product | Category
Then add:
Sales | Sales
You should see the product categories, but the sales value may be repeated for each category.
Why?
Because Power BI currently doesn't have a relationship connecting the Product table to the Sales table.
The category comes from one table, while sales comes from another. Without a relationship, the filter from Product cannot properly propagate to Sales.
This is one of the most important concepts to understand when working with Power BI data models.
Step 3: Create the Product-to-Sales Relationship
Now let's fix the problem.
Switch to Model view by selecting the Model icon on the left side of Power BI Desktop.
On the Home ribbon, select:
Manage relationships
If there are no relationships, select:
+ New relationship
Configure the relationship as follows:
| Setting | Value |
|---|---|
| From table | Product |
| From column | ProductKey |
| To table | Sales |
| To column | ProductKey |
| Cardinality | One to many (1:*) |
| Cross filter direction | Single |
| Active | Yes |
Power BI may automatically detect the matching ProductKey columns.
Understanding the relationship
The relationship is:
Product (1) → Sales (*)
This means one product can appear in many sales records.
The Single cross-filter direction means that filters generally flow from the Product table to the Sales table.
For example:
Product Category → Product → Sales
If a user selects the "Bikes" category, Power BI can now filter the corresponding sales records.
Select Save, then Close.
Return to Report view.
The table should now show different sales values for the different product categories.
That's the relationship doing its job.
Step 4: Understand Relationship Symbols
When you look at the model diagram, Power BI displays useful information on the relationship line.
You may see:
1 and Many
These represent cardinality.
-
1= one -
*= many
So:
*1 → ** means one-to-many.
You may also see an arrow showing the filter direction.
The relationship line itself can also be:
- Solid = active relationship
- Dotted = inactive relationship
These visual indicators make it easier to understand the model without opening every relationship.
Step 5: Create Additional Relationships Using Drag and Drop
Power BI provides another easy way to create relationships.
Instead of using Manage relationships, you can drag a column from one table onto its matching column in another table.
In Model view, drag:
Reseller | ResellerKey
onto:
Sales | ResellerKey
Review the relationship and select Save.
Then create these additional relationships:
Region → Sales
Region | SalesTerritoryKey
to
Sales | SalesTerritoryKey
Salesperson → Sales
Salesperson | EmployeeKey
to
Sales | EmployeeKey
After creating the relationships, arrange the model so that the Sales table is positioned near the center, with related tables around it.
This makes the model easier to understand visually.
Save the Power BI file.
Step 6: Create a Product Hierarchy
Hierarchies make it easier for report users to navigate data from a higher level to a more detailed level.
For example:
Category → Subcategory → Product
Let's create one.
In Model view, expand the Product table.
Right-click:
Category
Select:
Create hierarchy
Power BI will create a new hierarchy.
In the Properties pane, rename the hierarchy:
Products
Now add two more levels:
- Subcategory
- Product
Select Apply Level Changes.
You should now have:
Products
-
Category
- Subcategory
- Product
This hierarchy can later be used for drill-down in report visuals.
Step 7: Organize Columns Using a Display Folder
As your model becomes larger, the Data pane can become difficult to navigate.
Display folders help organize related fields.
In the Product table, select:
Background Color Format
Hold Ctrl and select:
Font Color Format
In the Properties pane, enter:
Formatting
in the Display Folder property.
The two columns will now appear inside a Formatting folder.
Display folders do not change the data itself. They are simply a way of organizing fields and making the model easier for report authors to use.
Step 8: Configure the Region Table
Now let's configure the Region table.
Create a hierarchy called:
Regions
Add these three levels:
- Group
- Country
- Region
Next, select the actual Country column, not the hierarchy level.
In the Properties pane:
- Expand Advanced.
- Find Data Category.
- Select Country/Region.
Why does this matter?
Data categories provide additional information to Power BI about what a field represents.
For example, categorizing a field as Country/Region helps Power BI interpret the field correctly when working with map visuals.
Step 9: Configure the Reseller Table
The Reseller table also needs some useful hierarchies.
Create the Resellers hierarchy
Create a hierarchy called:
Resellers
Add:
- Business Type
- Reseller
Create the Geography hierarchy
Create another hierarchy called:
Geography
Add:
- Country-Region
- State-Province
- City
- Reseller
Now configure the geographic columns.
Set:
Country-Region → Country/Region
State-Province → State or Province
City → City
Remember to select the actual columns when configuring their data categories, rather than the hierarchy levels.
Step 10: Improve the Sales Table
A well-configured semantic model should be easy for other people to understand.
Let's improve the Sales table.
Add a description to Cost
Select:
Sales | Cost
In the Properties pane, find Description and enter:
Based on standard cost
Descriptions are useful because report authors can see additional information when they hover over the field.
Format Quantity
Select:
Sales | Quantity
Under Formatting, set:
Thousands Separator → Yes
This makes large values easier to read.
Format Unit Price
Select:
Sales | Unit Price
Set:
Decimal Places → 2
Then, under Advanced, change:
Summarize By → Average
This is important.
Power BI commonly summarizes numeric columns using Sum by default.
But adding unit prices together usually doesn't make business sense.
For example, if three products have unit prices of:
- $10
- $20
- $30
A total of $60 isn't a meaningful "unit price."
An average of $20 is more useful.
This is why choosing the appropriate default summarization matters.
Step 11: Hide Technical Columns
Not every column needs to be visible to report users.
Some columns exist mainly to support:
- Relationships
- Calculations
- Row-level security
- Internal model logic
Select the following columns and set:
Is Hidden → Yes
Product
Product | ProductKey
Region
Region | SalesTerritoryKey
Reseller
Reseller | ResellerKey
Sales
- Sales | EmployeeKey
- Sales | ProductKey
- Sales | ResellerKey
- Sales | SalesOrderNumber
- Sales | SalesTerritoryKey
Salesperson
- Salesperson | EmployeeID
- Salesperson | EmployeeKey
- Salesperson | UPN
SalespersonRegion
- SalespersonRegion | EmployeeKey
- SalespersonRegion | SalesTerritoryKey
Targets
Targets | EmployeeID
Hiding these fields doesn't delete them.
They remain available to Power BI for model operations, but they are no longer visible to report authors in the normal Data pane.
This makes the model cleaner and easier to use.
Step 12: Format Financial Columns
Select these three columns:
Product | Standard CostSales | CostSales | Sales
Set:
Decimal Places → 0
This removes unnecessary decimal places and makes the values easier to read.
Step 13: Turn Off Auto Date/Time
Power BI can automatically create date hierarchies for date columns.
For example:
OrderDate
may automatically provide:
- Year
- Quarter
- Month
- Day
This can be convenient, but automatic date/time isn't always appropriate for a well-designed model.
For this Adventure Works model, the financial year begins on July 1, while the automatic date hierarchy follows a calendar year beginning on January 1.
A proper date table gives you much more control over this type of business logic.
To turn off Auto Date/Time:
Go to:
File → Options and settings → Options
Under Current File, go to:
Data Load → Time Intelligence
Uncheck:
Auto Date/Time
Select OK.
The automatically generated date hierarchies will disappear.
Step 14: Create a Quick Measure for Profit
Power BI's Quick Measures feature can create common calculations without requiring you to manually write the DAX formula.
Right-click the Sales table and select:
New Quick Measure
In the Quick Measure pane, choose:
Mathematical Operations → Subtraction
Set:
Base Value:
Sales | Sales
Value to Subtract:
Sales | Cost
Select Add.
Power BI creates a measure.
Rename it:
Profit
The calculation is essentially:
Profit = Sales - Cost
The calculator icon beside the field indicates that it is a measure.
Step 15: Create a Profit Margin Measure
Create another Quick Measure.
This time select:
Mathematical Operations → Division
Set:
Numerator:
Sales | Profit
Denominator:
Sales | Sales
Select Add.
Rename the new measure:
Profit Margin
The calculation is essentially:
Profit Margin = Profit ÷ Sales
Select the Profit Margin measure.
On the Measure Tools ribbon, format it as:
Percentage
Set:
Decimal Places → 2
For example, a result of 0.25 will be displayed as:
25.00%
Step 16: Test the Measures
Return to the report page.
Select the existing table visual.
Add:
- Profit
- Profit Margin
Resize the visual if necessary so all the columns are visible.
Check that the values are reasonable and that the profit margin is displayed as a percentage.
This is a good example of why measures are useful.
Instead of storing another column for every calculation, a measure calculates the result based on the current filter context of the report.
Step 17: Understand the Many-to-Many Challenge
Now we get to a more advanced part of the model.
Create a table visual containing:
Salesperson | Salesperson
and:
Sales | Sales
The visual shows sales generated by each salesperson.
However, there is another business relationship to consider.
A salesperson can belong to multiple sales regions.
At the same time, a sales region can have multiple salespeople.
This creates a many-to-many scenario.
For example:
One salesperson → multiple regions
and:
One region → multiple salespeople
Trying to connect these tables directly can create ambiguity in the model.
This is where a bridge table becomes useful.
Step 18: Use SalespersonRegion as a Bridge Table
The SalespersonRegion table can act as a bridge between Salesperson and Region.
In Model view, position it between the two tables.
Create these relationships:
Salesperson → SalespersonRegion
Salesperson | EmployeeKey
to:
SalespersonRegion | EmployeeKey
Region → SalespersonRegion
Region | SalesTerritoryKey
to:
SalespersonRegion | SalesTerritoryKey
The resulting structure is conceptually:
Salesperson → SalespersonRegion ← Region
The bridge table helps represent the many-to-many assignment between salespeople and regions.
Step 19: Configure Filter Direction
At this point, the report may still not produce the expected sales result.
Why?
Look at the arrows on the relationships.
The filter may travel from Salesperson to SalespersonRegion, but not continue through to Region.
To allow the required filter propagation, edit the relationship between:
Region
and:
SalespersonRegion
Double-click the relationship.
Set:
Cross Filter Direction → Both
Then check:
Apply Security Filter in Both Directions
Select Save.
The relationship will now display double arrowheads.
Step 20: Avoid Ambiguous Filter Paths
There is another issue.
There may now be two possible paths between Salesperson and Sales.
For example:
Salesperson → Sales
and:
Salesperson → SalespersonRegion → Region → Sales
When multiple active paths exist between tables, Power BI can encounter ambiguous filter propagation.
This is generally something you should avoid when designing a production semantic model.
In this lab, we solve the issue by making the direct Salesperson to Sales relationship inactive.
Double-click the relationship between:
Salesperson
and:
Sales
Uncheck:
Make This Relationship Active
Select Save.
The relationship will now appear as a dotted line.
The active filtering path will instead pass through the bridge structure.
Step 21: Rename the Salesperson Table
The Salesperson table is now being used for a specific analytical purpose.
Select the table in Model view.
In the Properties pane, rename it:
Salesperson (Performance)
The new name makes the purpose of the table clearer to anyone working with the model.
Good naming is a small detail, but it becomes increasingly important as Power BI models become more complex.
Step 22: Connect the Targets Table
Finally, let's connect salespeople to their targets.
Create a relationship between:
Salesperson (Performance) | EmployeeID
and:
Targets | EmployeeID
Then return to Report view.
Add:
Targets | Target
to the table visual.
Resize the visual if necessary.
You can now compare sales information with target information.
However, there are two important considerations:
1. Time period
The targets table may contain future target values if no time filter has been applied.
2. Targets are not additive
Adding individual target values together may not always produce a meaningful total.
This is a good example of why understanding the meaning of your data is just as important as understanding Power BI's technical features.
Final Model Checklist
Before considering your semantic model complete, review the following:
Relationships
- Product is connected to Sales.
- Reseller is connected to Sales.
- Region is connected to Sales.
- Salesperson is connected to the model.
- SalespersonRegion is used as a bridge table.
- Targets is connected to the salesperson performance table.
- Relationship cardinality and filter directions are appropriate.
- Unnecessary ambiguous paths are avoided.
Hierarchies
- Products hierarchy
- Regions hierarchy
- Resellers hierarchy
- Geography hierarchy
Data categories
- Country fields categorized as Country/Region
- State fields categorized as State or Province
- City fields categorized as City
Organization
- Formatting fields placed in a display folder.
- Technical columns hidden.
- Tables and fields given meaningful names.
- Descriptions added where useful.
Formatting
- Quantity uses a thousands separator.
- Unit Price uses two decimal places.
- Standard Cost, Cost and Sales use zero decimal places.
- Profit Margin is formatted as a percentage.
Measures
- Profit measure created.
- Profit Margin measure created.
Date settings
- Auto Date/Time disabled.
Why Semantic Modeling Matters
Configuring a semantic model is not just about connecting tables.
It is about creating a structure that allows Power BI to interpret your data correctly.
A well-designed model helps ensure that:
- Filters work as expected.
- Calculations return meaningful results.
- Report users can find the fields they need.
- Technical fields don't clutter the Data pane.
- Hierarchies support intuitive drill-down.
- Geographic fields work correctly with maps.
- Measures are reusable across different visuals.
- Complex relationships can be handled more effectively.
In other words, the semantic model sits behind the report and provides the foundation for reliable analysis.
Key Takeaways
If you're just starting with Power BI, focus on these concepts first:
1. Relationships connect your data.
Tables need correctly configured relationships so filters can propagate between them.
2. Cardinality describes how tables relate.
Common relationship types include one-to-many and many-to-many.
3. Filter direction matters.
It determines how filters move between related tables.
4. Hierarchies improve navigation.
They allow users to move from broad categories to more detailed information.
5. Data categories provide additional meaning.
They help Power BI understand fields such as countries, states and cities.
6. Hide technical fields.
Not every field needs to be exposed to report users.
7. Use measures for calculations.
Measures such as Profit and Profit Margin can respond dynamically to the current filter context.
8. Be careful with many-to-many relationships.
Bridge tables can help model many-to-many scenarios, but filter paths must be designed carefully to avoid ambiguity.
9. A clean model makes reporting easier.
The goal isn't simply to make the model work. It should also be understandable and easy for others to use.
Conclusion
A Power BI report is only as reliable as the model behind it.
By correctly configuring relationships, hierarchies, data categories, formatting, measures and filter behavior, you create a semantic model that makes your data easier to analyze and your reports easier to build.
If you're learning Power BI, don't rush straight into creating charts and dashboards. Spend time understanding the model first.
Once the model is properly configured, building meaningful reports becomes much easier.
Happy modeling!





















Top comments (0)