Prepared for Jay Carter & Mary Nail · March 2026

From SharePoint 2013
to Microsoft Fabric

A staged, low-risk migration that preserves your existing data model and business logic — no big-bang rewrite, no disruption to users.

272 active thin Excel files
20–28 Power BI reports (target)
Stage 0 live in 1–2 weeks
3+ years past Microsoft EOL
Where You Are

A platform built to last — that outlasted its era

The BMD BI portal is a real engineering achievement: a 473 MB Power Pivot model driving 272 active thin Excel reports across 27 divisions. It works. The problem is the foundation it runs on.

Current Architecture

End of Life — April 2023
flowchart TD A["🗄️ SQL Server\n(PFBMDSQL01)"] -->|manual refresh| B["📊 SSAS Tabular\n(BMDSSAS01)"] B -->|export + publish| C["📁 BMD_Core.xlsx\n473 MB Power Pivot · compat 1100"] C -->|MSOLAP connection| D["📑 272 Thin Excel Files\n215 Daily · 26 Weekly · 31 Monthly"] D -->|Excel Services REST| E["🌐 SharePoint 2013\nbmdbi.portalfront.com"] E --> F["👥 End Users"]

The Real Pain Points

What's holding you back
  • SharePoint 2013 support ended April 2023 — no security patches, no vendor support, no recovery path
  • Running on EOL infrastructure puts cyber insurance coverage at risk — insurers increasingly exclude unpatched systems
  • Manual refresh cycle: SQL → SSAS → Core.xlsx → 272 files. One failure = stale data everywhere
  • 272 thin files to maintain — any path change breaks them all simultaneously
  • No mobile access, no Teams integration, no modern sharing or collaboration
  • Power Pivot at compat ~1100 (2012 era) — isolated from 12 years of DAX improvements
  • No row-level security — every user with portal access sees all division data

The risk isn't theoretical — it's a question of when, not if

The SharePoint server, the SSAS Tabular service, the PortalFront hosting contract — any one of these can fail without a Microsoft-supported recovery path. The system is currently stable, but stability isn't safety. Three years of unpatched vulnerabilities accumulate silently. The cost of a forced migration after a failure is dramatically higher than a planned one now.

473 MBCore model file size
272Active thin Excel files
403DAX measures in model
3+ yrsPast Microsoft end-of-life
291Stale/archived files (skip)

Where You're Going

The same data. A modern platform.

Microsoft Fabric + Power BI is the natural successor to this stack — built specifically to absorb SSAS Tabular models and Power Pivot logic without starting from scratch.

Target Architecture

Modern · Supported · Scalable
flowchart TD A["🗄️ SQL Server\n(on-prem or Azure SQL)"] -->|ADF pipeline| B["🏗️ Fabric Lakehouse\n(cloud-managed)"] B -->|DirectLake| C["📊 Power BI Semantic Model\nModern DAX · calc groups · WINDOW"] C --> D["📱 20–28 Power BI Reports\nSlicers replace 272 thin files"] D --> E["🌐 Power BI App\nBranded portal · familiar navigation"] E --> F["👥 Users · Web · Mobile · Teams"]

What You Gain

The upside
  • 272 thin Excel files collapse to 20–28 Power BI reports — division and period slicers replace separate files
  • Automatic scheduled refresh — no manual cycle, monitored, alertable on failure
  • Full mobile experience — sales reps access live data on their phone before a customer visit
  • Microsoft Teams integration — reports embedded in channels, discussed in context
  • Row-level security — division managers see their division; leadership sees everything
  • Copilot / AI — ask questions in plain English, get instant visual answers without IT
  • Full Microsoft support — Fabric is the current strategic platform, not a dead end

On the compatibility question — your concern is the right instinct

A prior Excel 2013 upgrade attempt failed because SSAS version-to-version upgrades were notoriously brittle. Power BI's XMLA import path is fundamentally different — it reads the model directly rather than stepping through compatibility levels. Your existing DAX at compat ~1100 is additive-compatible upward: it runs as-is in modern Power BI. There will be cleanup work in Stage 3, but it's targeted modernization — not a rewrite. Every measure that works today will keep working.

What this migration actually buys you

These aren't marketing claims — they're capabilities the current stack structurally cannot deliver, regardless of how well it's maintained.

