Free Ebook cover Excel for Operations: Building Error-Proof Dashboards, Forecasts, and Process Trackers with Power Query

Excel for Operations: Building Error-Proof Dashboards, Forecasts, and Process Trackers with Power Query

New course

16 pages

Forecasting and Capacity Planning with Scenarios and What-If Analysis

Capítulo 11

Estimated reading time: 18 minutes

+ Exercise
Audio Icon

Listen in audio

0:00 / 0:00

Why scenarios and what-if analysis matter in operations forecasting

Operations forecasting is rarely about finding a single “correct” number. It is about understanding how demand, productivity, lead times, and constraints interact, then preparing plans that remain workable when reality deviates from assumptions. Scenarios and what-if analysis let you model uncertainty explicitly: you define a set of controllable assumptions (inputs), connect them to a forecast and capacity model (logic), and compare outcomes (outputs) such as required headcount, overtime hours, backlog, service level, or cost.

Illustration of an operations planning dashboard concept showing inputs, model logic, and outputs: sliders or input boxes for demand growth, cycle time, shrinkage; a central calculation engine diagram; and output charts for required headcount, overtime, backlog, service level, and cost. Clean modern flat design, business analytics style, no text.

In Excel, scenario-based planning becomes powerful when you treat the model like a simulator: change a few drivers and immediately see the impact on capacity and performance. This chapter focuses on building a forecasting and capacity planning model that supports multiple scenarios, sensitivity checks, and goal-seeking decisions without rewriting formulas each time.

Core concepts: drivers, constraints, and planning horizons

1) Demand drivers vs. capacity drivers

Separate what creates work from what processes work.

  • Demand drivers: forecasted order volume, tickets, shipments, production units, call arrivals, etc. Often expressed by time period (day/week/month) and by segment (product family, channel, region).

  • Capacity drivers: available labor hours, machine hours, throughput rate, yield, uptime, staffing, shift patterns, learning curves, and planned downtime.

    Continue in our app.

    You can listen to the audiobook with the screen off, receive a free certificate for this course, and also have access to 5,000 other free online courses.

    Or continue reading below...
    Download App

    Download the app

Good what-if analysis changes drivers, not hard-coded results. For example, you change “volume growth” or “cycle time” and the model recalculates “required FTE” and “expected backlog.”

2) Constraints and bottlenecks

Capacity planning is constrained by the tightest resource. If you have multiple steps (pick, pack, ship), the bottleneck step determines throughput. Your model should calculate capacity per step and highlight which step is limiting under each scenario.

3) Time buckets and the planning horizon

Choose time buckets that match operational decisions:

  • Weekly for staffing and scheduling decisions.

  • Monthly for budget and hiring plans.

  • Daily for short-term dispatching and backlog burn-down.

For scenario planning, weekly is often a practical balance: enough detail to see peaks, not so granular that the model becomes fragile.

Model structure for scenario-based forecasting

This chapter assumes you already have clean, structured data and reliable calculation patterns. Here, focus on organizing the planning model into three zones:

  • Assumptions: scenario inputs (growth rates, productivity, shrinkage, overtime limits, lead times).

  • Engine: forecast and capacity calculations by period and by resource/step.

  • Outputs: KPIs, charts, and scenario comparisons (required capacity, gap, cost, service level).

The key is that the Engine references Assumptions through a scenario selector, so switching scenarios updates everything.

Diagram of a spreadsheet model architecture with three labeled zones: Assumptions table, Calculation Engine, and Outputs dashboard, connected by arrows and a scenario selector dropdown. Clean vector style, top-down layout, no text.

Step-by-step: build a scenario table and selector

Step 1: Create a scenario assumptions table

Create a table named tblScenarios with one row per scenario and one column per assumption. Example columns:

  • Scenario (Base, High Demand, Low Demand, Labor Shortage, Productivity Gain)

  • Demand_Growth (e.g., 0.03 monthly)

  • Seasonality_Multiplier (e.g., 1.00 base, 1.15 peak)

  • CycleTime_Minutes (e.g., 6.5 minutes per unit)

  • HoursPerFTE_PerWeek (e.g., 37.5)

  • Shrinkage (e.g., 0.12 for breaks, meetings, absence)

  • Overtime_MaxPct (e.g., 0.10)

  • Target_ServiceLevel (e.g., 0.95)

  • Hiring_Lag_Weeks (e.g., 6)

