Retiring Crystal Reports

A Crystal Reports to Power BI migration that survives contact with your subreports

We inventory the .rpt estate, classify what people still read, then rebuild it on a governed model: parameters become slicers, embedded SQL becomes a documented query, and the print-perfect output finance signs off on keeps its layout.

  • Microsoft-certified
  • Prepaid hours that never expire
  • US-based senior engineers
  • Reconciled against your originals
  • You own everything
Revenue Overview Revenue$4.2M Margin38% Orders12.4k Churn2.1% Monthly performance By segment 64%

Representative dashboard — sample data

Why teams move

Nobody wants to open the .rpt files any more

A Crystal estate is rarely retired because someone dislikes the tool. It is retired because the reports have outlived the people who wrote them. The formulas are undocumented, the designer runs on one aging desktop, the reports connect straight to the production database over ODBC, and every change request turns into an archaeology project. Meanwhile the business already pays for Microsoft 365 and wants the same numbers somewhere people can filter them.

The work divides into three honest parts: finding out what is actually read, rebuilding those reports on a proper semantic model, and proving the outputs still agree with the originals. Skip the first and you pay to rebuild reports nobody opens. Skip the third and adoption collapses the first time two figures disagree at month-end.

What the migration covers

  • Report inventory
  • Classification and triage
  • Embedded SQL unpacked
  • Formula fields → DAX
  • Parameters → slicers
  • Subreports resolved
  • Fixed-layout print output
  • Reconciliation & cutover

Try us risk-free for 4 hours

Start with a block of prepaid Flex hours and, if you're unhappy within the first 4 hours, we refund you in full — no questions asked. The report inventory makes a good first task: it tells you the true size of the job before you commit a budget to it.

How we approach it

Rebuilt in priority order, not in file-name order

The hard part of leaving Crystal is not drawing charts. It is finding where the logic hid, deciding what still deserves to exist, and keeping the print output that a regulator or a customer expects.

Inventory and classify first

Every .rpt file is listed with its owner, run frequency, data source, and a recommendation: rebuild interactive, keep fixed-layout, merge, or retire. You approve the list before anything is built.

Where the logic actually hid

Record selection formulas, formula fields, running totals, and the joins in the database expert get read and written down before a single visual is drawn. That document usually outlives the migration.

Subreports resolved, not copied

Most subreports exist because Crystal needed a second query. On one shared model that need usually disappears, and the subreport becomes a matrix, a second visual, or a drillthrough page.

Prompts become self-service

Parameters that forced a rerun every time somebody wanted a different branch become slicers users drive themselves — and stay as report parameters where a scheduled PDF still needs them.

Print output kept where it matters

Invoices, remittance advice, and statutory packs are not dashboards. Those stay fixed-layout so the page breaks, headers, and totals land exactly where the recipient expects them.

Off the production database

Direct ODBC connections that ran heavy queries against live tables are replaced with a governed Import or DirectQuery model through a gateway, on a refresh schedule your DBA agrees to.

Which parts of a .rpt file really move?

Crystal is a banded report writer: you design against sections, and each report carries its own connection, query, and calculations. Power BI splits that into two layers — a semantic model holding the data and the measures, and reports that visualise it. A migration is therefore a rebuild with a known map, not a file conversion, and the map is what keeps it predictable.

The consequence worth understanding up front is that logic stops living inside individual reports. In Crystal, two reports can filter the same table differently and both look authoritative. In Power BI that definition is settled once in the model. Expect that conversation early; it is the most valuable and most political part of the project, and the reason we classify before we build.

How do Crystal Reports elements map to Power BI?

This is the working map we build the plan from. It is deliberately dull, because the point of a migration is that nothing surprising turns up in week three.