⏱️

Automated Refresh — Zero Manual Work

The current manual SQL → SSAS → Core.xlsx → 272 files cycle is someone's daily job. Power BI replaces it entirely with scheduled, monitored refresh — up to 48× per day if needed. Failures trigger alerts, not silence.

Operational
📱

Field Teams Get Real Data

Sales reps can pull live division performance, top customers, and booked orders on their phone before walking into a meeting. The current portal has no mobile story — Power Pivot workbooks don't work on phones.

Sales Enablement
🔒

Row-Level Security Built In

Division managers see their division. Territory reps see their territory. Leadership sees everything. One report, enforced automatically at the model level — no separate file per role, no ACL spreadsheet to maintain.

Security
🤖

AI / Copilot — Plain English Queries

Business users ask questions in natural language: "What were BP's top 10 customers this quarter?" and get an instant, visualized answer. No DAX, no pivot tables, no IT request. New metrics generate themselves.

AI
💬

Teams Integration

Reports embed directly into Teams channels and meetings. The whole team reviews the same live dashboard in a call, drills into the data together, and comments on specific visuals — without switching tools.

Collaboration
📊

Self-Service Analytics

Division leaders build their own views — filtering, drilling, slicing — without filing an IT request. The 272-thin-file model exists because Power Pivot required a separate file per pivot configuration. Slicers eliminate that entirely.

Self-Service
Data Model

403 measures. Same insight. A fraction of the code.

We've analyzed every measure in BMD_Core.xlsx — all 403. The model works. But it's carrying 12 years of accumulated complexity that modern DAX eliminates without changing a single business rule.

403
Measures today
~120 time-intelligence variants
~62 GL Actual + Budget parallel pairs
~15 budget variance restatements
11 junk / test / unnamed — deleted
~195 genuine business logic — kept

Every time-period variant (SEL, YAG, YTD, QTD, Per Day, Projected) is a separate hand-written measure. Adding one new metric requires writing eight new measures manually.

~40
Base measures + 3 calculation groups
~40 clean base measures — all business logic preserved
Time Intelligence SEL · YAG · YTD · QTD · Per Day · Projected · Running Total — 9 items, auto-applied to every base measure
GL Scenario Actual · Budget · Variance · Var% · vs LY · vs LY% — replaces 62 parallel GL measures
Budget vs Actual Actual · Budget · Variance · Var% · vs LY · vs LY% — replaces 15 restatements

Same analytical output. Same numbers. Adding one new metric now costs one measure — the calculation groups give it all nine time comparisons automatically.

What this means for your reports

Today the model has separate named measures for Sales SEL, Sales YAG, Sales YAG as of Date, Sales YTD, Sales QTD, Sales per Day, Sales Projected — seven measures, written individually, for one concept. That pattern repeats for GM$, GM%, Qty, and COGS. After modernization: five base measures, one Time Intelligence calculation group, and a "Period" slicer on the report replaces seven separate report tabs. The same logic that today requires 403 measures and a 473 MB workbook will be expressed in a model that's leaner, faster to query, and far easier to extend.


Five stages. Each one stands alone.

Each stage delivers real value independently and decommissions one piece of the old stack. The project can pause after any stage. Stage 4 is optional — the gateway refresh works indefinitely.

Stage 0

Gateway Bridge

First Power BI reports go live, connecting through a gateway to your existing SSAS Tabular server. Zero changes to current infrastructure — runs in parallel. Users can compare numbers side-by-side before anything is decommissioned.

1–2 weeks 8–12 hrs
Nothing decommissioned — zero risk
Stage 1

Off PortalFront

272 active thin files replaced by 20–28 Power BI reports with slicers. Users move to the Power BI App. bmdbi.portalfront.com and SharePoint 2013 decommissioned. PortalFront contract ends.

4–6 weeks 80–120 hrs
Decommissions: PortalFront, SharePoint 2013
Stage 2

Model to Azure

SSAS Tabular model exported via XMLA and deployed to Microsoft Fabric. Compatibility level upgraded to 1500. Power BI connects to Fabric instead of on-prem SSAS — users see nothing change.

3–4 weeks 20–30 hrs
Decommissions: BMDSSAS01, POWERPIVOT2013
Stage 3

