The bottom line
The SSIS/SSAS/Power BI stack survives because it is predictable — capex cost, known performance, in-house skills, no consumption meter. Migration is forced by operational symptoms with dates, not by technology age: the SSIS developer leaving, a batch window that no longer fits the operating day, non-relational data you now need, refresh crossing the usefulness line, a hardware or licence decision, or a cube that cannot answer new questions. Most of the stack has a Fabric equivalent, but not one-to-one: SSIS becomes Data Factory/notebooks, SSAS tabular becomes a semantic model, SSAS multidimensional has no equivalent and must be rebuilt, and the on-premises gateway is still required. The strangler pattern — running both stacks and moving one subject area at a time behind a stable reporting layer — completes most often in mid-market estates. What breaks reliably: script tasks, MDX scoped assignments, undocumented stored-procedure logic, and Import-mode habits colliding with Direct Lake.
In This Article
A working stack on predictable cost is an asset
A stack that produces correct numbers on a predictable cost line, on skills you already have in the building, is a genuine asset. Replacing it costs money, attention and risk. The case has to be made on operational symptoms with dates attached, not on architecture diagrams.
This is the component-level version of that case: what maps to what, which migration approach completes, what breaks, and when not to move at all.
Why has the SSIS + SSAS + Power BI stack survived so long?
It survives because it is predictable. Four properties keep it alive, and each is real: cost predictability (an owned server and a SQL Server licence produce a flat, forecastable line — no capacity units, no throttling), a known performance envelope (the batch runs at 02:00, reports are ready at 06:30), skills already in the building (T-SQL and SSIS are widely held; Spark notebooks are not), and it is good at what it does (an SSAS tabular model over a well-built star schema answers financial queries fast).
What changes the answer is not the technology. It is a set of operational symptoms the stack cannot resolve without disproportionate effort.
What actually forces the change?
Migration is forced by operational symptoms, not technology age. Six, in the order I usually meet them:
- The person left. Sixty packages, no documentation, and one person understood the control flow. Every change request is now a discovery project
- The batch window closed. Volumes grew several times over; the window with four hours of slack now has twenty minutes, and one late source file means yesterday's numbers at the morning meeting
- The data you now need is not relational. Machine data over OPC-UA or MQTT, SCADA extracts, telematics JSON, scanned delivery notes. SSIS can be made to do some of this, but the result is fragile
- Refresh has crossed the usefulness line. A report landing at 07:20 for a 07:30 meeting has failed even if it is correct — the most persuasive trigger in a board paper
- A capital decision has arrived. The server is out of warranty, or SQL Server 2016 extended support ended in July 2026; money is being spent either way
- The cube cannot answer the new question. A new dimension means a model change, a reprocess and a regression test, so the answer becomes "no" and the business builds a spreadsheet
If none of these six is true, you probably do not have a migration case yet. Say so, and spend the budget where it earns more.
What maps to what in Microsoft Fabric?
Most of a legacy Microsoft BI stack has a Fabric equivalent, but the mapping is not one-to-one:
| Legacy component | Fabric equivalent | The honest note |
|---|---|---|
| SSIS packages (SQL Agent) | Data Factory pipelines, Dataflow Gen2, notebooks | Invoke SSIS Package activity is preview; packages must sit in OneLake, no on-prem connectivity. A bridge, not a destination |
| SSIS script tasks / third-party components | Notebooks (PySpark/Python) | No automatic conversion — rewrite work, where lift-and-shift estimates break |
| SQL Server warehouse | Fabric Warehouse (T-SQL, DML) or Lakehouse (Spark) | Warehouse suits SQL teams; Lakehouse suits engineering teams and non-relational data |
| SQL Server as a source | Mirroring into Fabric (GA for SQL Server 2016–2025) | Replication compute free; removes a large slice of extract logic |
| Stored-procedure logic | Warehouse stored procedures | T-SQL surface differs — triggers, materialised views, synonyms, recursive queries unsupported |
| SSAS tabular model | Fabric/Power BI semantic model (Import or Direct Lake), XMLA endpoint | The closest thing to a clean path; Tabular Editor still works |
| SSAS multidimensional cube | No equivalent — rebuild as tabular | Multidimensional unsupported; MDX scoped assignments, writeback, custom rollups have no equivalent |
| On-premises data gateway | Still the on-premises data gateway | Migrating does not remove it; Direct Lake on OneLake does not support gateway connections at all |
That last row is the one people miss. Migrating to Fabric does not remove the gateway; it changes what the gateway is for. And if your target model is Direct Lake on OneLake, the data has to already be in OneLake — the gateway cannot serve it.
Which migration approach actually works?
| Approach | First useful output | Where it works | Where it fails |
|---|---|---|---|
| Lift-and-shift | 6–10 weeks | Clean star schemas, few script tasks, a hardware/licence deadline | You inherit every undocumented workaround and pay consumption rates to run inefficient logic |
| Rebuild | 4–8 months to parity | Estates where the model is genuinely wrong, or OT data is central | Long gap before anything visible; sponsorship dies in month four |
| Strangler pattern | 6 weeks for the first subject area | Almost every mid-market estate | Two platforms run in parallel for 2–4 quarters — must be in the business case |
The strangler pattern wins for a plain reason: it keeps the legacy stack authoritative until each workload is proven. Finance keeps closing on numbers it trusts. The programme earns permission to continue every six weeks rather than asking for it once, for eight months, up front. The cost is parallel running — price it, and put a decommission date with an evidence test against every workload.
The strangler pattern earns permission to continue every six weeks — not once, for eight months, up front. That is why it completes where a full rebuild stalls in month four.
What genuinely breaks
Four things break reliably. SSIS script tasks and custom components — a .NET script doing a bespoke parse is a rewrite in Python, and the preview Invoke SSIS Package activity does not support custom components either. MDX that has no tabular equivalent — scoped assignments, custom rollups, named sets, writeback and ragged hierarchies are multidimensional-only; some translate to DAX, some encode a business rule that has to be re-agreed with finance before it can be rewritten at all. Budget the conversation, not just the code.
Stored-procedure logic nobody wrote down — the 900-line procedure computing net sales contains exclusions added by four people over eight years; the Migration Assistant converts schema and procedures, but it cannot tell you why an exclusion exists — only the credit controller can. And Direct Lake versus Import-mode habits — Direct Lake supports no calculated columns, calculated tables, hierarchies or aggregations, and binary and GUID types must become strings; every mature SSAS tabular model I have opened carries at least three of those. Import mode remains a legitimate answer — it is not a failed migration.
What changes in the CFO conversation
Migration converts a capital cost with a known depreciation profile into an operating cost that varies with usage. The CFO is not resisting the cloud; they are resisting a line item that cannot be forecast. Three points make the conversation work. Name what leaves the P&L and when — a migration with no decommission date is a cost increase, while one where the ESU renewal, the hardware refresh and the third-party ETL licence all disappear on a stated date is a substitution. Separate baseline from variable — reserve steady state, not the migration peak.
And do not hide the licence line — below F64, every Power BI viewer still needs a Pro or PPU licence, and on a 300-user rollout that can exceed the capacity line.
When NOT to migrate
Four situations where I have advised against it:
- The stack works and no symptom has a date on it. No batch pressure, no leaver, no capital decision, no unanswerable question. Wait — the migration will be cheaper and better understood in eighteen months
- Your data volumes are small and your questions are stable. A 200 GB warehouse serving 40 users with a fixed report set gets little from Fabric and gains a consumption meter it did not have
- You are mid-ERP-replacement. Migrating the BI stack off a source system you are about to replace means doing the work twice. Sequence it
- Nobody owns the definitions. If "active customer" is disputed between sales and finance and no one can settle it, that disagreement surfaces as a reconciliation failure in month three and stops the programme
What to do first
Five questions to answer this week:
- How many SSIS packages contain script tasks or third-party components? That number is your rewrite estimate
- Is your SSAS model multidimensional or tabular? Tabular is a migration; multidimensional is a rebuild — different programmes, different budgets
- What is the actual batch finish time over the last 30 days, and what time is the meeting that consumes it? The gap is your business case in one line
- What capital or licence decision is due in the next 12 months — hardware, SQL Server ESU, ETL renewal? That date is your natural programme start
- Which three report definitions are currently disputed between departments, and who can settle each?
We run these as a strangler migration on fixed scope after a short paid discovery, one subject area at a time, with a decommission date against each. First value in six weeks.
A working stack on predictable cost is an asset; "it is old" is not a case. Migrate on symptoms with dates, one subject area at a time, with a decommission date against each. Book 30 minutes with Amit — no slides, no pitch deck, no obligation to proceed — a straight read on whether your estate has a migration case yet, and which component would move first.
Free Assessment
Where does your operation sit on the data maturity curve?
8 questions. 3 minutes. You get a scored breakdown across data infrastructure, analytics readiness, and automation potential — with a specific next step for your industry.