# 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)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.modelreef.io/help/drivers-variables-and-timing/variable-overview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
