Data case / 05 · Evolution: V1 → V2 amount model

Evolving commercial analytics from single-currency to multi-currency

A fictional architecture evolution case: moving a single-currency analytical model to multi-currency without breaking history, targets or segments.

Fictional scenario

Independently created. Contains no employer or client implementation detail, internal names or figures.

01The outcome

Every amount carries its original value and currency, the rate and rate date used, and a reporting amount computed once in the data platform—reproducible for any past version.

The reality

The first release reported in one currency. Subsidiaries that sell in others now threaten every total, threshold and historical report.

Architecture question

Which amount is the fact, which is a view—and can last year’s report still be reproduced?

Key decision

Store original amount, currency, rate, rate type and rate date with every converted amount, and convert once in the data platform—never in the CRM or a report.

ContextCommercial analytics launched for companies that invoice in euros only. Amounts were stored as a single number. New subsidiaries invoice in other currencies, targets are planned centrally, and performance segments drive actions—so an exchange-rate move must not change a segment on its own.

Systems and partiesERPRate serviceData platformCRM

02The reality · current state

What the data does today.

  • Amounts are stored without a currency
  • Converting at report time gives different totals in different reports
  • Targets and actuals would be converted at different rates
  • A corrected exchange rate would silently rewrite last year’s figures
  • Thresholds for segments assume one currency

03Target flow

Where the data comes from, where it goes—and how.

Every hand-over is named with its mode. The mode follows the business tolerance for waiting, inconsistency and loss.

  • 01 · ERPERP amounts

    Invoice and order amounts in transaction currency.

    Feeds by Batch
  • 02 · Rate serviceExchange rates

    Monthly average and planning rates, versioned.

    Feeds by Batch
  1. 03 · Data platformConversion

    One conversion per amount, rate stored beside it.

    Hands over by Batch
  2. 04 · Data platformReporting amounts

    Reporting currency, reproducible by rate version.

    Hands over by Batch
  3. 05 · CRMCRM signals

    Performance in reporting currency, with the rate policy named.

04Contracts

What one row or message means.

Meaning, grain, key, freshness and owner—written down before anything is mapped.

Contract

Converted amount

One amount in its original and reporting currency, with the rate that links them.

Grain
Source line × rate version
Key
Source line key + rate version
Freshness
Daily
Owner
Finance (policy) · data team (computation)
Contract

Exchange rate

A rate of a declared type for a date or month.

Grain
Currency pair × rate type × date
Key
Pair + type + date + version
Freshness
Monthly; corrections versioned
Owner
Treasury

05Key dimension · Evolution: V1 → V2 amount model

V1 → V2: from a number to an amount model

V1 stored a number. V2 stores a fact and a view of it, with everything needed to reproduce the view later.

V1 · single currency
  • AmountA number, implicitly euros
  • CurrencyNot stored: assumed
V2 · multi-currency amount model
  • Original amountThe fact, as invoiced
  • Original currencyNewAs invoiced
  • FX rateNewThe rate used
  • Rate type & dateNewMonthly average, planning, or spot—and for which date
  • Rate versionNewSo a correction never rewrites history
  • Reporting amountNewDerived, in the reporting currency
  • Reporting currencyNewDeclared, not assumed
  1. Transaction or reporting currency?

    Both: the original is the fact; the reporting amount is a derived view.

  2. Which rate date?

    Invoices at posting date, orders at order date.

  3. Daily, monthly or planning rate?

    Monthly average for actuals; the corporate planning rate when comparing with targets.

  4. Where does conversion happen?

    In the data platform, once—never in the CRM or a report.

  5. What happens when a rate is corrected?

    A new rate version recomputes forward; published reports keep the version they used.

  6. Which currency drives thresholds and segments?

    Reporting currency at the planning rate, so an exchange-rate move alone cannot change a segment.

V1 history migrates as original amounts in euros with an identity rate—no restatement, and the same reports reproduce exactly.

06Data authority

Who may create, change, read or derive each concept.

Highlight
Data authority by business concept: which system may create, update, read or derive each concept
Business conceptERPRate serviceData platformCRM
Original amount & currencyThe fact. Never overwritten by a conversion.CreateNo authorityReadNo authority
Exchange ratePublished by treasury. A correction is a new version, not an edit.No authorityCreateReadNo authority
Reporting amountDerived once, with the rate version stored beside it.No authorityNo authorityDeriveRead
Segment thresholdSet by sales operations in the reporting currency, at the planning rate.No authorityNo authorityCreateUpdateRead

No system owns a whole record here. Authority sits with each concept—and sometimes changes hands when the lifecycle does.

07Failure & recovery

Design the failure path before the happy path.

  • No rate for a month yetMissing rate for pair and monthHold the amounts as provisional; never convert at a guessed rateTreasury
  • A rate is corrected after closeNew rate versionRecompute from the new version; closed reports keep theirsFinance
  • Target and actual in different currenciesCurrency check at comparisonCompare only in reporting currency at the planning rateSales operations
  • Last year’s report is re-runReport parameter: rate versionReproduce with the stored rate versionData platform team

08Candidate architectures

Credible options, judged against these premises.

Rejected

Convert at entry in the source or the CRM

One reporting currency forever

Cost: Original amounts lost; every policy change is a restatement
Rejected

Store only reporting amounts

Stable single rate policy

Cost: Cannot re-convert, audit or change policy
Selected

Store original + rate + reporting; convert once, versioned

Several currencies, targets and thresholds

Cost: More columns and a rate-version discipline

09The second layer

Questions that change the design.

Amounts

  1. Transaction currency or reporting currency?
  2. Should the original amount be preserved?
  3. Where does conversion happen?

Rates

  1. Which exchange-rate date?
  2. Daily, monthly or corporate planning rate?
  3. What happens when rates are corrected?

Comparisons

  1. How are targets converted?
  2. How are historical reports reproduced?
  3. Which currency is used for thresholds and segmentation?

10Decisions & outputs

What the work produces.

  1. 01V2 amount model
  2. 02Rate policy
  3. 03Conversion placement
  4. 04Rate versioning & reproducibility rule
  5. 05Target conversion rule
  6. 06V1 migration without restatement