EPC Group - Enterprise Microsoft AI, SharePoint, Power BI, and Azure Consulting
G2 High Performer Summer 2025, Momentum Leader Spring 2025, Leader Winter 2025, Leader Spring 2026
BlogContact
Ready to transform your Microsoft environment?Get started today
(888) 381-9725Get Free Consultation
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌

EPC Group

Enterprise Microsoft consulting with 28+ years serving Fortune 500 companies.

(888) 381-9725
contact@epcgroup.net
4900 Woodway Drive - Suite 830
Houston, TX 77056

Follow Us

Solutions

  • All Services
  • Microsoft 365 Consulting
  • AI Governance
  • Azure AI Consulting
  • Cloud Migration
  • Microsoft Copilot
  • Data Governance
  • Microsoft Fabric
  • vCIO / vCAIO Services
  • Large-Scale Migrations
  • SharePoint Development

Industries

  • All Industries
  • Healthcare IT
  • Financial Services
  • Government
  • Education
  • Teams vs Slack

Power BI

  • Case Studies
  • 24/7 Emergency Support
  • Dashboard Guide
  • Gateway Setup
  • Premium Features
  • Lookup Functions
  • Power Pivot vs BI
  • Treemaps Guide
  • Dataverse
  • Power BI Consulting

Company

  • About Us
  • Our History
  • Microsoft Gold Partner
  • Case Studies
  • Testimonials
  • Blog
  • Resources
  • Contact

Microsoft Teams

  • Teams Questions
  • Teams Healthcare
  • Task Management
  • PSTN Calling
  • Enable Dial Pad

Azure & SharePoint

  • Azure Databricks
  • Azure DevOps
  • Azure Synapse
  • SharePoint MySites
  • SharePoint ECM
  • SharePoint vs M-Files

Comparisons

  • M365 vs Google
  • Databricks vs Dataproc
  • Dynamics vs SAP
  • Intune vs SCCM
  • Power BI vs MicroStrategy

Legal

  • Sitemap
  • Privacy Policy
  • Terms
  • Cookies

© 2026 EPC Group. All rights reserved.

‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
‌
Home / Blog / Salesforce to Power BI via Microsoft Fabric

Salesforce to Power BI via Microsoft Fabric: The Modern Data Pipeline

By Errin O'Connor|April 15, 2026|14 min read

Salesforce is the CRM. Power BI is the BI platform. But connecting them at enterprise scale requires more than a direct connector — it requires a proper data pipeline. Here is how EPC Group builds production Salesforce-to-Power BI pipelines using Microsoft Fabric as the integration and staging layer.

Why you need a pipeline (not a direct connector)

Power BI's built-in Salesforce connector works for simple dashboards on a single object. It breaks down when you need enterprise-grade reporting:

  • API rate limits: Every Power BI refresh cycle makes API calls to Salesforce. With 20 reports refreshing 4x daily across 15 Salesforce objects, you can burn through your daily API allocation by noon.
  • Cross-source joins: Sales reporting rarely lives in Salesforce alone. You need Salesforce opportunities joined with ERP revenue actuals, marketing campaign data from HubSpot or Marketo, and support tickets from ServiceNow. Direct connectors cannot do this efficiently.
  • Data quality: Salesforce data is notoriously messy — duplicate accounts, inconsistent picklist values, missing fields, orphaned contacts. A staging layer lets you cleanse and standardize before it hits the reporting model.
  • Historical snapshots: Salesforce overwrites records in place. Without a pipeline that captures snapshots, you cannot answer questions like "What did our pipeline look like on the first of last month?" or "How long did this opportunity stay in each stage?"
  • Performance: DirectQuery against Salesforce is slow. Import mode against Salesforce is API-intensive. A Fabric lakehouse with Direct Lake gives you sub-second query performance with zero API calls to Salesforce after initial extraction.

Microsoft Fabric solves all five problems with a single platform: Data Factory for extraction, lakehouse for staging, notebooks for transformation, and Power BI semantic models for reporting.

Connector options: Getting data out of Salesforce

There are three primary approaches to extracting Salesforce data into Fabric, each with different tradeoffs:

Option 1: Dataflow Gen2 with Salesforce connector

Fabric's Dataflow Gen2 includes a native Salesforce Objects connector. You authenticate with OAuth, select objects (Account, Contact, Opportunity), apply Power Query transformations, and output to a lakehouse table. This is the simplest path and works well for 5-15 objects with moderate volume (under 5 million records total).

Limitations: Uses the Salesforce REST API, which is slower than the Bulk API for large objects. Query folding is limited to basic filters. Not ideal for objects exceeding 1 million records without incremental extraction configuration.

Option 2: Fabric Data Factory pipeline with Salesforce connector

