Variance analysis
FX Variance Bridge
Separate constant-currency performance from exchange-rate movement, with a bridge that reconciles to reported actuals and names the residual when it does not.
Save or open an analysis file
Download a copy of the current inputs and answer to keep on your device. The file contains financial values and labels and is not encrypted. Opening it here stays in this browser; nothing is uploaded or automatically saved on this device. Keep the file somewhere you trust.
An opened file keeps its original answer. Recalculate separately when you want a result from the current method. Account workspace saves currently keep inputs only.
Review FX across months and P&L lines
Translate each entity/line/month using its supplied rate, then sum translated amounts. Compare those calculations with your reported figures. Files stay in this page session; this review is separate from the calculator below and is not included in account saves or its portable analysis files.
Required CSV/TSV columns and method
Entity, LineItem, Nature, BaselinePeriod, ComparisonPeriod, Currency, ReportingCurrency, BaselineLocal, ComparisonLocal, BaselineRate, ComparisonRate, RateConvention, RateBasis, BaselineReported, ComparisonReported, RowRole
Use YYYY-MM periods, income/expense natures and detail/subtotal roles. Every entity/line needs each monthly pair, including explicit zero observations where applicable. Period windows must be contiguous and paired in order. RateConvention is reporting_per_local or local_per_reporting; RateBasis describes the rates you supplied. Expenses use positive amounts for costs and negative amounts for reversals. Declared subtotals are excluded, not independently validated.
Operational = local amount change × baseline rate. FX = comparison local amount × rate change; interaction is already included. Rates are normalized to reporting currency per local unit before calculation. This is attribution using your rates, not an accounting compliance determination, transaction/settlement FX or hedge accounting. No annual average rate is substituted.
Import a table from Excel or CSV
Read a file locally, choose its table or range, and review the mapping before replacing inputs. No file is uploaded. Macros and formulas are never run. Account saves keep the imported input rows only; downloaded analysis files can also keep source references.
Input data
Enter rates in whichever direction your source uses, then declare it below.
| Entity | Local currency | Budget local | Actual local | Budget FXUSD per 1 local unit | Actual FXUSD per 1 local unit · Not stated | |
|---|---|---|---|---|---|---|
| = 1 USD per USD | = 1 USD per USD | |||||
| = 1.25 CAD per USD | = 1.6129 CAD per USD | |||||
| = 0.769231 GBP per USD | = 1 GBP per USD | |||||
| = 0.909091 EUR per USD | = 1.16279 EUR per USD |
Tip: paste a rectangular range from Excel or Sheets.
Reported variance
+$6.80m
Underlying Revenue was $17.30m above budget at constant currency, but a $10.50m FX headwind partly offset it, leaving reported Revenue $6.80m above budget.
- Operational variance
- +$17.30m
- FX impact
- -$10.50m
- Actual reported
- $61.30m
FX waterfall
Budget to reported actual, through constant currency
Budget
$54.50m
Operational
+$17.30m
FX
-$10.50m
Actual
$61.30m
Show as table
| Line | Value | Context |
|---|---|---|
| Budget | $54.50m | Endpoint |
| Operational | +$17.30m | favourable |
| FX | -$10.50m | unfavourable |
| Actual | $61.30m | Endpoint |
| Line | Value | Context |
|---|---|---|
| Budget | $54.50m | Endpoint |
| Operational | +$17.30m | favourable |
| FX | -$10.50m | unfavourable |
| Actual | $61.30m | Endpoint |
Largest FX impacts
Ranked by absolute contribution to total FX movement
| Entity | Actual rate appliedNot stated | Operational | FX | FX share |
|---|---|---|---|---|
| France · EUR | 1 EUR = 0.86 USD | +$4.40m | -$3.60m | 34.3% |
| Canada · CAD | 1 CAD = 0.62 USD | +$4.00m | -$3.60m | 34.3% |
| United Kingdom · GBP | 1 GBP = 1 USD | +$3.90m | -$3.30m | 31.4% |
| United States · USD | 1 USD = 1 USD | +$5.00m | $0.00m | 0.0% |
Take the operational bar further
Operational is the local-currency movement translated at the budget rate. What is price, what is volume and what is mix inside it is a separate analysis.
Price Volume Mix Analysis →Next tools
What has been checked
The calculation adds up from the entered rows. Business meaning and source completeness have not been independently verified.
- Arithmetic agreement does not verify the selected source, period, business meaning or statement completeness.
- This is the current calculation, not an immutable historical snapshot.
- FX includes the rate/volume interaction; a separately displayed interaction is a split of FX, not an additional driver.
- Entity names are entered labels, not independently confirmed entity identities.
Period labels are entered text; a monthly dataset comparison is not currently linked.
Source references: input row 1, input row 2, input row 3, input row 4. Imported references identify the selected source at import; editing a row clears its direct reference. Account saves keep input rows only.
Create an editable PowerPoint slide locally. The notes include calculation values, period labels and source references, including source file names when present. Edits in PowerPoint are not recalculated. No file is uploaded.
Reuse the analysis
Copy the summary or export full-precision row data.
Transparent by design
How this calculation works
Rates may be entered in either direction. Whichever you declare, the bridge restates them to reporting currency units per one local unit before calculating, so both readings of the same pair give the same answer. It calculates at full precision and rounds only for display.
Constant currency here is budget-rate constant currency: actual local amounts translated at the budget rate. FX is then measured on the actual local volume, so the interaction between the rate movement and the volume movement — the local growth that was never budgeted for, translated at the change in rate — sits inside the FX step rather than beside it.
Whether a movement reads as favourable follows the metric’s nature, so a falling expense and a rising revenue are both coloured as good news. Asset and liability movements use neutral colours and describe increases or decreases. The FX step is retranslation, and a gain or loss already booked in local currency sits inside the actual local amounts: it is translated at the budget rate in the operational step and retranslated with everything else in the FX step, so there is no separate transaction-exposure input. Nothing here is a hedge, a translation reserve or an average-rate adjustment; none of those is inferred from the figures you enter.
Rate restatement
Local per reporting entry → 1 ÷ entered rate
Budget reported
Budget local currency × Budget FX rate
Constant currency
Actual local currency × Budget FX rate
Operational variance
(Actual local − Budget local) × Budget FX rate
FX variance
Actual local currency × (Actual FX rate − Budget FX rate)
Interaction, inside FX
(Actual local − Budget local) × (Actual FX rate − Budget FX rate)
Actual reported
Actual local currency × Actual FX rate
This is one variance. Consilium is being built to explain the full reporting package.
Move from a manual bridge to a recurring financial review.