Skip to main content

Variance Analysis Model

Problem

gold_scenario_trial_balance unions actual + budget but provides no computed variance. Users must calculate variance in Excel. A proper EPM tool provides:

  • Absolute variance (actual - budget)
  • Percentage variance
  • Favorable/unfavorable classification (expense under-budget = favorable)

Requirements

R1: New model gold_variance_analysis

Pivots scenario data into a columnar format per account/period:

ColumnDescription
data_area_idLegal entity
fiscal_year, fiscal_periodPeriod
main_account, account_nameAccount
dim_cost_center, dim_departmentDimensions
actual_amountFrom scenario_id = 'ACTUAL'
budget_amountFrom scenario_id = 'BUDGET'
forecast_amountFrom latest forecast scenario
variance_absactual_amount - budget_amount
variance_pctvariance_abs / nullif(budget_amount, 0) × 100
variance_favorableBoolean: true if variance is favorable

R2: Favorable/unfavorable logic

  • Revenue accounts (account_type in revenue categories): actual > budget = favorable
  • Expense accounts (account_type in expense categories): actual < budget = favorable
  • Asset/Liability: not applicable (null)
  • Uses is_pnl flag + account_type_name to determine direction

R3: Cube schema

New Cube model variance_analysis with:

  • Dimensions: entity, year, period, account, cost_center, department
  • Measures: actual_amount, budget_amount, forecast_amount, variance_abs, variance_pct

R4: Multi-scenario comparison

  • Support comparing any two scenarios (not just actual vs budget)
  • Parameterized via Cube filters: base_scenario and compare_scenario
  • Default: base = ACTUAL, compare = BUDGET

Acceptance Tests

TestAssertion
assert_variance_abs_formulavariance_abs = actual_amount - budget_amount within 0.01
assert_variance_pct_formulavariance_pct = variance_abs / budget_amount × 100 (where budget ≠ 0)
assert_favorable_revenueRevenue accounts: actual > budget → variance_favorable = true
assert_favorable_expenseExpense accounts: actual < budget → variance_favorable = true
assert_no_orphan_actualsEvery account with actuals has a budget row (or null budget)

Out of Scope

  • Waterfall / bridge analysis (e.g., price/volume/mix decomposition)
  • Trend analysis (period-over-period)
  • Commentary / annotation on variances