Fabric Data Factory (the pipeline, not the dataflow) provides a Copy Activity with a Salesforce connector that supports the Bulk API 2.0. This is the recommended approach for enterprise-scale extraction:

  • Bulk API 2.0 extracts millions of records efficiently with minimal API call consumption.
  • Supports SOQL queries for server-side filtering, reducing data transfer volume.
  • Parallelized extraction across multiple Salesforce objects simultaneously.
  • Built-in retry logic and error handling for API timeouts.
  • Outputs directly to Fabric lakehouse tables in Delta format.

Option 3: Custom API integration via Fabric notebooks

For advanced scenarios — custom objects with complex SOQL, Salesforce Event Bus (platform events), or multi-org consolidation — EPC Group builds PySpark notebooks that use the simple-salesforce Python library to interact with the Salesforce API directly. This provides maximum control over extraction logic, error handling, and incremental patterns at the cost of requiring Python development skills.

CDC patterns: Capturing changes efficiently

Full extraction of every Salesforce object on every pipeline run is wasteful and API-intensive. EPC Group implements change data capture using Salesforce's built-in audit fields:

  • SystemModstamp-based delta: Every Salesforce record has a SystemModstamp field updated on any change. Our pipeline queries WHERE SystemModstamp > [last_extraction_timestamp] to pull only changed records. The last successful timestamp is stored in a Fabric lakehouse control table.
  • Delete detection: Salesforce's getDeleted() API returns record IDs deleted within a date range. We run this daily and soft-delete corresponding records in the lakehouse (setting an is_deleted flag rather than physically removing them, preserving audit history).
  • Pipeline snapshot pattern: For Opportunity pipeline analysis, EPC Group captures daily snapshots of the Opportunity table with a snapshot_date column. This enables "pipeline as of" reporting — what did the pipeline look like on any historical date? — which is impossible with Salesforce's live data alone.
  • Watermark management: A dedicated control table in the lakehouse tracks extraction timestamps, record counts, and status for each object and each pipeline run. This enables monitoring, alerting, and automatic retry on failures.

Object mapping: Salesforce to Fabric lakehouse

Salesforce's data model does not translate directly to an analytics-friendly schema. EPC Group maps Salesforce objects to a star schema in the Fabric lakehouse:

Salesforce ObjectLakehouse TableSchema TypeKey Transformations
Accountdim_accountDimensionIndustry standardization, hierarchy flattening, deduplication
Contactdim_contactDimensionName parsing, email validation, role classification
Opportunityfact_opportunityFactStage mapping to standard funnel, amount normalization, close date logic
OpportunityLineItemfact_opportunity_lineFactProduct categorization, discount calculation, ARR/MRR derivation
Leadfact_leadFactSource standardization, scoring, conversion tracking
Task / Eventfact_activityFactActivity type classification, duration calculation, contact association
Campaigndim_campaignDimensionHierarchy flattening, channel mapping, budget allocation
CampaignMemberfact_campaign_responseFactResponse status mapping, attribution modeling

The transformation layer handles the messiness that lives in every Salesforce org: inconsistent picklist values ("Enterprise", "enterprise", "Ent."), duplicate accounts that Salesforce deduplication missed, orphaned contacts without account associations, and custom fields that differ across business units.

Fabric lakehouse staging architecture

EPC Group implements a three-layer lakehouse architecture for Salesforce data:

  • Bronze (raw): Salesforce data lands as-is in Delta tables with extraction metadata (batch_id, extracted_at, source_org). No transformations — this is the audit trail and reprocessing source. Retained for 90-365 days depending on compliance requirements.
  • Silver (cleansed): Deduplication, standardization, null handling, and relationship resolution. Silver tables have surrogate keys, standardized column names, and consistent data types. This layer is where the Salesforce data model becomes analytics-friendly.
  • Gold (semantic): Star schema tables consumed by the Power BI semantic model via Direct Lake. Pre-aggregated tables for common reporting patterns (monthly pipeline snapshots, quarterly revenue summaries). Optimized for query performance with appropriate partitioning and Z-ordering.

This layered approach means a schema change in Salesforce (new field, renamed picklist value) only impacts the bronze-to-silver transformation — gold tables and Power BI reports are insulated from source system changes.

Semantic model design for sales reporting

The Power BI semantic model is where the lakehouse data becomes business intelligence. EPC Group designs semantic models for Salesforce data with these principles:

  • Direct Lake mode: The semantic model reads directly from lakehouse Delta tables without importing data into Power BI's in-memory engine. This eliminates data duplication and ensures reports always reflect the latest lakehouse refresh.
  • Calculation groups for time intelligence: Instead of creating separate measures for "this quarter", "last quarter", "YoY change", we use calculation groups that apply time intelligence to any base measure. This reduces measure count by 60-70% and ensures consistency.
  • Row-level security: Sales managers see their team's pipeline. Regional VPs see their region. The C-suite sees everything. RLS rules are defined in the semantic model and enforced automatically based on Azure AD group membership, with no changes needed in Salesforce.
  • Pipeline snapshot measures: DAX measures that compare current pipeline to any historical snapshot date, enabling "pipeline movement" analysis (new, pulled in, pushed out, increased, decreased, won, lost) that Salesforce's native reports cannot deliver.

