Skip to content

Customer 360 Engine

Unifying 2.7 million customer records scattered across three systems into a single identity graph — in a market that runs on two calendars at once.

Context

Deraah Retail Group

2025

Role

Data Platform Architect

Stack

  • ClickHouse
  • dbt
  • Python
  • Power BI

2.7M

records unified

3

source systems reconciled

2

calendars, one model (Hijri + Gregorian)

The problem

Customer data lived in three places — the POS system, the e-commerce platform, and the loyalty program — with no shared key. The same person appeared as three customers; campaign audiences double-counted; lifetime value was unanswerable. And every seasonal analysis had a uniquely Saudi complication: commercial life runs on the Hijri calendar (Ramadan, the Eids) while finance reports Gregorian.

The architecture

  • Identity resolution — deterministic matching first (phone, email, loyalty ID), then conservative fuzzy matching with human-reviewable confidence tiers, producing a persistent customer_key across all three systems. 2.7M raw records resolved into a clean identity graph.
  • Dual-calendar dimension — one conformed date dimension carrying both calendars as first-class columns: every date knows its Hijri day, month, and whether it falls in Ramadan or Eid trading windows. Seasonal comparisons (“this Ramadan vs. last Ramadan”) became one-line filters instead of analyst spreadsheet projects.
  • Serving — a customer_360 mart in ClickHouse exposing identity, transactions, channels, and RFM segmentation to Power BI and to campaign tooling.

What it changed

Marketing addresses one customer instead of three fragments; retention numbers survived their first audit; and Ramadan planning starts from data instead of memory. The dual-calendar model has since become the pattern other retail data teams in the region ask about — it’s also the subject of one of my talks.