Back to blog

Why you rewrite your DAX measures for every new client

The same problem shows up on every multi-client engagement: starting from zero on DAX measures and the dashboard template. Here's why, and how to stop.

Posted by

The same problem, client after client

You know the scenario. A new client comes in with their own Power BI model. You open a blank file, or close to it, and start over: the revenue measure, the margin, the conversion rate — all measures you've already written ten times for ten different clients.

The DAX barely changes from one client to the next. What changes is the sales table name, the date column, sometimes a currency. The business logic is identical. And yet most consultants start from zero every time: copy-paste from the last client, adapt table names by hand, then rebuild the report's theme and layout.

What it actually costs

The visible cost is the time lost retyping DAX you've already written. The hidden cost is worse: without centralization, a measure fixed for one client stays broken everywhere else. That margin calculation you refined in January for one client stays buggy for the other three, simply because nobody has a reason to go back and fix a file that's already been delivered.

Over time, you end up with as many versions of margin_pct as you have clients, each slightly different, none of them the real reference.

The cause: nothing is abstracted

The problem isn't the DAX itself — it's that it's hardcoded for one specific client. A measure like:

total_revenue = SUM('Sales_ClientA'[Amount])

can't be reused as-is: the table name is locked in. For a measure to be genuinely reusable, you have to separate what never changes (the business logic, the measure's technical name) from what changes per client (the table, the column). That's exactly what a template is: a measure written once, with slots resolved differently for each client, instead of a copy-pasted PBIX file.

What changes day to day

Once the logic is centralized, fixing a calculation bug or adding a measure happens once, in one place. Deployment to each client stays under your control, measure by measure, but you stop retyping what's already been written. That's the problem we set out to solve with BIunify: centralize once and for all, and never start from zero with the next client again.

Why you rewrite your DAX measures for every new client