Keep assumptions measurable and directly tied to operations. Avoid mixing “results” (like required FTE) into this table.

Step 2: Add a scenario selector cell

Create a single input cell (for example, named range selScenario) where the user chooses a scenario name. This cell will drive all assumption lookups.

Step 3: Pull scenario values into named assumption cells

Create a small assumptions panel with labels and formulas that retrieve the selected scenario’s values. Use a lookup keyed on Scenario. Example pattern (conceptually): “get the value from tblScenarios where Scenario = selScenario and return the column.”

For example, for Demand_Growth you retrieve the selected row’s Demand_Growth. Repeat for each assumption. This makes the Engine formulas simpler: they reference a single “current” assumption value rather than repeating lookups everywhere.

Step-by-step: build a demand forecast with scenario drivers

Step 1: Set up a time series table

Create a table named tblPlan with one row per week (or month). Suggested columns:

  • PeriodStart

  • Base_Demand (starting forecast before scenario adjustments)

  • Seasonality_Index (1.00 normal, >1 peak, <1 trough)

  • Scenario_Demand

Base_Demand can come from your existing forecast method (for example, a baseline from historical averages or a separate forecasting sheet). The scenario layer should adjust it, not replace it.

Step 2: Apply growth and seasonality

Scenario_Demand should incorporate scenario growth and seasonality. A common approach:

  • Apply a growth factor over time (compounded by period).

  • Multiply by a seasonality index (either from a table or a simple pattern).

Example logic in words: Scenario_Demand = Base_Demand × (1 + Demand_Growth)^(period_number) × Seasonality_Index × Seasonality_Multiplier.

This lets you create scenarios like “same baseline but 8% higher demand during peak weeks” without changing the baseline forecast.

Step-by-step: convert demand into workload hours

Step 1: Define workload per unit

Workload is demand translated into required effort. For a single-step process, a simple conversion is:

  • Workload_Hours = Scenario_Demand × CycleTime_Minutes ÷ 60

If you have multiple steps (e.g., Receive, Pick, Pack), create a small table of step times and calculate workload per step. This is where bottlenecks become visible: each step has its own workload and capacity.

Step 2: Include rework, yield, or complexity mix

Many operations have non-linear workload drivers. Add columns for:

  • Rework rate: extra work as a percentage of volume.

  • Complexity mix: weighted average cycle time based on product mix.

  • Yield: if only a portion of work completes successfully, effective workload increases.

Example in words: Effective_CycleTime = Base_CycleTime × (1 + ReworkRate) × MixFactor.

Step-by-step: calculate available capacity and required FTE

Step 1: Compute net available hours per FTE

Gross hours per FTE per week are reduced by shrinkage (breaks, meetings, training, absence). Net hours:

  • NetHoursPerFTE = HoursPerFTE_PerWeek × (1 − Shrinkage)

This is a critical assumption: small changes in shrinkage can materially change required staffing.

Step 2: Convert workload hours into required FTE

For each period:

  • Required_FTE = Workload_Hours ÷ NetHoursPerFTE

If you allow overtime, treat it as additional capacity, but cap it:

  • MaxOvertimeHours = CurrentFTE × HoursPerFTE_PerWeek × Overtime_MaxPct

  • EffectiveCapacityHours = (CurrentFTE × NetHoursPerFTE) + MaxOvertimeHours

Then compare EffectiveCapacityHours to Workload_Hours to calculate a capacity gap.

Step 3: Model hiring lag and ramp

Capacity planning is not only “how many FTE do we need,” but “when do we need them.” Add a hiring plan table with planned hires by week and apply a lag:

  • Hires in week t become available in week t + Hiring_Lag_Weeks.

You can also model ramp-up (new hires at 50% productivity for first 2 weeks). Add a ramp factor by tenure and apply it to the effective FTE contribution.

