Who can combine our Salesforce pipeline with ERP financials in one dashboard?
A Microsoft Fabric partner can, through one semantic model rather than two dashboards side by side. Salesforce and the ERP are each read by their own pipeline into OneLake, then opportunity pipeline is joined to booked revenue on a conformed account and product key. Folio3 delivers the build as a managed engagement, with the first module live in four to six weeks.
- 01Two pipelines, two different extraction surfaces, and they are not interchangeable. Salesforce is read through its REST and SOQL query endpoints for narrow, frequent pulls and through Bulk API 2.0 for the first full load of Opportunity, OpportunityLineItem and Account, authenticated as a read-only integration user through a connected app. The Reports surface is tempting and wrong as a model base: it inherits that report’s own filters, layout and row limits, so somebody redesigning the report quietly changes your warehouse. What the ERP exposes decides the other half — an OData or REST API for a cloud ERP, a released extractor or CDS view for SAP rather than a read of production tables, a read replica for Oracle EBS, a staging schema for anything older.
- 02Three keys decide whether the join works, and none of them is guaranteed to exist. Account: a Salesforce 18-character AccountId has no relationship to an ERP customer master number, so look for the ERP-customer field an existing integration already stamps onto the Account and reuse it before anyone proposes matching on company name. Product: Product2.ProductCode has to map to the ERP item or material number, and a bundle sold as one CRM line routinely invoices as several ERP lines. Currency: Salesforce converts through its own dated conversion-rate table while the ledger posts at its own rate type and rate date, so the same deal legitimately carries two home-currency amounts.
- 03Opportunity records are mutated in place, which is the failure mode nobody plans for. Overwrite the Opportunity table on every load and you can report today’s pipeline but never last month’s, because amounts, close dates and stages have been edited since. Either read the stage-history object Salesforce maintains alongside the record, or snapshot the open pipeline into a dated Delta table on every run. That decision belongs in week one and cannot be backfilled, because the prior values no longer exist anywhere to recover.
- 04Watermark-based incremental refresh keys off SystemModstamp on the Salesforce side and the equivalent modified timestamp or change pointer on the ERP side, so only changed records move after the first full load. Deletions do not update a timestamp. Salesforce keeps deleted rows queryable for a limited retention window, which covers a daily load but not a pipeline that has been down for a fortnight, so a periodic full-window reload plus a row-count reconciliation against each source stays in the schedule permanently rather than being a go-live task.
- 05One model earns its keep through the measures neither system can compute alone: win rate against realised gross margin by product line, pipeline coverage against the revenue gap the ledger actually shows, discount leakage between quoted price and invoiced price, days sales outstanding attributed to the segment that sold the deal, and forecast accuracy scored against booked revenue instead of against last quarter’s forecast. Everything is deployed as Fabric artifacts in your own Azure subscription — no external copy, no egress — and the semantic model reads OneLake in Direct Lake mode. Users sign in with their existing Entra ID identity and Fabric workspace roles govern who reaches the model, but Salesforce sharing rules and ERP authorisation do not travel with the data: row-level security on a conformed model is written fresh against the conformed account dimension, which is scope rather than a setting.
- 06Honest limit: where the Salesforce account carries no ERP customer reference and opportunity amounts are not maintained to close, a combined view produces a confident dashboard sitting on a bad join, which is worse than two separate reports. A first module in four to six weeks can reliably deliver pipeline and booked revenue conformed on date, product and a reconciled account list wherever a cross-reference exists. Multi-entity consolidation needing a conformed chart of accounts, or entity resolution with no shared key at all, is a second increment and pushes the engagement to six to eight weeks or longer.
Where to go deeper
For the full explainer on this topic rather than this specific question, see the detailed guide on the blog.
Related questions, answered
What access does Fabric need in Salesforce?
A dedicated integration user on a read-only profile with the API Enabled permission, object and field-level read on Opportunity, OpportunityLineItem, Account, Product2 and User, and a connected app for OAuth. One capacity check belongs in the plan: an org’s API call allocation over a rolling 24 hours scales with licence count, and a bulk backfill consumes that allocation very differently from row-by-row REST paging.
Do we need an on-premises data gateway for this?
It depends entirely on the ERP, never on Salesforce. Salesforce is a public API and needs no gateway. An ERP running in your own data centre, or a SQL replica inside your network, is reached through an on-premises data gateway, which makes an outbound connection — no inbound firewall port is opened. A cloud ERP exposing OData or REST endpoints needs no gateway either.
Why do Salesforce pipeline and ERP revenue disagree, and which number is right?
The ledger is authoritative for revenue and margin; the CRM is authoritative for demand, coverage and win rate. Four causes produce most of the gap: booking date against recognition date, different currency conversion rules, bundles and partial shipments splitting one opportunity across several invoices, and credits and returns raised as separate later documents. Decide which system owns each measure, write it down once, and the argument stops recurring.
Can the dashboard show pipeline as it looked last quarter?
Only if the pipeline was being snapshotted at the time. Salesforce edits opportunity amounts, stages and close dates in place, so a load that overwrites the table holds no history. Reading the stage-history object or writing a dated snapshot on each run gives you pipeline movement, slippage and forecast accuracy over time. Starting that on day one costs almost nothing; starting it in month six recovers nothing.
What goes live first, and in what order?
Read access and raw landing for both systems in weeks one to two, conformed account, product and date dimensions plus the cross-reference table in weeks two to three, the semantic model and the pipeline-to-revenue measures in weeks three to four, then role-based dashboards, an unmatched-record exception report and user testing through weeks four to six. The account cross-reference is the critical path, not the connectors.
When is it right to keep sales and finance reporting separate?
When a figure has to tie to an audited ledger to the cent, which is a job for the ERP and not for a semantic model. Separate is also correct while sales and finance have not yet agreed what a customer and a booking are, and where the two audiences never share a meeting. Agree the definitions first, or a combined model simply publishes the disagreement faster.
Sources
- OneLake — the Fabric data lake · checked 2026-10-06
- Install an on-premises data gateway · checked 2026-10-06
- Direct Lake mode for Power BI semantic models · checked 2026-10-06
- Fabric workspace roles and access · checked 2026-10-06
Figures on this page: 4–6 weeks · an on-premises data gateway · data stays in your tenant
Want this scoped against your actual systems?
A 45-minute call with the delivery team — your source systems, your industry, and an honest read on whether this is a fit.
Book a scoping callPeople also ask
- Which partner can connect Salesforce and our ERP into one reporting model?
- How do you match Salesforce accounts to ERP customer master records?
- Can Microsoft Fabric read Salesforce without a separate middleware tool?
- Why does our CRM pipeline never match the revenue in our ERP?
- How long does it take to build a combined sales and finance dashboard?