Free tool · Runs in your browser

DAX checker

Paste your Power BI measures and get an instant review against the patterns I see most often in client models: division that breaks on zero, IFERROR hiding real errors, FILTER over whole tables, blanks turned into zeros and more. Each finding comes with the pattern to use instead.

Nothing you paste leaves your browser. There is no upload and no account.

Measures

One measure per line as Name = expression, or paste measure blocks straight from a PBIP project’s TMDL files. Format lays them out in the SQLBI style, in your browser.

Findings

Fix: wrong or fragile result Consider: slower or surprising Style: harder to read or maintain
What it looks for

Eighteen checks, from broken to untidy.

Division with /

Errors or infinity on a zero or blank denominator. DIVIDE returns BLANK.

IFERROR and ISERROR

Hide broken references and slow the engine. Guard the specific case instead.

Unbalanced brackets

An opening bracket with no partner, so the measure will not compile.

VAR without RETURN

A block of variables that never says what the measure gives back.

Unqualified columns

SUM and friends given [Column] with no table, which reads like a measure.

FILTER over a whole table

Iterates every row and can override filters on other columns.

COUNTROWS over FILTER

A CALCULATE with a column predicate lets the storage engine do the work.

Blanks turned into zero

Fills tables with zero rows and slows every visual that uses the measure.

FORMAT in a measure

Returns text, which sorts alphabetically and cannot be charted or totalled.

Time intelligence on a fact table

Needs a marked date table with one row per day and no gaps.

EARLIER

Hard to follow. Capture the outer value in a VAR instead.

Hard-coded years

A fixed date that quietly stops working when the calendar moves on.

Repeated expressions

The same measure or CALCULATE evaluated twice where a VAR would do.

Nested IFs

Three or more levels deep. SWITCH ( TRUE () ) lists them in order.

IF, HASONEVALUE, VALUES

SELECTEDVALUE does the same in one call.

SUMX over one column

The plain aggregator does the same work and says what it means.

ALL as a CALCULATE filter

REMOVEFILTERS does the same and says so.

Long single lines

Break the expression up so a reviewer and a diff can see its structure.