Joining Salesforce with other enterprise data

The real power of the Fabric pipeline emerges when Salesforce data joins with other sources. Common enrichments EPC Group builds:

  • ERP revenue actuals: Salesforce shows bookings; the ERP shows recognized revenue. Joining the two in Fabric reveals the gap between pipeline optimism and financial reality — bookings-to-revenue conversion rates by rep, product, and segment.
  • Marketing attribution: HubSpot or Marketo campaign data joins with Salesforce opportunities in Fabric, enabling multi-touch attribution modeling that neither system can do alone.
  • Support ticket correlation: ServiceNow or Zendesk ticket data joins with Salesforce accounts to show churn risk — accounts with high support ticket volume and declining NPS are flagged for proactive intervention.
  • External enrichment: D&B, ZoomInfo, or LinkedIn data enriches Salesforce accounts with firmographic data (revenue, employee count, industry) for account scoring and territory planning.

In Fabric, these joins happen in the lakehouse silver or gold layer, not in Power BI. This means the semantic model stays clean and performant — no complex DAX workarounds for cross-source relationships.

Governance and compliance considerations

Salesforce data often contains PII (contact names, emails, phone numbers) and sensitive financial information (deal amounts, pricing). EPC Group implements governance controls in the Fabric pipeline:

  • Sensitivity labels: Microsoft Purview sensitivity labels applied to lakehouse tables containing PII. Labels inherit through to Power BI reports, enforcing DLP policies on export and sharing.
  • Column-level security: Sensitive fields (deal amount, discount percentage, contact phone numbers) masked or hidden based on user role.
  • Data lineage: Purview catalogs the full lineage from Salesforce object through lakehouse tables to Power BI reports. When an auditor asks "where does this number come from?", you can show the exact transformation chain.
  • Access control: Fabric workspace permissions align with Salesforce permission sets — users see in Power BI only the data they are authorized to see in Salesforce.

Frequently Asked Questions

Can Power BI connect directly to Salesforce without Fabric?

Yes, Power BI has a native Salesforce connector for direct import or DirectQuery. However, direct connections hit Salesforce API limits quickly at enterprise scale, cannot join Salesforce data with other sources efficiently, and lack a staging layer for data quality transformations. For ad hoc dashboards on a single Salesforce object, the direct connector is fine. For production enterprise reporting across Account, Contact, Opportunity, and custom objects joined with ERP or marketing data, Fabric is the right approach.

How do we handle Salesforce API rate limits in the Fabric pipeline?

Salesforce enforces API call limits per 24-hour period based on edition and user count. EPC Group mitigates this by using the Salesforce Bulk API 2.0 (which counts as fewer API calls per record), implementing incremental extraction using SystemModstamp or LastModifiedDate fields, scheduling large extractions during off-peak hours, and caching full extracts in the Fabric lakehouse so downstream consumers never hit Salesforce directly. A properly designed pipeline consumes less than 10% of a typical enterprise org's daily API allocation.

What Salesforce objects should we prioritize in the initial pipeline?

Start with the core CRM objects: Account, Contact, Opportunity, OpportunityLineItem, Lead, Task, and Event. These cover 80% of sales reporting needs. Phase 2 typically adds Campaign, CampaignMember, Contract, Quote, and custom objects specific to the business. EPC Group maps each object to the Fabric lakehouse during discovery, including field-level mappings, relationship keys, and transformation rules.

How does change data capture work for Salesforce in Fabric?

Salesforce does not offer traditional CDC like SQL Server. Instead, EPC Group implements delta extraction using the SystemModstamp or LastModifiedDate fields on each object, combined with the Salesforce Bulk API 2.0 query. On each pipeline run, we query only records modified since the last successful extraction timestamp (stored in a Fabric lakehouse control table). For deletes, we use the Salesforce getDeleted() API on a daily cadence. This pattern typically captures 99.9% of changes with a 15-minute to 1-hour latency depending on extraction frequency.

What does a Salesforce-to-Fabric implementation cost and how long does it take?

A standard Salesforce-to-Power BI pipeline via Fabric takes 8-12 weeks and is scoped based on the number of Salesforce objects, transformation complexity, and number of Power BI reports. EPC Group delivers fixed-fee engagements starting at $45K for core CRM objects (Account, Contact, Opportunity) through a single lakehouse to 3-5 Power BI dashboards. Larger implementations with custom objects, multi-org consolidation, and advanced analytics run $75K-$150K.

Build your Salesforce-to-Power BI pipeline

EPC Group delivers production Salesforce-to-Fabric-to-Power BI pipelines in 8-12 weeks. Fixed-fee engagements starting at $45K for core CRM objects. Call (888) 381-9725 or request a pipeline assessment below.

Request a Pipeline Assessment