Backlog and service level: turning capacity gaps into operational outcomes

Forecasting and capacity planning become more actionable when you translate capacity gaps into backlog and service impact.

Backlog flow model

Create columns in tblPlan:

  • Starting_Backlog

  • Arrivals (Scenario_Demand)

  • Completions (limited by capacity)

  • Ending_Backlog

Completions can be modeled as the minimum of Arrivals + Starting_Backlog and Capacity_Units (capacity expressed in units). Convert capacity hours to units using cycle time.

Ending_Backlog = Starting_Backlog + Arrivals − Completions. Starting_Backlog for each period equals the prior period’s Ending_Backlog.

Simple operations flow illustration of backlog over weeks: arrows from Arrivals to Work in Progress/Backlog queue, then to Completions constrained by a capacity gate, producing Ending Backlog. Clean infographic style, warehouse/operations theme, no text.

Service level approximation

If you have a service target like “95% completed within the week,” you can approximate service level using backlog ratio:

  • If Ending_Backlog grows, service level deteriorates.

A simple operational KPI is Backlog Weeks = Ending_Backlog ÷ AverageWeeklyDemand. This expresses how many weeks of work are waiting, which is intuitive for planning discussions.

What-if analysis tools: Data Tables, Goal Seek, and Solver

One-variable and two-variable Data Tables for sensitivity

Data Tables are ideal when you want to see how outputs change across a range of one or two inputs without creating many scenarios.

Example 1: One-variable sensitivity on demand growth

  • Choose an output cell such as “Peak Required FTE” (maximum Required_FTE across the horizon) or “Ending Backlog at Week 12.”

  • List candidate growth rates down a column (e.g., 0%, 2%, 4%, 6%, 8%).

  • Set up a Data Table that substitutes each growth rate into the Demand_Growth assumption and records the output.

Example 2: Two-variable sensitivity on cycle time and shrinkage

  • Put cycle time values across the top row (e.g., 5.5, 6.0, 6.5, 7.0 minutes).

  • Put shrinkage values down the first column (e.g., 10%, 12%, 15%).

  • Use a two-variable Data Table to compute required FTE for each combination.

This quickly shows which lever matters most and where improvement projects (cycle time reduction vs. shrinkage reduction) have the biggest staffing impact.

Goal Seek for single-target decisions

Goal Seek answers: “What input value do we need to hit a specific output?” It works when there is one changing cell and one target cell.

Example: Find the cycle time needed to avoid backlog growth

  • Set the target cell to “Ending_Backlog at final week.”

  • Set target value to 0 (or to a tolerated backlog).

  • Set changing cell to CycleTime_Minutes (or productivity rate).

Goal Seek returns the cycle time required to meet the backlog target under the selected scenario. This is useful for setting productivity targets or validating whether a proposed process improvement is sufficient.

Solver for constrained optimization

Operations decisions often involve multiple constraints: overtime caps, maximum hiring per week, budget limits, and service targets. Solver can optimize a decision variable set under constraints.

Example: Minimize cost while meeting service level

  • Decision variables: planned hires per week, overtime percentage per week.

  • Objective: minimize total cost = labor cost + overtime premium + backlog penalty (if you assign one).

  • Constraints: Ending_Backlog must be below a threshold each week; overtime ≤ Overtime_MaxPct; hires per week ≤ recruiting capacity; FTE cannot be negative.

Solver is especially helpful when you want a feasible staffing plan that respects real-world limits rather than a theoretical required FTE line.

Scenario comparison outputs that drive decisions

Scenario summary table

Create a compact table with one row per scenario and key outputs as columns. Typical outputs:

  • Peak Required FTE

  • Average Required FTE

  • Max Backlog (units)

  • Ending Backlog (units)

  • Total Overtime Hours

  • Estimated Cost

To populate it, temporarily set selScenario to each scenario and capture the outputs. For a more automated approach, you can compute outputs for all scenarios by iterating scenario rows in formulas (more complex) or using a simple macro-free approach with separate scenario selector cells per row and referencing them (practical when scenarios are few).

