Prompt
How do I set up a data warehouse for CRM, ERP, and finance data?
Latest observation
Setting up a data warehouse for CRM, ERP, and finance data is mostly about choosing the right architecture, defining a common data model, and building reliable pipelines that keep business-critical data consistent.
Here’s a practical blueprint.
1) Define the business use cases first
Before tools or schemas, list the questions the warehouse must answer, such as:
- Revenue by customer, product, region, or rep
- Pipeline-to-cash conversion
- Order-to-invoice-to-payment performance
- Gross margin and profitability
- AR/AP aging
- Customer lifetime value
- Budget vs actuals
- Forecast accuracy
- Sales, finance, and operations KPIs
This helps determine:
- Required freshness: batch daily, hourly, near real-time
- Granularity: transaction-level or summary
- History retention: months vs years
- Governance and security needs
2) Choose a warehouse architecture
A common, effective pattern is:
Source systems
- CRM: Salesforce, HubSpot, Dynamics
- ERP: NetSuite, SAP, Oracle, Microsoft Dynamics ERP
- Finance: GL, billing, AP/AR, payroll, FP&A tools
Ingestion layer
Use ELT/ETL tools to extract data from each source.
Examples:
- Fivetran, Airbyte, Stitch, Matillion, Talend
- Custom pipelines via APIs or CDC tools
Raw / staging layer
Land data as-is first.
Purpose:
- Preserve source fidelity
- Make reprocessing easy
- Separate ingestion issues from transformation issues
Core warehouse layer
Transform data into clean, conformed tables:
- standardized keys
- deduplicated records
- joined dimensions
- business rules applied
Semantic / reporting layer
Create analytics-ready views/models:
- revenue dashboards
- finance reporting
- sales funnel analysis
- executive metrics
3) Pick the warehouse platform
Typical choices:
- Snowflake: strong for separation of storage/compute, easy scaling
- BigQuery: very simple ops, great for cloud-native analytics
- Redshift: good if you’re on AWS and want tighter ecosystem integration
- Azure Synapse / Fabric: useful in Microsoft-heavy environments
- Databricks SQL: strong if you also need lakehouse/ML use cases
Selection criteria:
- cloud provider
- cost model
- governance/security
- concurrency
- SQL performance
- data volume
- existing team skills
4) Design the data model around business processes
For CRM + ERP + finance, don’t model only by source system. Model around business events.
A classic warehouse model uses:
Conformed dimensions
Shared dimensions across domains:
- Customer
- Account
- Product
- Time
- Employee / Sales rep
- Organization / legal entity
- Region / currency
- Vendor
- Chart of accounts
Fact tables
Business events or measures:
- Leads
- Opportunities
- Orders
- Invoices
- Payments
- Journal entries
- Purchase orders
- Shipments
- Expenses
- Forecast snapshots
A strong pattern is a star schema for analytics and a data vault / normalized core if your environment is complex and changing frequently.
5) Solve master data and identity matching early
This is one of the hardest parts.
You must reconcile entities across systems:
- CRM customer vs ERP customer vs finance billing entity
- account vs legal entity vs parent company
- product names and SKUs
- employee IDs across HR/CRM/ERP
Use:
- enterprise master keys
- mapping tables
- survivorship rules
- fuzzy matching where needed
- hierarchy tables for parent-child relationships
Without this, reports like “customer revenue” or “pipeline by account” will be inconsistent.
6) Build ingestion pipelines for each source
CRM data
Extract:
- accounts
- contacts
- leads
- opportunities
- activities
- campaigns
- custom objects
Watch for:
- API limits
- incremental sync / CDC
- soft deletes
- schema drift from custom fields
ERP data
Extract:
- customers/vendors
- orders
- invoices
- PO/GRN
- inventory
- cost centers
- assets
- tax and GL postings
Watch for:
- complex hierarchies
- multi-entity structures
- currency conversion
- period close logic
Finance data
Extract:
- GL entries
- trial balance
- AP/AR aging
- budgets/forecast
- cost center allocations
- accruals
- journal adjustments
Watch for:
- versioning
- restatements
- close periods
- auditability
7) Use ELT transformations with layered logic
A common pattern:
Bronze / raw
- source tables copied in
- minimal changes
- audit columns added
Silver / cleaned
- type casting
- standardization
- deduplication
- referential cleaning
- basic business rules
Gold / curated
- conformed dimensions
- fact tables
- KPI views
- finance-ready reporting tables
Tools commonly used:
- dbt
- SQL-based transformation jobs
- orchestration with Airflow, Dagster, Prefect
8) Build strong data quality controls
Add checks for:
- completeness
- uniqueness
- referential integrity
- null thresholds
- currency conversion accuracy
- balanced debits/credits in finance
- duplicate invoices
- orphaned CRM records
- late-arriving facts
Examples:
- total invoice amount equals sum of line items
- journal entries balance to zero
- opportunity close date is not before created date
- each invoice maps to a customer and legal entity
Automate alerts when checks fail.
9) Handle history correctly
Business reporting usually needs historical accuracy.
Use:
- Slowly Changing Dimensions (SCD Type 2) for customer, product, employee, org changes
- effective start/end dates
- snapshot facts for monthly financial states
- point-in-time reporting logic
This matters when:
- account ownership changes
- product categories change
- finance org structures change
- sales territories are reassigned
10) Define security and access controls
CRM, ERP, and finance data often contains sensitive information.
Implement:
- role-based access control
- row-level security
- column masking for PII
- separate access for finance vs sales vs operations
- audit logs
- encryption at rest and in transit
- retention and deletion policies
Examples:
- sales users can see customer pipeline, not payroll
- finance users can see GL and billing, but not unrelated HR data
- executives see aggregated KPIs, not all raw PII
11) Establish governance and metadata
Maintain:
- data catalog
- metric definitions
- source-to-target mappings
- data lineage
- business glossary
- ownership by domain
This avoids disputes like:
- “What is revenue?”
- “Is booked revenue the same as recognized revenue?”
- “Which customer hierarchy is official?”
12) Build reporting and analytics layers
Once the warehouse is stable, create:
- executive dashboards
- self-service BI datasets
- finance close dashboards
- sales funnel dashboards
- customer profitability reports
- operational scorecards
Common BI tools:
- Power BI
- Tableau
- Looker
- Sigma
Use governed semantic models so everyone sees the same metrics.
13) Plan for operations and scaling
Include:
- scheduled refreshes
- pipeline retries
- alerting
- monitoring for failed loads
- cost monitoring
- environment separation: dev/test/prod
- backup and disaster recovery
- CI/CD for SQL and pipeline code
14) A recommended implementation sequence
A sensible rollout:
Phase 1: Foundation
- choose cloud warehouse
- connect CRM and ERP
- ingest raw data
- create basic governance and access control
Phase 2: Core model
- build customer, product, time, org dimensions
- build invoices, orders, opportunities, GL facts
- implement data quality checks
Phase 3: Finance-grade reporting
- add closed-period logic
- implement SCD2 and snapshots
- align revenue and accounting definitions
Phase 4: Optimization
- create semantic layer
- automate lineage and monitoring
- refine performance and cost
15) Example target architecture
A practical architecture might look like:
- Sources: Salesforce, NetSuite, QuickBooks, bank feeds
- Ingestion: Fivetran + custom API jobs
- Warehouse: Snowflake
- Transformations: dbt
- Orchestration: Airflow or Dagster
- BI: Power BI
- Data quality: dbt tests + Great Expectations
- Catalog/lineage: Alation or OpenMetadata
16) Common pitfalls to avoid
- trying to model everything from day one
- not aligning CRM and finance definitions
- ignoring master data problems
- loading only summarized data and losing detail
- skipping history tracking
- poor data quality monitoring
- giving users direct access to raw source tables
- failing to handle currency and entity hierarchies
- underestimating finance close requirements
A simple starting schema
If you want a first-pass warehouse, start with:
Dimensions
- dim_customer
- dim_account
- dim_product
- dim_employee
- dim_organization
- dim_date
- dim_currency
Facts
- fact_opportunity
- fact_order
- fact_invoice
- fact_payment
- fact_gl_entry
- fact_expense
- fact_budget_snapshot
If you want the shortest possible answer
The basic setup is:
- Choose a cloud warehouse
- Ingest CRM/ERP/finance data into raw tables
- Clean and standardize it in staging
- Build conformed dimensions and fact tables
- Add history tracking, data quality, and security
- Publish governed BI models and dashboards
If you want, I can also provide:
- a reference architecture diagram
- a sample schema
- a tool stack recommendation
- or a step-by-step implementation plan for a small team