Step 1: Remove Unused Tables and Columns
Get rid of any columns or tables that aren’t used in your visuals. Tools like Bravo or Power BI Helper can help identify them.
Removing unnecessary fields significantly reduces memory usage.
Step 2: Aggregate to the Needed LevelDon’t import more detail than necessary. If you only need monthly sales by state, you don’t need individual order lines.
Use Power Query → Group By to aggregate data (e.g., State + Year-Month).
Trade-off: you lose drill through capability to individual transactions but gain performance.
Step 3: Disable Auto Date/Time
Power BI auto-generates hidden date tables for every date field. Disable this in File > Options > Data Load.
Instead, create a custom date table with fiscal logic or calendar info.
Step 4: Use a Star Schema, Not a Flat or Snowflake
Avoid flat files with repeated data, and skip snowflake schemas unless necessary. A star schema with fact and dimension tables is easier to navigate and performs better.
Flat tables:
- Are harder to read
- Create file bloat
- Complicate DAX
Step 5: Remove Unnecessary One-to-One Relationships
One-to-one relationships aren’t optimal. Instead, merge tables with Power Query.
Go to:
Home → Merge Queries → Join on key → Expand desired columns.
Step 6: Avoid Bi-Directional and Many-to-Many Relationships
These relationships can introduce ambiguity and drastically slow down performance.
Use single-direction filters and avoid cross-filtering between dimensions unless absolutely necessary.
Step 7: Reduce Column CardinalityColumns with many unique values consume more space. A typical example: datetime columns.
Split into separate date and time fields:
- Last Edited → Last Edited Date + Last Edited Time
This improves compression and reduces memory usage.
Step 8: Assign Proper Data TypesUse the most efficient data types. For example, integers use less space than text.
Change data types in Power BI or upstream.
Step 9: Prefer Measures Over Calculated ColumnsMeasures don’t consume model space; calculated columns do.
Use calculated columns only if:
- The logic is too complex for Power Query
- You need the value in visuals like slicers
- Performance of a measure is unacceptable
Bonus tip: If using incremental refresh, avoid calculated columns - they require all partitions to be recalculated.
Step 10: Choose Import Over Direct Query (When Possible)
Import mode is usually faster. Use
DirectQuery only if:
- You need real-time data
- Your dataset is extremely large (100M+ rows)
Summary Table:
Step
|
Optimization Action
|
Benefit
|
1
|
Remove unused fields
|
Smaller file, faster refresh
|
2
|
Aggregate data
|
Less data, faster visuals
|
3
|
Disable auto date/time
|
Avoid hidden tables and bloat
|
4
|
Use star schema
|
Cleaner model, easier DAX
|
5
|
Remove 1:1 relationships
|
Fewer joins
|
6
|
Avoid bi-directional/many-to-many
|
Prevents ambiguity, speeds up
|
7
|
Reduce column cardinality
|
Better compression
|
8
|
Use efficient data types
|
Saves memory
|
9
|
Prefer measures to calculated columns
|
Space-efficient logic
|
10
|
Use import mode unless real-time is required
|
Better performance
|
Final Thoughts
These optimization strategies can dramatically improve the performance and usability of your Power BI reports. Whether you're scaling to enterprise-level data or simply trying to keep your reports clean and responsive, these steps will help you build efficient and maintainable models.
Hope you like it!
Give it a try and see how it works for you! I’d love to hear what you think or see how you use this trick in your own reports.