Crystal Reports elements and their Power BI equivalents
Crystal Reports Power BI equivalent What changes in practice
Report file (.rpt) Report (.pbix) plus a shared semantic model Data and calculations move out of the file into a model many reports reuse
Subreport Additional visual, matrix, or drillthrough page on the same model Usually merged into one report; only genuinely separate content stays separate
Parameter prompt Slicer or filter (report parameter in a paginated report) Users change the view themselves instead of re-running the report
Record selection formula Power Query filter, DAX filter, or row-level security Filtering becomes explicit and testable rather than hidden in the report
Formula field DAX measure, or a column in Power Query Most become measures; columns only where a row-level value is truly needed
Running total field DAX measure using time intelligence or a running-total pattern Rebuilt against a proper date table so period comparisons work everywhere
Group headers and footers Matrix row groups, or RDL groups in a paginated report Banded sections become grouping and totals defined in the visual
SQL command / stored procedure source Power Query source query, database view, or the procedure retained Query logic is documented, then split between the database and the model
Direct ODBC or OLE DB connection Import or DirectQuery through an on-premises data gateway Scheduled refresh replaces ad-hoc queries hitting production tables
Pixel-perfect print layout Paginated report built in Power BI Report Builder Page layout, breaks, and repeating headers are preserved for printed output
Scheduled export or emailed PDF Subscription from the Power BI service Delivery moves onto the same platform as the reports themselves

Because record selection formulas and stored procedures often carry the real business rules, that unpacking is a task in its own right. Transformation logic that belongs upstream goes into Power Query (opens in new tab); aggregation logic becomes measures on a star-schema model, which is the data modeling and DAX half of the job. Microsoft's own Power BI migration guidance (opens in new tab) follows the same sequence: assess and prioritise the estate before you rebuild any of it.

What happens to pixel-perfect print output?

This is the objection that stops most Crystal migrations, and it is a fair one. A standard Power BI report is built for interaction on a screen: a table you scroll prints only the rows that were visible. An invoice, a statement, or an audit pack has to print every row, break pages in the right places, and repeat headers and footers exactly.

That work belongs in a paginated report (opens in new tab), authored in Power BI Report Builder, which gives exact page-layout control and prints all the data in a table across as many pages as it takes. Microsoft documents export to PDF, Excel, Word, CSV, and other formats, plus email subscriptions that attach the rendered output — the closest equivalent to the scheduled Crystal export most teams are replacing. Confirm your workspace and capacity plan against Microsoft's current licensing documentation before committing to a design.

In practice an estate splits cleanly: anything a person explores becomes an interactive report on the shared model, and anything a person prints, files, or sends to a customer stays fixed-layout. We make that call during classification and record the reason, so it is auditable later.

What does the migration cost?

Work runs on prepaid Flex hours that never expire: Starter 20 hours ($2,500), Growth 40 hours ($4,600), or Power 80 hours ($8,000), with hourly work from $100/hour. Inventory and classification of a typical mid-market estate fits inside a Starter block, and it is the task we recommend buying first, because it converts an unknown number of report files into a scoped list with hours against each line.

After that, cost tracks how many reports survive classification and how much logic they carry. A parameter-driven listing with two totals is a very different job from a six-subreport statement pack with nested selection formulas. You get an estimate in hours per report, approve only what you want built, and unused hours stay banked. See Flex pricing.

How long does each report take?

Individual reports typically ship within 3–5 business days of approval, and a phased migration is a sequence of those tasks rather than one project ending in a big-bang cutover. Larger estates get a clear timeline and order once the inventory is done: highest-value and highest-risk first, the long tail last.

Running Crystal alongside Power BI for one full reporting cycle is worth the overlap. Users compare both outputs on live data, and the old designer is switched off only once the replacements have been through a real month-end.

Who this is for

Finance, operations, and IT teams carrying a Crystal estate they can no longer maintain comfortably: an ERP that ships .rpt files, a designer nobody has upgraded, reports hitting production directly, or a knowledge gap left by whoever wrote the formulas. It is a poor fit for anyone wanting a like-for-like copy with no decisions made — that buys a more expensive version of the problem you already have.

What you get

  • A full .rpt inventory with owners and usage
  • Rebuild / fixed-layout / merge / retire calls
  • Documented formulas and selection logic
  • A governed semantic model with DAX measures
  • Reconciliation against the Crystal originals
  • Handover docs and a user walkthrough
3–5

business days per report

Phased

not big-bang

You

own everything

