> For the complete documentation index, see [llms.txt](https://help.modelreef.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.modelreef.io/help/drivers-variables-and-timing/variable-overview.md).

# Variable Overview

This article explains what **variables** are in Model Reef and how they interact with drivers and the timing engine.

You will learn:

* What a variable is and how it differs from a driver.
* The main variable types used in Model Reef.
* How variables generate P\&L, Balance Sheet, Cashflow and Cash Waterfall entries.
* How variables connect to timing, delays and branches.

Variables are the atomic objects that actually move your financial statements. Drivers shape them, but variables are what hits the numbers.

{% stepper %}
{% step %}

### What is a variable

A **variable** is a structured object that:

* Lives inside a branch.
* Has a type, for example Revenue, COGS, Opex, Staff, Tax, Asset, Liability, Equity or Dividend.
* Has a category and optional subcategory, which control reporting placement.
* Contains a time series, either entered manually or driven by formulas and drivers.
* Has timing settings for start, end and delays.

Each variable automatically produces consistent movements across:

* **P\&L** (accrual effect).
* **Balance Sheet** (receivables, payables, assets, liabilities, equity).
* **Cashflow Statement** (cash movements when money actually moves).
* **Cash Waterfall** (cash view of operating and financing flows).

You do not need to manually write three way reconciliation formulas. The variable type and timing rules handle that.
{% endstep %}

{% step %}

### Variables vs drivers

Variables and drivers work together but have distinct roles:

* A **driver** is an input time series that does not touch the financial statements directly.
  * Example: price per unit, FX rate, wage inflation, utilisation.
  * Stored and managed in the Data Library.
  * Only matters when a variable or chart references it.
* A **variable** is what creates accounting entries.
  * Example: revenue from subscriptions, rent expense, staff cost, tax expense.
  * Uses drivers in formulas and presets to calculate values.
  * Feeds directly into P\&L, Balance Sheet, Cashflow and Cash Waterfall.

In short: drivers describe behaviour, variables enact it in the accounts.
{% endstep %}

{% step %}

### Variable types and what they affect

Model Reef has several core variable types, each with defined behaviour:

* **Revenue**
  * Increases revenue in P\&L.
  * Creates Accounts Receivable if there is a delay between accrual and cash.
  * Feeds operating cash inflows in the Cashflow Statement and Cash Waterfall.
* **COGS (Cost of Goods Sold)**
  * Reduces Gross Profit in P\&L.
  * Creates Accounts Payable if there is a delay.
  * Feeds operating cash outflows.
* **Opex (Operating Expenses)**
  * Reduces EBITDA in P\&L.
  * Creates Accounts Payable if there is a delay.
  * Feeds operating cash outflows.
* **Staff**
  * Specialised Opex type with embedded payroll logic.
  * Covers salaries, super or pension, payroll tax and other on cost behaviour.
* **Tax**
  * Applies tax expense to earnings before tax.
  * Creates Tax Payable and cash tax movements.
* **Assets**
  * Represent capital expenditure and existing assets.
  * Generate non cash depreciation and cash capex.
* **Liabilities**
  * Represent loans and similar obligations.
  * Generate drawdowns, repayments and interest.
* **Equity**
  * Record equity contributions.
  * Increase cash and share capital.
* **Dividends**
  * Record distributions to equity holders.
  * Reduce retained earnings and cash.

Each type has a known pattern through the three statements so you get consistent behaviour without custom accounting logic.
{% endstep %}

{% step %}

### Variables, branches and consolidation

Variables are always attached to a **branch**. This defines:

* Where their contribution appears in branch level P\&L, Balance Sheet and Cashflow.
* How they roll up into parent branches and consolidated views.
* Which users can see or edit them when branch level permissions are used.

If you move a variable to a different branch, its entire accounting impact moves to that branch and its parents.

This makes branches the structural dimension and variables the behavioural dimension of the model.
{% endstep %}

{% step %}

### Variables and timing

Variables use the **timing engine** to separate accrual timing from cash timing.

Each variable has:

* A start and end date, which define when accruals occur.
* A frequency or schedule, which defines how often it occurs.
* A delay, which defines when cash moves relative to accrual.

The timing engine then:

* Posts accrual amounts into P\&L at the right periods.
* Creates receivables or payables when there are delays.
* Moves those receivables or payables into cash when the delay expires.
* Ensures the Balance Sheet always balances and cash is consistent with the Cashflow Statement.

As a result, you can focus on business behaviour and let the engine handle accounting timing.
{% endstep %}

{% step %}

### Where to see and edit variables

You will typically work with variables in three places:

* **Variable editor**
  * Configure type, category, branch, timing and formula behaviour.
  * Review the projected time series and accounting impact.
* **Data Library**
  * View variables as part of the central list.
  * Edit series, reclassify types, change categories at scale.
* **Reports and dashboards**
  * Drill down from P\&L, Balance Sheet, Cashflow or charts into the variable level.
  * Inspect assumptions when reviewing outputs.

Variables are the backbone of the model, and understanding them makes it easier to reason about any forecast or scenario.
{% endstep %}
{% endstepper %}

## Related articles

* [Multi-Program Consolidated Reporting](/use-cases/not-for-profit-and-education/multi-program-consolidated-reporting.md)
* [Scenarios & Planning](/how-tos/scenarios-and-planning.md)
* [Manual Variable Entry](/help/importing-and-data-inputs/manual-variable-entry.md)
* [Formula Validation Errors](/syntax/formula-syntax/formula-validation-errors.md)
