What actually moves out of Pentaho?
Pentaho bundles five things that Power BI splits differently. Pentaho Data Integration (Kettle) loads and shapes data. Mondrian is a relational OLAP engine: it holds no data of its own, but turns an MDX query from Analyzer, Saiku or JPivot into SQL against your warehouse using the cubes, hierarchies and aggregate tables declared in the schema. Report Designer produces banded, parameterised PRPT output. CTools (CDE, CDF and CDA) build dashboards from JavaScript components. The Pentaho Server holds the repository, the scheduler and the folder permissions that tie it together.
On the Power BI side, Power Query and Dataflows take the shaping role, a semantic model holds tables, relationships and DAX measures, reports and paginated reports consume it, and the workspace carries permissions and refresh. So the migration is a model rebuild with a known map, not a file conversion. The practical consequence is where ambiguity gets resolved. Mondrian can carry a hierarchy whose levels do not quite roll up, or a measure whose aggregator hides a grain problem, and still return a plausible number. A tabular model has no equivalent rescue: the grain has to be right in the table, or the measure is wrong everywhere it is used. That is why we read the schema before quoting the reports.
One decision is genuinely new. Because Mondrian queried the warehouse live, Pentaho teams never chose between storing data in the model and querying it in place. Power BI makes that choice explicit, and it shapes refresh, performance and licensing. Our DirectQuery versus Import guide walks through it; in practice most Pentaho cubes translate best to Import with incremental refresh, with DirectQuery reserved for the largest fact tables.
How do Pentaho objects map to Power BI?
This is the working map the plan is built from. It is deliberately unglamorous: the value of a migration map is that nothing surprising appears in week three, and that every line has an owner who agreed to it.
Pentaho objects and their Power BI equivalents
| Pentaho |
Power BI equivalent |
What changes in practice |
| Mondrian schema (XML) with one or more cubes |
Semantic model published to a workspace |
The cube definition leaves a hand-edited XML file and becomes a shared, refreshable model |
| Cube fact table and shared dimensions |
Fact and dimension tables in a star schema |
Dimension usages become relationships; degenerate dimensions become columns on the fact |
| Hierarchy with levels |
Model hierarchy on the dimension table |
Ragged and parent-child hierarchies (closure tables) are flattened with PATH functions in DAX |
| Measure with an aggregator (sum, count, distinct-count) |
A named DAX measure |
Aggregation stops being a schema attribute; each definition is written once and reused |
| Calculated member and named set (MDX) |
DAX measure, calculation group or calculated table |
MDX expressions are rewritten as DAX and reconciled one at a time against Analyzer output |
| Virtual cube across two cubes |
Two fact tables filtered by the same conformed dimensions |
What Mondrian assembled at query time has to exist in the model before the report is built |
| Aggregate table (AggName / AggPattern) |
Power BI aggregations, or Import mode making them unnecessary |
Pre-summarised tables are either mapped as aggregations or retired once the model is in memory |
| Mondrian role with schema, cube, hierarchy and member grants |
Row-level security role with a DAX filter expression |
Row rules move onto the model and are testable with the View as role feature |
| Kettle transformation (.ktr) feeding a report |
Power Query steps inside the model |
Report-specific shaping moves next to the model that consumes it |
| Kettle job (.kjb) loading the warehouse on a schedule |
Dataflow Gen2, or the existing warehouse kept and connected |
Shared loads are re-platformed only when the warehouse itself is being retired |
| Report Designer (PRPT) interactive report |
Power BI report page with slicers |
Parameters become slicers; formulas become measures on the shared model |
| PRPT print output with page breaks and subreports |
Paginated report in Power BI Report Builder |
Banded layout, repeating headers and every printed row are preserved rather than approximated |
| CDE dashboard (CDF components, CDA queries) |
Power BI report page |
Charts and selectors are rebuilt natively; custom JavaScript components are scoped individually |
| Analyzer or Saiku ad hoc view |
Matrix visual with hierarchies, or Analyze in Excel |
Drag-and-drill continues on the governed model instead of on the cube browser |
| Pentaho Metadata model (.xmi) for Interactive Reporting |
Display folders, descriptions and synonyms on the semantic model |
The business-friendly naming layer is carried into the model rather than kept beside it |
| Pentaho Scheduler and emailed output |
Scheduled refresh plus report subscriptions |
Delivery moves onto the same platform as the reports themselves |
| User Console folder permissions |
Workspace roles and app audiences |
Who sees which content becomes a permissions question, not a modelling one |
Two lines in that table carry most of the risk, and both are modelling lines rather than reporting ones. Conformed dimensions across a virtual cube and the treatment of aggregate tables are what stop a multi-cube rebuild from quietly disagreeing with the original, which is why we design against Microsoft's star schema guidance (opens in new tab) from the first cube and explain the reasoning in our own Power BI star schema guide.
What happens to the Kettle transformations?
This is the question that decides the shape of the project, so we answer it per job rather than for the estate as a whole. Every transformation and job lands in one of three groups. The first group shapes data for one report or one cube and nothing else; those steps move into Power Query inside the semantic model, where they refresh with it. The second group loads the warehouse the cubes read on a schedule. If that warehouse is staying, the jobs stay too, and Power BI connects to the tables they produce. That is the lowest-risk first phase, because nothing upstream changes while the reporting layer is rebuilt and reconciled.
The third group is the one that needs honesty. If the warehouse is being retired along with Pentaho, the shared loads have to be re-platformed, usually as Dataflows Gen2 (opens in new tab) for straightforward loads and as Data Factory pipelines where Kettle was orchestrating many steps, multiple targets or error handling. That is data engineering rather than report migration, and it is scoped separately through our Microsoft Fabric consulting work so the reporting rebuild is not held hostage to it.
How is security rebuilt?
Pentaho enforces two different things that get discussed as one. Mondrian roles restrict which members of which hierarchies a user can see, which is row security. Repository folder permissions in the User Console restrict which reports and dashboards they can open at all, which is object security. Those separate cleanly in Power BI, and keeping them separate is what makes the rebuild testable.
Member grants become row-level security (opens in new tab) roles on the semantic model, written as DAX filters and verified role by role before anyone else sees the report. Hierarchy grants that hid whole levels are handled with object-level security or by leaving the column out of the model. Folder visibility becomes workspace roles and app audiences. Where Pentaho roles were mapped from LDAP or Active Directory groups, the same groups are used for Power BI role membership so nobody has to maintain two lists.
Can Power BI replace Analyzer, Saiku and CDE dashboards?
Analyzer and Saiku are cube browsers: drag a hierarchy onto rows, a measure onto columns, drill, filter, pivot. Power BI's matrix visual on a model with proper hierarchies covers that for most people, with drill-down, drill-through and Show as table replacing the cube browser's controls. For the finance analysts who used Analyzer as a pivot table, Analyze in Excel connects a real pivot table to the governed model, which is often the feature that ends the resistance. Saved views a team depends on every month are rebuilt as report pages so nobody has to recreate them.
CDE dashboards are a different case. A CDE dashboard is a layout of CDF components fed by CDA queries, and it often carries custom CSS and JavaScript that one developer wrote years ago. Charts, tables and selectors rebuild natively in Power BI without the custom code. Bespoke components that do something a native visual cannot are scoped individually, and the honest answer is sometimes that the behaviour was a workaround for a modelling problem the new model no longer has.
What about Report Designer output?
Report Designer produces two kinds of thing that look alike in the repository. Interactive PRPT reports with parameters and drill links become Power BI report pages, with parameters turned into slicers and formulas turned into measures on the shared model. Banded print output, such as statements, invoices, statutory packs and anything with subreports and page breaks, is not a dashboard and should not be forced into one. That output moves to paginated reports (opens in new tab) built in Power BI Report Builder, which control page breaks, repeating headers and printing every row. Confirm the licensing for paginated reports against Microsoft's current documentation before committing to that design, because it depends on your capacity and licence type.
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. Reading the Mondrian schema, inventorying the Kettle jobs and cataloguing the PRPT and CDE content for a typical mid-market estate fits inside a Starter block, and it is the task we recommend buying first, because it converts an unknown repository into a list with hours against every line.
After that, cost tracks the shape of the model far more than the number of reports. A single cube feeding twenty PRPT reports is a much smaller job than three cubes joined through a virtual cube, a set of MDX calculated members and a Mondrian role per business unit. You get an estimate in hours per deliverable, approve only what you want built, and unused hours stay banked. See how Flex pricing works.
How long does it take?
Individual reports typically ship within 3–5 business days of approval once the model is standing, and a phased migration is a sequence of those tasks rather than one project ending in a big-bang cutover. The model itself is the front-loaded piece: it is worth building and reconciling before the report queue starts, because every report after it gets cheaper. Microsoft's own Power BI migration guidance (opens in new tab) recommends the same phased shape.
Running Pentaho alongside Power BI for one full reporting cycle is worth the overlap, and it is cheap when the Kettle loads keep running in place. Users compare both outputs on live data, and the old server 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 Pentaho estate they can no longer maintain comfortably: an Enterprise Edition renewal that has stopped looking like value, a Community Edition install that nobody wants to upgrade, a Schema Workbench file only one person understands, or a folder of Kettle jobs whose author has left. It is a poor fit for anyone wanting a like-for-like screen copy of every CDE dashboard with its custom JavaScript intact, or for teams whose main problem is the ETL layer rather than the reporting; those teams should start with Fabric work and come back to the reports afterwards.