Tornado chart thinking (even without a chart)

A tornado chart ranks inputs by impact on an output. Even if you don’t build the chart, you can replicate the logic:

  • Pick an output (e.g., Peak Required FTE).

  • For each key input, calculate output at “low” and “high” values while holding others constant.

  • Compute the swing (high − low) and sort descending.

This helps you focus on the assumptions that truly drive staffing risk (often cycle time, shrinkage, and demand variability).

Practical example: weekly fulfillment capacity plan with three scenarios

Inputs (per scenario)

  • Demand_Growth: Base 2% monthly, High 6%, Low 0%

  • Seasonality_Multiplier: Base 1.00, High 1.10 (peak promotion), Low 0.95

  • CycleTime_Minutes: Base 6.5, High 6.8 (more complex mix), Low 6.2 (process improvement)

  • HoursPerFTE_PerWeek: 37.5

  • Shrinkage: Base 12%, High 15% (more absence), Low 10%

  • Overtime_MaxPct: 10%

Engine calculations (per week)

  • Scenario_Demand (units)

  • Workload_Hours = units × cycle time ÷ 60

  • NetHoursPerFTE = 37.5 × (1 − shrinkage)

  • Required_FTE = Workload_Hours ÷ NetHoursPerFTE

  • Capacity gap = CurrentFTE − Required_FTE (or hours-based gap)

  • Backlog flow using capacity-limited completions

Outputs to review

  • Does High scenario create backlog? In which weeks does it start?

  • Is overtime sufficient to cover peaks without hiring? If not, how many weeks earlier must hiring start given the lag?

  • Which lever reduces peak staffing more: improving cycle time by 0.3 minutes or reducing shrinkage by 2 points?

Because the scenario assumptions are centralized, you can answer these questions by switching selScenario and observing the same output KPIs and charts.

Warehouse fulfillment planning scene with an analyst viewing a laptop dashboard comparing three scenarios (base, high, low) using colored lines for demand and staffing and a backlog bar chart. Modern realistic illustration, no readable text.

Common pitfalls and how to avoid them in scenario planning models

Mixing units (hours vs. units vs. FTE)

Capacity models often fail because of silent unit mismatches. Keep explicit columns for units, hours, and FTE. When converting, show the conversion factors (minutes per unit, hours per FTE) in the assumptions panel so they are visible and testable.

Overfitting the forecast

Scenario planning is not about making the baseline forecast overly complex. Keep the baseline stable and use scenarios to represent uncertainty bands. If you find yourself adding many “special case” adjustments, consider whether those belong as separate scenarios instead.

Ignoring lag effects

Hiring, training, procurement, and maintenance all have delays. If your model assumes capacity can change instantly, it will underestimate risk. Even a simple hiring lag and ramp factor makes the plan more realistic.

Not stress-testing extremes

Include at least one “stress” scenario: higher demand plus worse productivity plus higher shrinkage. The goal is not to predict it, but to ensure you know what breaks first and what contingency actions are available.

Implementation notes for making the model easy to operate

To keep scenario planning usable in day-to-day operations:

  • Keep the scenario selector visible near the top of the dashboard area.

  • Use a consistent set of outputs across scenarios (same KPIs, same time horizon) so comparisons are meaningful.

  • Store scenario assumptions in a single table so adding a new scenario is “add a row,” not “copy a sheet.”

  • When using Data Tables, isolate them on a separate sheet because they can slow recalculation in large workbooks.

  • Document each assumption with a short note (source, owner, last updated) adjacent to the assumptions panel so scenario changes remain auditable.

Now answer the exercise about the content:

In a scenario-based forecasting model, what should the scenario assumptions table primarily contain?

You are right! Congratulations, now go to the next page

You missed! Try again.

A good scenario table stores controllable assumptions (inputs) and avoids mixing in results. The engine references these inputs via a scenario selector so outputs like required FTE and backlog update automatically.

Next chapter

Simple Time-Series Forecasts for Operational Demand and Workload

Arrow Right Icon
Download the app to earn free Certification and listen to the courses in the background, even with the screen off.