Modern DAX

Calculation groups replace the 120+ time-intelligence variants. 403 measures rationalized to ~40 base measures. WINDOW functions, field parameters, and dynamic dimensions unlock new report capabilities.

2–4 weeks 20–40 hrs
Decommissions: Redundant legacy measures
Stage 4

Data to Azure

SQL Server data moved to Fabric Lakehouse via Azure Data Factory pipeline. DirectLake replaces the gateway. Monitored refresh with alerting. Fully cloud-native. Optional — gateway refresh works indefinitely.

4–8 weeks 20–40 hrs
Decommissions: On-prem data gateway (optional)
Continuity

What doesn't change

The migration modernizes the platform, not the business logic. Everything your users depend on is preserved.

📐

The Data Model

All 64 tables, 67 relationships, and the full measure library migrate intact. The numbers users see today are the same numbers they'll see in Power BI — validated side-by-side in Stage 0 before anything is decommissioned.

🗂️

Report Navigation

The Power BI App mirrors the current portal's report structure — Flash Reports, Category Sales, Booked Orders, Budget. Division-level groupings preserved. Users find the same things in the same places from day one.

🔒

Data Access Control

Restricted reports (commission data, proprietary) become Power BI row-level security roles. The same people see the same data — enforced automatically at the model level rather than by folder ACLs.

📅

Refresh Cadence

Daily, weekly, and monthly data on the same schedule — just automated. No one triggers the refresh manually. Failures send alerts rather than going unnoticed until someone opens a stale report.

📊

All Business Logic

Every DAX measure, KPI definition, and calculation that works today works correctly in Fabric. Stage 3 adds modern capabilities on top — it doesn't replace what's already right.

🏢

Division Structure

All 27 division codes (AL, ACT, BMD, BP, BR, BSI, BT, CH, DFB, Dunn, FP…) carry through. Marvin Windows, intercompany actuals, budget tracking — all preserved in the migrated model.


Licensing & Cost

Start free. Decide after you've seen it work.

The 60-day Microsoft Fabric F64 trial is free and covers enough capacity to complete Stages 0 and 1 and validate the Stage 2 model migration — before any licensing commitment.

F64 Trial

$0 / 60 days
Start here. Covers Stages 0–2 validation. Full Fabric F64 capacity — DirectLake, Copilot, unlimited viewers. No credit card required to start.

Fabric F64 Capacity

~$4,600 / month
Right choice if active users exceed ~40, or if DirectLake and Copilot are required long-term. All licensed M365 users view reports at no additional per-seat cost.

The recommended path

Start the free F64 trial. Complete Stage 0 (first reports live) and Stage 1 (PortalFront decommissioned). Count how many people actually use the new portal during the trial period. If it's under ~40 active users, PPU at $20/user/mo is almost certainly the right long-term answer — no capacity management overhead, scales with actual usage.

Open Questions

Things to confirm on a call

A few items came up during the live data audit that need BMD input to scope Stage 1 accurately. None of them block Stage 0.

Division Clarity

Are FR, OS, SI, SP, TD distinct business divisions — or are some rep territories or report categories? This determines how we structure the Power BI App navigation and row-level security roles.

Marvin Scope

Marvin Windows & Doors has 6 dedicated model tables and active reports across Daily + Tabular folders. Dealer tracking, vendor program, or both? Determines the Marvin report set and whether the Hanley Wood market data migrates.

Refresh Ownership

Who runs the current manual SQL → SSAS → Core.xlsx cycle today? How often, and what happens when it doesn't run? This informs gateway placement and the Stage 0 scheduled refresh setup.

Naughty Folder Access

Who currently has access to the commission and proprietary data reports (PY Commission, Sales_by_Metro_Region)? Current ACL becomes the Power BI row-level security role definition.

Active User Count

How many people actively log into bmdbi.portalfront.com? The single biggest licensing input — under ~40 active users, PPU ($20/user/mo) is likely the right answer. Over 40, F64 capacity wins on per-user cost.

Usage Data

The SharePoint audit logs (BMD_BI_Audit_Log_*.xlsx) show which of the 272 thin files are actually opened. Pulling these before Stage 1 scope is confirmed lets us build the right 20 reports first and confidently skip the rest.