Variance Analysis Guide
Konsolidat compares actual financial results against budget to produce variance measures with favorable/unfavorable classification.
Variance Data Flow
graph LR
TB[gold_trial_balance<br/>Actual amounts] --> VAR[gold_variance_analysis]
BUD[gold_spread_budget<br/>Budget amounts] --> VAR
VAR --> VYTD[gold_variance_ytd<br/>YTD variance]
VAR --> VQ[gold_variance_quarterly<br/>Quarterly variance]
VAR --> API[Frappe API<br/>scenario=variance]
Variance Measures
Five measures are available through the variance scenario:
| Measure | Formula | Description |
|---|---|---|
actual_amount | From gold_trial_balance | Actual period amount |
budget_amount | From gold_spread_budget | Budget period amount |
variance_abs | actual_amount − budget_amount | Absolute variance |
variance_pct | variance_abs / budget_amount | Percentage variance |
variance_favorable | See below | 1 if favorable, 0 if unfavorable |
Favorable/Unfavorable Logic
The definition of "favorable" depends on the account type:
| Account Type | Favorable When | Rationale |
|---|---|---|
| Revenue | Actual > Budget | Higher revenue is good |
| Expense | Actual < Budget | Lower spending is good |
If account_type = 'Revenue':
variance_favorable = 1 when actual_amount > budget_amount
If account_type = 'Expense':
variance_favorable = 1 when actual_amount < budget_amount
Tests
| Test | Assertion |
|---|---|
assert_favorable_revenue | Revenue: favorable=1 when actual > budget |
assert_favorable_expense | Expense: favorable=1 when actual < budget |
assert_variance_abs_formula | |variance_abs − (actual − budget)| ≤ 0.01 |
Querying Variance Data
From Excel
' Absolute variance (default for EPM_VARIANCE)
=EPM_VARIANCE("USMF", 2025, 5, "6100")
' Equivalent to:
=EPM("USMF", 2025, 5, "6100", "variance_abs", "variance")
' Other variance measures:
=EPM("USMF", 2025, 5, "6100", "actual_amount", "variance")
=EPM("USMF", 2025, 5, "6100", "budget_amount", "variance")
=EPM("USMF", 2025, 5, "6100", "variance_pct", "variance")
=EPM("USMF", 2025, 5, "6100", "variance_favorable", "variance")
Period Ranges
Variance supports the same period range codes:
=EPM_VARIANCE("USMF", 2025, "Q1", "6100") ' Q1 variance
=EPM_VARIANCE("USMF", 2025, "H1", "6100") ' H1 variance
=EPM_VARIANCE("USMF", 2025, "FY", "6100") ' Full year variance
With Dimension Filters
=EPM_VARIANCE("USMF", 2025, "FY", "6100", "SALES", "SALES")
YTD Variance
The gold_variance_ytd model provides cumulative year-to-date comparison:
| Column | Description |
|---|---|
ytd_actual | Cumulative actual through the period |
ytd_budget | Cumulative budget through the period |
Useful for tracking whether the business is on track as the year progresses.
Quarterly Variance
The gold_variance_quarterly model aggregates variance by quarter (Q1–Q4), useful for quarterly business reviews.
Prior Year Comparison
Beyond budget variance, gold_prior_year_comparison provides year-over-year analysis:
| Column | Description |
|---|---|
current_amount | Current year period amount |
prior_year_amount | Same period, prior year |
yoy_variance_abs | current_amount − prior_year_amount |
Building a Variance Report in Excel
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Entity: | USMF | Year: | 2025 | |
| 2 | Account | Actual | Budget | Variance | Fav? |
| 3 | Revenue (4100) | =EPM("USMF",2025,"FY","4100","actual_amount","variance") | =EPM("USMF",2025,"FY","4100","budget_amount","variance") | =EPM_VARIANCE("USMF",2025,"FY","4100") | =EPM("USMF",2025,"FY","4100","variance_favorable","variance") |
| 4 | Expenses (6100) | ... | ... | ... | ... |
Use conditional formatting on column E: 1 = green (favorable), 0 = red (unfavorable).
Next Steps
- Budgeting Guide — How budgets are input and spread
- Report Catalog — Pre-built report patterns
- Excel VBA Guide — All formula functions