A large share of the performance and consistency problems in Power BI reports come from a few basic mistakes in the data model and DAX measures. Below are the six mistakes we see most often in our projects and consulting work, along with their solutions.
1. Using a calculated column instead of a measure
Calculated columns are computed for every row when the data is refreshed, and they take up space in the model. For values that should change with the report’s filters, such as totals, ratios and averages, use a measure instead of a calculated column. Reserve calculated columns for values that stay fixed at row level and are needed for grouping or filtering.
2. Not using a separate date table
For time comparisons such as year-to-date or the same period last year, the model should contain a separate date table with continuous dates, marked as a “date table”. Relying on the automatic date/time feature both bloats the model and can lead to unexpected results in time intelligence functions.
3. Filtering an entire table with FILTER
CALCULATE([Sales], FILTER(Sales, Sales[Channel] = "Online")) — an expression like this iterates over the entire sales table row by row. You can usually get the same result much faster with a simple filter on the column: CALCULATE([Sales], Sales[Channel] = "Online") . Save FILTER for situations that genuinely require row-by-row conditions.
4. Not using DIVIDE for division
[Profit] / [Sales] — a division like this produces an error or an infinite value when the denominator is zero. The DIVIDE([Profit], [Sales]) function handles this case safely and lets you optionally return an alternative value.
5. Not using variables (VAR)
Writing the same expression more than once inside a measure reduces readability and can cause unnecessary calculation. VAR lets you calculate intermediate results once and reuse them inside RETURN , which makes measures both faster and easier to understand.
6. Turning on bidirectional relationships carelessly
Bidirectional (both) filter relationships are necessary in some scenarios, but when used everywhere they create ambiguous filter paths, unexpected results and performance loss in the model. Start with single-direction relationships by default, and apply bidirectional filtering only in the measures that genuinely need it, using CROSSFILTER .
Conclusion
A good Power BI report is built on a well-designed data model and simple, consistent DAX measures. If your current reports run slowly or show different numbers on different pages, the cause is most likely one of these points. Learn more about our Power BI service or get in touch with us.
