Start with a hypothesis-driven, reproducible reconciliation plan: verify sources, isolate scope, and iterate until root cause is found.1) Clarify scope & stakeholders- Confirm "same set of customers", date ranges, timezone, revenue definition (net vs. gross, recognized vs. billed). Talk to report owners (BI owner and Finance owner) and capture their SQL/data sources.2) Source comparison: identify upstream tables- Ask each owner: which table/view and ETL job produce the metric (e.g., analytics.events, finance.invoices, reporting.monthly_revenue_view).3) Basic row-level check (SQL)- Compare counts and totals at customer-month grain.sql
SELECT customer_id, month,
SUM(amount) as total_amount,
COUNT(*) as rows
FROM source_table
WHERE month BETWEEN '2025-01' AND '2025-03'
GROUP BY customer_id, month
ORDER BY customer_id;
Run for both systems and diff.4) Key mismatch checks- Customer list differences: left-join customer ids to find missing/excluded customers.sql
SELECT a.customer_id
FROM analytics_customers a
LEFT JOIN finance_customers f USING(customer_id)
WHERE f.customer_id IS NULL;
- Date alignment: check transaction timestamps vs. revenue recognition date (timezone/truncation).5) Aggregation & filter checks- Confirm filters (product lines, test accounts, refunds, currency conversions). Re-run aggregation adding/removing each filter to see impact.6) ETL and timing- Check job timestamps: is one report using updated data vs. a lagged snapshot? Review ETL logs and talk to data engineering.7) Adjustment & policy differences- Verify if Finance includes accruals, write-offs, or manual journal adjustments. Ask Finance for adjustment journal entries and reconcile them.8) Sampling & row-level audit- For a few customers with largest differences, pull detailed transaction lists and source documents (invoices, payments).9) Automate and document- Create a reproducible notebook or SQL view showing differences per customer-month and propose a fix (ETL change, filter harmonization, or documentation).Result: present findings to both owners with evidence (diffs, SQL, sample transactions), recommend one canonical definition and process to prevent recurrence (shared SQL view or agreed ETL contract).