Common Errors & Gotchas
Purpose
A troubleshooting reference for the mistakes, error messages, and conceptual traps that come up most often when building Power BI reports and DAX calculations.
Calculated Column Using a Measure (or Vice Versa, Wrong Way)
-- Calculated column trying to use filter-context logic - doesn't behave as expected
Column Result = CALCULATE([Total Sales]) -- inside a calculated column, this just repeats the row's own values oddlyCalculated columns have ROW context, not filter context
A calculated column can reference
[Total Sales](a measure), but since a column has no filter context of its own, the result is often not what’s intended - especially confusing because it doesn’t error, it just quietly computes something different than expected. See 05-DAX-Fundamentals for the row vs filter context distinction.
Circular Dependency Error
"A circular dependency was detected"
Happens when a calculated column/measure references itself, directly or through a chain of other calculations (A depends on B, B depends on A). Trace the dependency chain via
Model View’s relationship diagram or by reading each formula carefully - Power BI won’t specify exactly where the loop is, only that one exists.
Wrong Total in a Visual (Looks Wrong but “Adds Up” Individually)
-- A ratio measure that looks fine per-row but is WRONG when totaled
Margin % = DIVIDE(SUM(Sales[Profit]), SUM(Sales[Amount])) -- CORRECT - recalculates properly at every level-- If instead you average a pre-computed row-level ratio, the TOTAL row is often wrong
Wrong Margin % = AVERAGE(Sales[RowLevelMarginPercent]) -- averages the RATIOS, not the underlying totals - usually incorrectNever average a pre-computed percentage/ratio column for a "total"
A grand-total row showing the average of individual row-level percentages is almost always mathematically wrong (it ignores weighting by volume). Always recompute the ratio using
DIVIDE(SUM(...), SUM(...))so it’s correct at every level of aggregation, not just the detail rows.
Blank/Missing Rows Due to Relationship Direction
Data "disappears" after adding a relationship
If a fact table doesn’t have a matching row in a dimension table (e.g. a sale with a
CustomerIDnot present in theCustomerstable), that row can silently vanish from visuals filtered/grouped by anything from theCustomersside. CheckModel Viewfor orphaned foreign keys, and consider whether the relationship should be Left-Outer-like (most fact-to-dimension relationships default to including unmatched rows as a blank category, but verify withView As/testing).
BLANK() vs 0 vs Empty String Confusion
Sales When None = CALCULATE([Total Sales], Sales[Region] = "Nonexistent") -- returns BLANK(), not 0DAX distinguishes
BLANK()from0Many visuals hide rows/columns where a measure returns
BLANK()(e.g. a matrix won’t show a category with no data at all), but WILL show a row where the measure returns0. UseIF(ISBLANK(x), 0, x)orCOALESCE(x, 0)deliberately when you want zeros displayed instead of blank rows disappearing - or leave it asBLANK()deliberately when you want sparse categories hidden.
Slicer Not Filtering a Visual as Expected
Usually a relationship problem, not a slicer problem
If a slicer on Table A doesn’t seem to filter a visual built from Table B, check
Model View: either there’s no relationship between them, the relationship is the wrong direction (see 04-Data-Modeling-Relationships), or it’s marked inactive. Also checkEdit Interactions(see 10-Filters-Slicers-Interactions) in case that specific visual was manually set to “None” for that source.
RELATED Returns Blank/Error
Customer Region = RELATED(Customers[Region])
RELATEDonly works in the correct direction
RELATEDpulls from the “one” side of a many-to-one relationship, used from the “many” side. If used the other way (or if no relationship exists between the two tables at all), it returnsBLANK()or an error. UseRELATEDTABLEinstead when going from one-side to many-side (see 06-DAX-Functions-Reference).
Time Intelligence Functions Not Working
Almost always a missing/incorrect Date table
TOTALYTD,SAMEPERIODLASTYEAR,DATEADD, etc. require: (1) a continuous, gap-free calendar table, (2) marked as the official Date table (Mark as Date Table), (3) properly related to the fact table, and (4) the date column used inside the function must come from THAT marked date table, not a raw date column on the fact table itself. See 04-Data-Modeling-Relationships and 07-DAX-Time-Intelligence-Context.
Refresh Fails in the Service but Works in Desktop
Usually a credentials or gateway issue
The most common cause: data source credentials were never configured (or have expired) in
Dataset Settings > Data source credentialsin the Service - Desktop uses your own locally cached credentials, which don’t automatically transfer to the Service. For on-premises sources, also confirm the gateway (see 15-Publishing-Power-BI-Service) is online and correctly assigned to the dataset.
Visual Shows “Too many values” / “Can’t display this visual”
Most visuals have a data point limit
Charts silently truncate or refuse to render beyond a certain number of category values (varies by visual type, often around 10,000-30,000 points). Reduce cardinality on the axis field, apply a Top N filter, or switch to a table/matrix which handles larger row counts more gracefully.
Report Runs Fine in Desktop but Slow in the Service
Check whether it's actually DirectQuery or a capacity/gateway bottleneck
A report that feels fast locally (against a fast local connection) can be slow once published if it relies on DirectQuery against a source now being queried from the cloud, or if the workspace is on a shared/constrained capacity. Use Performance Analyzer (see 16-Performance-Optimization) in the Service context, not just Desktop, to diagnose.
Duplicate Values Appearing After a Merge/Join
Usually caused by a non-unique join key
If the “one” side of an intended many-to-one relationship (or Power Query merge) actually has duplicate keys, matching rows multiply unexpectedly (the same “many-to-many” row explosion problem as in SQL - see PostgreSQL: Common Errors). Check for duplicates on the key column (
Remove Duplicatesin Power Query, orDISTINCTCOUNTvsCOUNTROWSin DAX) before relying on a relationship being truly one-to-many.