Map Demand State
Map raw rows into the scenario's demand state table: the outcome of demand, how much was fulfilled at each location, and the revenue realized.
This is the output side of demand. Pair it with Map Demand Policy, the rules, on baselines you will compare against an optimization.
When to use this¶
- The scenario is a baseline that should preserve observed fulfilment for later comparison
- You're building a scenario for dashboards and want realized demand totals visible beside the optimization output
Network Optimization does not read this table. It writes it fresh every run. Optimization-only workflows can skip this node.
What you need¶
- An upstream Import Data node with one row per (location, product) you have observations for
- A fulfilled-quantity column or a realized-revenue column, typically both
Field mapping¶
Auto-detection is all or nothing. With no explicit mapping on the node, every field is matched against the headers listed below, case-insensitively, and a space in your header reads as an underscore, so Site Name matches site_name. Set even one field explicitly and detection switches off for the whole node: only the fields named in the mapping are filled, and the rest arrive empty.
Set mappings in the node's panel. Connect an upstream table and select the mapping node to see automatic matches. Choosing a column saves all displayed matches as an explicit mapping. Use Use automatic detection to return to header detection. Required fields without a match are marked in the panel.
| Field | Type | Required | Example | What it is | Auto-detected headers |
|---|---|---|---|---|---|
| Location | text | Yes | Store 1 |
Where demand was served. Must match a Location name. | location, loc, name, id, location_id, loc_id |
| Product | text | Yes | Widget |
Product or SKU. Required — name it even in a single-product scenario. | product, sku, item, material, product_id |
| Fulfilled Quantity | number | No | 90.0 |
Quantity actually delivered in the recorded baseline. Its unit goes in Quantity Unit. | fulfilled_quantity, fulfilled, quantity, qty |
| Quantity Unit | text | No | units |
Unit that fulfilled quantity is expressed in. | quantity_unit, qty_unit, unit, uom |
| Realized Revenue | number | No | 1080.0 |
Total revenue actually earned in the baseline (not per-unit). | realized_revenue, revenue, sales, income, value |
How it works¶
Each row becomes a demand state record. The scenario stores the realized totals so dashboards, the map and side-by-side comparisons can read what got served.
An optimization overwrites this table; nothing else does. A run that solves recomputes the state and replaces what was there. A scenario loaded and saved again without an optimization keeps the rows it was carrying. That is what makes a mapped baseline a baseline, and why an observed table mapped here survives into the comparison you built it for.
Workflow wiring¶
Pair with Map Demand Policy when building a baseline:
flowchart LR
n1["Import Data (demand.csv)"] --> n2["Map Demand Policy"]
n2 --> n3["Create Scenario"]
n1 --> n4["Map Demand State"]
n4 --> n3
Common mistakes¶
- Wiring only this node and expecting the optimizer to use it. The optimizer reads Map Demand Policy. State is observation.
- Mapping a per-unit rate here. Realized Revenue is a total. Per-unit revenue belongs on Map Demand Policy.