Star-schema design
We reshape flat exports and snowflaked sources into fact and dimension tables — the layout Power BI is built to query fastest and total correctly.
Data modeling & DAX
Power BI data model and DAX tuning is what makes totals reconcile, filters behave, and pages load in a second. We design and tune that foundation for you from prepaid senior hours — you approve the scope before we start, so your reports stay fast and your team trusts the figures.
Modeling and DAX work is one of the things your prepaid Flex hours cover — scoped per task, with hours deducted only for work you approve. See Flex pricing.
Representative dashboard — sample data
Data modeling & DAX
Most teams discover the model the hard way. A report looks finished, then two numbers disagree, a slicer filters the wrong table, or a page that loaded instantly with 10,000 rows crawls at two million. None of that is a visual problem — it is the structure underneath. In Power BI, that structure is the semantic model (the named collection of tables, relationships, and calculations that turns raw data into business meaning) and the DAX measures that compute the figures. DAX — Data Analysis Expressions — is Microsoft’s formula language for Power BI, used to write measures such as net revenue, rolling margin, or year-over-year growth.
This service is the engineering layer behind a good report. We shape your tables into a model Power BI can query quickly, write measures that are reusable and correct, tune the parts that are slow, and lock down who sees what. Whether you are starting clean or untangling a model that grew sideways for two years, the goal is the same: numbers your team can defend in a meeting, and a model your analysts can extend without calling us back.
Concepts we engineer
What’s included
Spend your prepaid Flex hours on the structure, the calculations, the speed, and the security — not just a tidy diagram. We scope each task and you approve before we start.
We reshape flat exports and snowflaked sources into fact and dimension tables — the layout Power BI is built to query fastest and total correctly.
Single-direction relationships, the right cardinality, and a clean date table so filters flow predictably and bidirectional traps stay out of your model.
Core metrics — revenue, margin, variance, time intelligence — written once as measures, organized in display folders, and reused everywhere instead of copied around.
We profile the model with DAX Studio, cut unused columns, fix slow patterns, and reduce memory so the same questions return in a fraction of the time.
Roles and filtering logic so each person sees only their region, team, or accounts — defined, mapped to your users, and tested role by role.
A data-model map, naming conventions, documented measures, and a walkthrough so your analysts can maintain and extend the model with confidence.
How it works
We review your sources, current model, and the measures your team relies on. You get a written diagnosis of what is slow, what is duplicated, and what is producing wrong totals — plus a scope estimate and the hours it will take, to approve before any work begins.
We rebuild the schema, set relationships, and write tested DAX measures. We tune the heavy parts and configure row-level security so the model is fast, correct, and secure by the time you see it.
We reconcile every key figure against your source of truth, walk your team through the model, and hand over the file plus documentation. You own all of it — no lock-in, no dependency on us.
Power BI’s engine is optimized for a specific shape: a central fact table (your transactions, orders, or events) surrounded by dimension tables (date, product, customer, region). That is a star schema, and it is not stylistic preference — it is how the engine compresses data and resolves filters efficiently. Wide, flat tables and deeply nested snowflakes force the engine to work harder, produce ambiguous filter paths, and make time intelligence painful. We reshape your sources into a star, working in the Power BI modeling view (opens in new tab), so the model stays fast as it grows and your DAX stays readable.
A clean schema also fixes the most common trust problem: numbers that do not reconcile. When dimensions are shared and relationships point one direction, a single measure returns the same answer on every page. When tables are duplicated and relationships are bidirectional, the same measure can return different totals depending on what else is on the page. We remove that ambiguity by design.
A frequent cause of bloated, slow models is calculated columns doing work that belongs in measures. Calculated columns are computed row by row and stored in memory; measures are computed on demand for exactly the filter context on screen. We move the right logic into measures, which shrinks the model, speeds refresh, and makes the calculations transparent. Where a column genuinely belongs (a category bucket, a sort key), we keep it — the point is using each tool for what it does well.
We write measures to be composed: a base measure such as Total Revenue, then Revenue YoY % and Revenue vs Budget built on top of it. Change the base once and every dependent number updates. Measures are grouped into display folders and named in plain business language so your analysts can find and reuse them instead of re-deriving the same logic in five places.
When a report is slow, the fix is rarely the visuals. We profile the model to find what is actually expensive — large cardinality columns, formulas that scan whole tables, relationships forcing the engine into slow paths — and we address the cause. Typical work includes removing columns no visual uses, replacing iterative DAX with set-based patterns, adding a proper date dimension for time intelligence, and reducing model size so it fits comfortably in memory. The result is reports that stay responsive as your data volume climbs.
Most model complaints map to a handful of root causes. The table below shows the patterns we see most often and how we resolve each one.
| Symptom | Likely cause | Fix |
|---|---|---|
| Slow report | Flat, over-wide model and table-scanning DAX | Star schema plus tuned, set-based measures |
| Numbers don’t tie out | Duplicated tables and bidirectional relationships | Shared dimensions and single-direction relationships |
| Filters behave oddly | Ambiguous filter paths or wrong cardinality | Clean relationship architecture and a dedicated date table |
| Huge file size | Calculated columns and unused high-cardinality columns | Move logic into measures and remove columns no visual uses |
Row-level security (opens in new tab) (RLS) is how one report safely serves an entire organization. Instead of building a separate file per region or team, we define roles and write filtering DAX so the data is restricted by who is signed in. A territory manager opens the report and sees only their territory; a VP sees the rollup. We map roles to your Microsoft Entra users or security groups, then test every role explicitly — because the failure mode of RLS is silent, and a single mistake can expose data it should not. Testing each role is part of the deliverable, not an afterthought.
Data modeling is the foundation; what sits on top is the visible report. If you also need the visuals, pages, and interactions built, our Power BI dashboard development service uses exactly the kind of model we engineer here. If your questions are broader — governance, workspace structure, rollout, or whether your whole BI setup is healthy — start with Power BI consulting. Either way, the model we build is yours, documented, and ready for your team to extend. A well-built model is also the foundation for embedded analytics, and if the language is new to you, our guide to DAX covers the basics. Storage mode is the first decision in any model — see DirectQuery vs Import mode and our star schema best practices guide. Where the source is a relational database, SQL Server Power BI dashboard development covers the storage-mode and gateway decisions. The same metadata that makes a model readable to your team is what makes it answerable by AI — if Copilot is on your roadmap, our Power BI Copilot consultant page covers the naming, descriptions, synonyms and verified answers that work needs.
Built for speed
We measure the model in DAX Studio, fix the costliest patterns, and reconcile every key figure before handover.
Authoritative reference: Microsoft’s official DAX function reference on Microsoft Learn (opens in new tab) documents every function we use, so your team can verify and extend our measures independently.
Who it’s for
Two dashboards show different revenue and nobody trusts either. You need one model where every number reconciles to a single source of truth.
Refreshes take too long and pages lag. You need profiling and tuning that targets the real cost, not cosmetic tweaks to the visuals.
Different teams must see different slices of the same report. You need row-level security defined and tested so no one sees what they should not.
Representative perspective
“Our reports finally agree with the finance close. They rebuilt the model around a star schema, moved everything into measures, and now a page that used to spin for fifteen seconds opens instantly.”Analytics lead, mid-market distribution company
Representative perspective
“Row-level security was the piece we kept getting wrong on our own. They defined the roles, wrote the filtering DAX, and tested each one so regional managers only see their own numbers.”Operations director, multi-site services firm
Bring your current model or your raw sources. On one call we will tell you where the time, the duplication, and the wrong totals are coming from — then scope the fix in hours so you can spend your prepaid Flex hours on exactly what needs fixing.
FAQ
The report is what people see — visuals, pages, and filters. The data model is the engine underneath: the tables, relationships, and DAX measures that decide what every number means. A clear, well-shaped model is why totals reconcile, filters behave, and pages load fast across thousands of rows.
You can connect tables directly, but Power BI is built for a star schema — fact tables surrounded by dimension tables. It is the single biggest driver of speed, correct totals, and predictable filtering. We almost always reshape flat or snowflaked sources into a star, which keeps DAX simpler and your model easier to extend.
Slow reports usually trace to the model, not the visuals: too many columns, bidirectional relationships, calculated columns doing work measures should do, or DAX that scans entire tables. We profile the model, find the costly patterns, and rebuild relationships and measures so the same questions return in a fraction of the time.
Row-level security (RLS) filters data by who is signed in, so a regional manager sees only their region and an executive sees everything — from one report. We define the roles, write the filtering DAX, map them to your users or security groups, and test each role so no one sees data they should not.
Yes. We name tables and measures consistently, organize them into display folders, and document the key DAX. You receive the model file, a short data-model map, and a walkthrough. Because the structure is clean and conventional, your analysts can add measures and columns without re-engineering the whole thing.
You buy a block of prepaid senior hours — from $100/hour, and they never expire. Submit your model or sources by email and we reply with a scope estimate and the hours needed before any work begins. You approve first, and hours are deducted only for approved work. Most modeling tasks are delivered in 3–5 business days; larger rebuilds get a clear timeline up front. See Flex pricing.
Book a free demo
Tell us the task. We scope it, you approve, and a senior consultant delivers — typically in 3–5 business days. Prepaid hours that never expire.
The fastest way to reach us is the form — tell us the task and we'll reply within one business day.