Can Microsoft Fabric pull NetSuite, SAP and Shopify data into one reporting model?
Yes. Each system lands in OneLake through its own Fabric Data Factory pipeline — NetSuite over its analytics ODBC connection or REST and SuiteQL endpoints, Shopify over the rate-limited Admin API, SAP over an extractor, CDS view or replica, not a direct read of production tables — and a single Power BI semantic model reconciles them afterwards. Reconciling three definitions of a customer and an order is the project. Extraction is the easy half.
- 01Three systems, three different extraction surfaces, and they are not interchangeable. NetSuite is read over its analytics ODBC/JDBC connection or its REST and SuiteQL endpoints under token-based credentials; Shopify over the Admin API, using the bulk operations endpoint to backfill history because the per-call throttle makes a year of orders slow to page through; SAP over a released extractor, a CDS view, or an SLT or BW replica — not a direct read of production tables, where both the load on the transactional instance and SAP table structures argue against it.
- 02Usually only SAP needs a gateway. An on-premises SAP system or a replica inside your network is reached by an on-premises data gateway, which makes an outbound connection, so no inbound firewall port is opened. NetSuite and Shopify are public APIs and need none. A cloud S/4HANA estate is normally reached over published OData or CDS services, so an on-premises ECC estate and a cloud S/4 estate are genuinely different integration jobs carrying the same name — confirm which services your release exposes before sizing the work.
- 03The key-matching work is the project. A Shopify customer is identified by email, a NetSuite customer by an internal id, an SAP customer by a business-partner number, and nothing joins them natively. If middleware already syncs Shopify orders into NetSuite, the cross-reference field it writes is your join key — reuse it instead of fuzzy-matching on email. Where no key exists, a conformed customer dimension needs an explicit matching rule plus an explicit survivorship rule for which system wins on a conflicting name or address.
- 04Currency, tax and timing are where naive consolidation produces a wrong number quietly. Fix one conversion rate type and one rate date rather than summing mixed currencies; compute revenue from order lines rather than headers, because storefront totals can be tax-inclusive depending on store and region settings while an ERP posts tax to its own accounts; and conform one date dimension carrying both the Gregorian and the fiscal calendar, because an SAP posting date, a NetSuite transaction date and a UTC Shopify timestamp do not describe the same day. Multi-entity reporting adds a conformed chart of accounts mapping NetSuite subsidiaries and SAP company codes onto one set of accounts.
- 05Anchor the model on whichever system closes the books, then attach the others to it. The general ledger defines revenue and margin, the storefront owns demand, traffic and channel mix, and the third system owns fulfilment. Anchored that way, a number is argued once in a definition instead of three times in three meetings, and the reconciliation work is what disappears. At Daraz, reporting effort fell 60%. Everything is deployed as Fabric artifacts in your own Azure subscription, so no data leaves your tenant and your existing row-level security and Entra ID policies apply unchanged.
- 06Honest limit: if the three systems share no key and no middleware cross-reference exists, a reconciled customer view is a data-quality project in its own right rather than a reporting task. A first module in four to six weeks can realistically deliver conformed date, product and revenue reporting with each system tied back to the ledger; customer-level consolidation across all three often lands in a second increment, and a programme that needs all of it at once should be scoped at 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 does Microsoft Fabric need in order to read NetSuite?
A read-only role, token-based credentials, and a decision about which surface to use. The analytics ODBC/JDBC connection behaves like a SQL replica and suits wide historical pulls, but it is licensed separately from the base subscription, so confirm what your account entitles you to before designing around it. REST and SuiteQL endpoints suit narrower, more frequent reads. Saved searches work but drift whenever someone edits one.
Can Fabric read SAP without touching the production system?
Yes, and it generally should. Read a released extractor, a CDS view, an SLT or BW replica, or a staging layer rather than querying production tables, which keeps reporting load off the transactional instance. One commercial check belongs in the plan too: some SAP agreements treat third-party reads as indirect or digital access, so confirm the position with your SAP account team before the pipeline exists.
How does incremental refresh work across three systems, and what does it miss?
Watermark-based incremental refresh keys off a modified timestamp in each system — a last-modified field in NetSuite, updated_at in Shopify, a change pointer or timestamp from the SAP extractor — so only changed records move after the first full load. What it misses is deletions, voids and hard-deleted rows, none of which update a timestamp. Those need a periodic full-window reload plus a row-count reconciliation against each source.
How do Shopify orders get matched to NetSuite or SAP records?
Through whichever cross-reference already exists, in preference to anything clever. Order-level matching usually works, because an existing integration stamps the storefront order name onto the ERP sales order. Customer-level matching is harder: a retail buyer in Shopify and a distributor in SAP are different entities wearing the same label. Agree a matching rule, keep an exceptions table, and report the unmatched rate as a KPI.
Why do the three systems report different revenue for the same month?
Four reasons, usually all at once: different currency conversion rate types and rate dates; tax-inclusive storefront pricing against net postings in the ledger; discounts, shipping and refunds raised as separate documents that land in a later period; and three different calendars. One definition has to be written down for each of those four before any consolidated figure can be defended.
When should the three systems stay in separate reports?
When the audiences never overlap, or when a consolidated figure has to tie to an audited ledger to the cent — the general ledger is the right place for that, not a semantic model. Staying separate is also the right call while finance and commerce still disagree about what a customer is. Build the shared definitions first, or a combined model just publishes the disagreement faster.
Sources
- OneLake — the Fabric data lake · checked 2026-10-06
- Install an on-premises data gateway · checked 2026-10-06
Figures on this page: 4–6 weeks · an on-premises data gateway · data stays in your tenant · 60%
What this costs for an operation your size
Three engagement tiers, what each includes, and the Microsoft licensing you need alongside it.
See what shapes the pricePeople also ask
- Which partner can connect NetSuite, SAP and Shopify to Microsoft Fabric?
- How long does it take to combine three source systems into one semantic model?
- Do we need an on-premises data gateway for SAP but not for Shopify?
- How do you build a conformed customer dimension across an ERP and an e-commerce platform?
- What breaks when you consolidate multi-currency orders from three systems?