# Retail Workforce & Roster Forecasting

This use case shows how to model retail workforce and roster costs in Model Reef. You will use Staff variables, drivers for hours and wage rates, and branch structures to represent staffing across stores.

The objective is to connect store rosters directly to P\&L, cash and headcount planning.

## When to use this pattern

Use this pattern when:

* Staff costs are a major driver of store profitability.
* You roster staff by week or day and want that logic reflected in your forecast.
* You need to understand how staffing plans interact with sales scenarios.

This pattern builds on **Store Level P\&L Modelling** and can support both single store and multi store networks.

## Architecture overview

You will build:

* Branch structure
  * One branch per store.
  * Optional head office branch for central staff.
* Workforce drivers
  * Open hours per store.
  * Expected traffic or sales per period.
  * Hours per transaction or per sales level.
  * Wage rates by role.
* Staff variables
  * Manager, key full time staff, and casual or part time staff per store.
  * Timing and pay cycle behaviour.
* Outputs
  * Staff cost per store and per period.
  * Staff cost as a share of sales.
  * Cashflow impact of payroll.

{% stepper %}
{% step %}

### Decide your time granularity

Roster planning is often weekly, while most planning models are monthly.

Options:

* Keep the model at monthly granularity and approximate rosters via monthly averages.
* Use weekly granularity if workforce decisions are very sensitive and you need that resolution.

Choose the periodicity when creating the model. You can always aggregate weekly models to monthly or quarterly views in dashboards and reports.
{% endstep %}

{% step %}

### Define workforce drivers

In the Data Library, create drivers such as:

* `Store 01 - Open Hours per Week`
* `Store 01 - Expected Transactions per Week`
* `Hours per Transaction`
* `Hours per Open Day`

You can derive required hours from sales or service standards, for example:

* `Required Hours = Base Hours plus Hours per Transaction × Transactions`

Also create wage rate drivers for each role:

* `Wage Rate - Store Manager`
* `Wage Rate - Casual Staff`

These can vary over time to reflect expected increases.
{% endstep %}

{% step %}

### Create Staff variables for each store

In each store branch, define Staff variables for:

* Store manager
* Supervisors if relevant
* Full time staff
* Casual or part time staff

For each Staff variable, configure:

* Number of staff or FTEs
* Hours per period
* Wage rate driver
* Oncosts, such as superannuation or payroll tax, using built in staff cost behaviour where available or explicit drivers

This will generate staff costs that flow into Opex and Cashflow automatically.
{% endstep %}

{% step %}

### Link staffing levels to sales or traffic

To make rosters responsive to expected demand, use formulas that connect staff hours to sales or traffic drivers, for example:

* Casual hours per week based on forecast transactions:
  * `Casual Hours = Base Casual Hours plus Hours per Transaction × Transactions`
* Additional staff for peak periods using seasonality drivers

Keep the relationships as simple as possible while still reflecting how rosters are actually built in the business.
{% endstep %}

{% step %}

### Model timing of payroll cashflows

Use the timing settings on Staff variables to represent payroll cycles, for example:

* Weekly or fortnightly pay cycles translated into the model periodicity
* Small delays between end of work period and actual cash payment

This ensures that both P\&L and Cashflow reflect payroll correctly:

* Staff costs accrue when hours are worked.
* Cash leaves when payroll runs.

Staff related payables will appear in working capital between accrual and payment.
{% endstep %}

{% step %}

### Build workforce and roster dashboards

Create a Workforce or Roster dashboard that shows:

* Staff cost per store over time
* Staff cost as a percentage of revenue per store
* FTE equivalent counts by store and role
* High level ratios, such as revenue per labour hour

These views help management see whether staffing plans look realistic in the context of expected sales.
{% endstep %}

{% step %}

### Stress test staff plans against scenarios

When you change sales forecasts in different scenarios:

* Update transactions or revenue drivers
* Allow workforce formulas to recompute required hours and staff costs
* Compare staff cost to revenue ratios between scenarios

This helps answer questions such as:

* What happens to labour productivity in a downside scenario?
* What staffing is required to support an upside sales plan?

Because scenarios are separate models, you can make different staffing assumptions in each without affecting the others.
{% endstep %}
{% endstepper %}

## Check your work

* Staff variables exist for all important store roles and match current workforce levels.
* Wage and hour assumptions are grounded in real rosters.
* Staff cost outputs tie back to historical payroll where data is available.
* Staff cost percentages and ratios are inside expected ranges for your retail category.

## Troubleshooting

<details>

<summary>Staff costs appear too smooth or unrealistic</summary>

Increase the sensitivity of staff hours to sales or traffic drivers, or use a finer time granularity if necessary.

</details>

<details>

<summary>Payroll timing does not match cash reality</summary>

Adjust the delay settings and pay cycle assumptions in Staff variables until cash outflows align with your payroll calendar.

</details>

<details>

<summary>Too many Staff variables become hard to manage</summary>

Group similar roles where possible and use clear naming per store and role, for example `Staff - Store 01 - Casual Floor`.

</details>

## Related guides

* [Build a Forecast Accuracy Tracker](/how-tos/scenarios-and-planning/build-a-forecast-accuracy-tracker.md)
* [Build a Forecast from Ticker Fundamentals](/how-tos/data-workflows-and-automation/build-a-forecast-from-ticker-fundamentals.md)
* [Branch Hierarchy Rules](/help/building-your-model/branch-hierarchy-rules.md)
* [Drivers Syntax](/syntax/drivers-syntax.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/use-cases/retail-single-and-multi-site/retail-workforce-and-roster-forecasting.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.
