The .rpt file is where your business logic actually lives
The awkward truth about a Crystal estate is that the reports are not just presentation. Years of rules — how a discount is applied, which orders count as shipped, what "net" means on the statement a customer disputes — were written into formula fields, running totals, and record selection formulas inside individual .rpt files. Nobody wrote them down anywhere else, and the person who wrote them has usually left.
That is why an automated converter is the wrong instrument for a small estate. Crystal's formula language and DAX are not the same kind of thing: Crystal evaluates in report passes over a record set, while DAX (opens in new tab) evaluates measures against filter context on a model. A machine translation of the syntax produces something that runs and quietly answers a different question. We re-derive each formula from the rule it encodes, confirm it with the person who owns the number, and put row-level work in Power Query (opens in new tab) and aggregation work in a measure written once on a star-schema model (opens in new tab).
Subreports, cross-tabs, and the constructs with no direct equivalent
Some Crystal constructs land cleanly. Others do not exist in Power BI at all, and pretending otherwise is how these projects overrun. The subreport is the clearest example: a whole second report embedded in a band of the first, running its own query, often linked on a field. An interactive Power BI report has no such object. The honest answer is that a subreport is a modelling problem wearing a layout costume — in most cases the two queries belong in one semantic model, and the embedded detail becomes a drillthrough page or an expandable matrix. When the printed artifact genuinely has to keep its shape, the section is rebuilt in Power BI Report Builder as a paginated report (opens in new tab) instead.
The same care applies to groups with suppressed sections, cross-tabs with running totals in the margins, and record and group selection formulas that silently filter what the report ever sees. Each is scoped as its own line item, because "convert 40 reports" is a meaningless number when three of them carry nine subreports between them. This is the point where our approach differs from the field: if your estate really does run to hundreds of reports on a Microsoft report server instead, our SSRS to Power BI migration service is the right page — there the RDL definitions travel largely intact and the work sits in subscriptions and folder security. If the incumbent is a modern self-service BI tool, our Tableau to Power BI migration service covers rebuilding the semantic layer under workbooks that carry their own logic, and our QlikView to Power BI migration service covers the QlikView variant of the same problem, where the business rules sit in a load script and in set analysis expressions rather than in formula fields. If the reports are Cognos rather than Crystal, our Cognos to Power BI migration service is the closer match: the business rules there are governed centrally in a Framework Manager package instead of being redefined inside every report file. And if the SAP estate in question is the BI platform rather than the report writer — universes, Web Intelligence documents, BI Launch Pad and scheduled publications — our SAP BusinessObjects to Power BI migration service is the page for that: same vendor, a different product, and a governed semantic layer that has to be read as a specification before any document is rebuilt.
Where each Crystal construct lands
Most Crystal estates decompose into the same pieces. The table below is the mapping we work from; the inventory in your written scope is a filled-in version of it, report by report.
| In Crystal Reports |
Where it lands in Power BI |
What the work involves |
| Formula fields (Crystal or Basic syntax) |
Power Query column or DAX measure |
Row-level logic becomes a query step; anything that aggregates or compares periods becomes a measure, re-derived from the business rule rather than translated token by token |
| Running totals and summary fields |
DAX measures on the shared model |
Reset-on-group and evaluate-after behaviour is re-expressed with explicit filter context, then reconciled against the live Crystal output line by line |
| Record and group selection formulas |
Query filters, report filters, row-level security |
Hidden filters are surfaced and classified: data that should never load moves upstream, user-dependent filtering becomes row-level security rather than a formula |
| Subreports (linked or unlinked) |
One model plus a drillthrough page — or a Report Builder section |
No equivalent object exists in an interactive report, so each is rebuilt: usually merged into the semantic model, occasionally kept as a paginated section when the print layout must survive |
| Cross-tabs |
Matrix visual on the semantic model |
Rows, columns, and summarised fields map onto a matrix; margin totals and percentage-of-parent calculations are rewritten as measures instead of grid-level settings |
| Groups with conditional suppression |
Hierarchy plus visual-level filters, or paginated visibility rules |
Each suppression condition is read as a business rule and re-implemented where users can see it, rather than hidden in section formatting |
| Parameter fields and prompts |
Slicers, or paginated report parameters |
Prompt-then-run becomes filter-then-explore for analytical reports; documents that must be produced for one order or one customer keep real parameters in Report Builder |
| Print-fidelity output (invoices, statements, compliance forms) |
Paginated report in a Power BI workspace |
Rebuilt in Report Builder with page size, headers, footers, and page breaks matched, then render-tested against the PDF your Crystal report produces today |
| Report launched from inside your ERP |
Secure embed, workspace app link, or Power Automate export |
The invocation path is documented first, then replaced with whatever your ERP supports; scheduled or bursted output becomes a flow with visible run history |
| Databases and stored procedures behind the reports |
Stay where they are, read through a data gateway |
Nothing is moved; Power BI connects alongside Crystal so both can run in parallel while each report is reconciled |
| Designer licences, scheduler, viewer and runtime components |
Nothing — this is what you retire |
Written retirement plan: remaining dependencies, what still calls the runtime, and a shutdown date you choose rather than discover |
Reports launched from inside your ERP
This is the scoping question that separates a Crystal migration from every other reporting move, and the one most proposals skip. Crystal is rarely reached from a report portal. It is reached from a button in an ERP, a menu item in a line-of-business application, or a nightly scheduler that bursts a PDF per customer. Move the report and leave the button, and you have not finished the job — you have given forty people two places to look.
So the invocation path is inventoried alongside the reports. Some ERPs will happily open a URL, in which case a link to a workspace app or a filtered report is enough. Others support hosting a page, where Power BI's secure embed (opens in new tab) puts the report inside the application with your existing sign-in still doing the authentication. Where the report was never interactive to begin with — the statement run that mails a PDF to every account on the first of the month — the right replacement is a scheduled export, which is the kind of work our Power Automate consulting service covers in more depth. Underneath all three options, your databases stay where they are and Power BI reads them through a data gateway (opens in new tab), so Crystal and Power BI can run side by side until every report has been signed off.
Who this is for
It fits organisations already on Microsoft 365 that are carrying a Crystal estate somewhere between a dozen and a few dozen reports: a designer licence or two, a scheduler nobody wants to touch, a runtime pinned to an ERP version, and a set of reports that genuinely still matter. The trigger is usually an ERP upgrade, a server rebuild, or the moment someone asks why reporting lives outside the platform everything else already runs on.
It is deliberately not scoped as an enterprise programme. If you have hundreds of reports and want a tool to convert them in bulk, several firms sell exactly that and you should talk to them. What we sell is one fixed-fee project with a stated end date, where the first deliverable is a shorter list of reports than you started with. Once the estate lands, new reporting built on the model is separate work — that is our fixed-fee Power BI dashboard development service, and the guide to what a Power BI dashboard actually costs explains how scope drives a number. Licensing comes up early too, and the small-business licensing guide covers the options — including the fact that publishing paginated reports has a different licensing footprint from publishing interactive ones, which is a decision worth making before the rebuild rather than after.
Delivery in three phases
The table shows scope and typical timeline rather than prices, because an honest number requires seeing your report list and your subreport count first — the same principle described on how our fixed-fee process works.
| Phase |
Scope |
Typical timeline |
Fee |
| Phase 1 — inventory, triage, and the model |
Every .rpt catalogued with its owner, usage, and invocation path; the dead ones retired by agreement; workspace and gateway set up; the shared semantic model built from the tables the survivors depend on |
About the first week |
Fixed fee — scoped after your free consultation |
| Phase 2 — formulas, subreports, and print documents |
Formula fields and running totals re-derived as Power Query steps and DAX measures, subreports and cross-tabs rebuilt, print-fidelity documents recreated as paginated reports, each reconciled against live Crystal output |
Weeks 2–3 |
Fixed fee — scoped after your free consultation |
| Phase 3 — rewire and retire |
ERP-side invocation replaced with an embed, link, or export flow; access rules applied and tested; user walkthrough delivered; plus the written retirement plan for the designer licences, scheduler, and runtime |
Week 4 and close-out |
Fixed fee — scoped after your free consultation |
Everything produced is yours from the first day: the semantic model, every measure, the report and paginated report files, the flows, and the workspace configuration all live in your own Microsoft tenant, never in ours.