Buy the inventory task first and decide the rest once the real scope is visible. Still weighing a rebuild against a repair? When to rebuild a Power BI report frames the call.

How it works

From a folder of .rpt files to reporting people trust

  1. 1

    Inventory and classify

    We catalogue every report with owner, run frequency, source, and complexity, then classify each as rebuild, keep fixed-layout, merge, or retire. You approve the list and the hours behind it before work starts.

  2. 2

    Rebuild in priority order

    Surviving reports are rebuilt highest-value first on one governed model: formula fields become tested DAX measures, embedded SQL is unpacked, parameters become slicers, and print packs are built fixed-layout.

  3. 3

    Reconcile, cut over, support

    Each report is run beside its Crystal original, differences are explained, then we publish, set refresh and permissions, walk your users through it, and stay available on the hours you have left.

Representative perspective

We thought we had to move everything. Classification showed most of the folder was seasonal reports and one-off exports, and what genuinely mattered fitted on a single page.
Controller, mid-market distributor

Representative perspective

The question that decided it for us was the customer statements. Once we saw those still printing exactly as before, the rest of the migration stopped being an argument.
IT manager, manufacturing group

Find out how big your Crystal estate really is

Tell us roughly how many report files you have and which ones month-end depends on. We'll scope the inventory and classification task in hours, so you can see the real project before committing to it.

FAQ

Questions teams ask before they commit

No. A .rpt file stores its logic in record selection formulas, formula fields, and subreports that have no direct Power BI equivalent, so reports are rebuilt rather than converted. What is systematic is the inventory, the classification, and a reusable pattern library that turns familiar Crystal constructs into DAX.

Most subreports exist because Crystal needed a second query against a different grouping or a different table. On a shared semantic model that second query is usually unnecessary, so the subreport becomes another visual, a matrix, or a drillthrough page. Where it genuinely stands alone, it becomes its own report.

Yes, through paginated reports built in Power BI Report Builder, which give exact page-layout control and print every row across as many pages as needed. Invoices, statements, and statutory packs stay fixed-layout; the interactive analysis moves to standard reports. We decide report by report which format fits.

They are read, documented, and usually moved. Filtering and joins go into Power Query or a database view, while aggregation logic becomes DAX measures so it can be reused. Stored procedures that encode genuine business rules often stay in the database, with the model consuming their output.

Each rebuilt report is run beside its Crystal original on the same parameters and date range, and every difference is explained before sign-off. Some differences are corrections: a rebuild frequently exposes a selection formula or join that quietly excluded rows nobody had questioned in years.

Related work

This page covers the Crystal path specifically. If your legacy reporting is a mix of tools, our broader migration to Power BI service covers the Excel and Qlik routes, an RDL estate on a report server is handled on the SSRS to Power BI migration page, teams retiring an IBM stack should read the Cognos to Power BI migration page, where Framework Manager packages and stitch queries are rebuilt as a star schema, and moving off Tableau has its own Tableau to Power BI migration page. Crystal usually arrives as one half of a wider SAP estate: if Universes and Web Intelligence documents sit alongside these .rpt files, the semantic-layer rebuild is scoped separately on our SAP BusinessObjects to Power BI migration page, and the two workstreams are planned together so the banded output and the ad-hoc reporting land on the same model. If you are running Domo, our Domo to Power BI migration page maps cards, Beast Modes, Magic ETL, PDP and Workflows into Power BI one by one. Once the numbers are rebuilt, Power BI report design makes the replacements clearer than the originals rather than merely equivalent, and Power BI consulting covers the workspace, licensing, and governance decisions a first rollout brings. Every task is scoped before work begins from your prepaid block of senior-led hours, and hours are deducted only for work you approve.

Book a free demo

Get senior Power BI help, on demand

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.

  • Prepaid hours from $100/hour — and they never expire
  • Senior-led delivery — 20+ years on the Microsoft platform
  • Typical 3–5 business day turnaround
  • Full refund if you’re unhappy in your first 4 hours

The fastest way to reach us is the form — tell us the task and we'll reply within one business day.

All fields are required.

We reply within one business day. No newsletters, no drip campaigns.

Book a Free Demo