Most of our supply chain tutorials have been written from a manufacturing or distribution point of view: demand planning, supply netting, safety stock, rough-cut capacity. Retail plans the same physical goods with a completely different vocabulary and a completely different arithmetic. A merchant does not plan units against a bill of materials; they plan sales at retail, mark goods down, and manage a receipt budget — open-to-buy — that keeps inventory productive against a sales plan that changes weekly.
Merchandise financial planning (MFP) and open-to-buy (OTB) are one of the cleanest fits for Anaplan anywhere in the enterprise, and one of the least well covered in general Anaplan material. This tutorial builds the model end to end: the core identity, the WSSI, the retail method of accounting, OTB in both cost and retail, and the reconciliation loop between the finance plan and the buyers' assortment plans.
It assumes you are comfortable with lists, subsidiary views, CUMULATE, PREVIOUS, and weekly time in Anaplan. If you have built a demand planning or inventory model before, most of the mechanics will feel familiar; the accounting will not.
The identity everything else serves
Every merchandise plan, in every retailer, is a rearrangement of one equation, stated at retail value for a single period:
Opening Inventory + Receipts - Sales - Markdowns - Shrink - Returns to Vendor = Closing Inventory
Solve it for receipts and you have open-to-buy:
Planned Receipts = Planned Closing Inventory + Sales + Markdowns + Shrink - Opening Inventory
Open-to-Buy = Planned Receipts - On Order - Received to Date
That is the whole model. Everything below is about making that identity hold at every level of the merchandise hierarchy, in every week, in both cost and retail, while several hundred people edit different parts of it.
Write the identity on a whiteboard before you create a single list, and get merchandise planning, finance, and allocation to agree on the definition of each term. In particular agree on whether markdowns are modeled as a separate reduction of retail value or netted into sales, and whether shrink is a percentage accrual or a physical count adjustment. Those two choices determine half the line items in the model.
Step 1: Dimensions
MFP models live or die on hierarchy design. Retail hierarchies are deep, they change seasonally, and the temptation to build one enormous module across all of them is what produces the multi-hundred-gigabyte MFP models the platform is infamous for.
| List | Structure | Notes |
|---|---|---|
Merchandise Hierarchy | Division → Department → Class → Subclass | The planning grain. Do not plan at SKU in MFP; that is assortment planning's job. |
Location Hierarchy | Total → Channel → Region → District → Store | Plan at channel or region; store-level belongs in allocation. |
Time | Weeks, 4-5-4 retail calendar | Non-negotiable. See step 2. |
Versions | Native versions | Plan, Actual, Last Year, Forecast, OTB Working |
Plan Levels | Flat: Top-Down, Middle-Out, Bottom-Up | Drives the reconciliation layer. |
Measures | Line item subset | Shared measure set across planning modules. |
The single most important sizing decision: pick one planning grain and hold it. Subclass × Region × Week × Versions is a defensible MFP grain. Subclass × Store × Week is roughly two orders of magnitude larger and buys a merchandise planner nothing — the store-level split is a distribution calculation, not a planning decision, and it belongs downstream.
Step 2: The retail calendar
Retail runs on a 4-5-4 (or 4-4-5, or 13-week) fiscal calendar in which weeks are the atomic unit, months are groups of four or five weeks, and the year is 52 or 53 weeks long. Anaplan's native calendar handles weekly time, but you need to do the mapping work explicitly:
- Set the model calendar to Weeks: General with the correct fiscal year start week.
- Build a
TIME01 Retail Calendarmodule dimensioned byTime(weeks) with properties:Fiscal Week #,Fiscal Month,Fiscal Quarter,Week Ending Date,Is 53rd Week?, and — critically —LY Comparable Week. LY Comparable Weekis a line item formatted asTimethat points each week at the correct prior-year week. In a 53-week year this is not a simple 52-week offset, and getting it wrong makes every comp-sales number in the model quietly wrong.
Every last-year comparison in the model should read through LY Comparable Week rather than using PREVIOUS() with a hard-coded offset. Build it once, in one place, and reference it from everywhere.
Sales LY = LOOKUP Sales Actual using LY Comparable Week
Comp Sales % = IF Sales LY = 0 THEN 0 ELSE Sales / Sales LY - 1
Step 3: The retail method of accounting
Finance reports margin; merchants plan retail value. The bridge is the retail method, and it must be built explicitly or the two organizations will never reconcile.
Create RM01 Retail Method, dimensioned Merchandise Hierarchy × Location Hierarchy × Time:
Gross Sales Retail = input or driver-based
Markdown Retail = planned markdown value
Net Sales Retail = Gross Sales Retail - Markdown Retail
Cost Complement % = 1 - Initial Markup %
Cost of Goods Sold = Net Sales Retail * Cumulative Markon Complement %
Gross Margin $ = Net Sales Retail - Cost of Goods Sold
Gross Margin % = IF Net Sales Retail = 0 THEN 0 ELSE Gross Margin $ / Net Sales Retail
Initial Markup % = (Original Retail - Cost) / Original Retail
Maintained Markup % = Gross Margin % adjusted for shrink and freight
Three traps worth naming:
- Initial markup is not gross margin. IMU is set at receipt; gross margin is what survives markdowns and shrink. Planners who conflate them plan margin they will never achieve.
- Cumulative markon is a blended rate across opening inventory and receipts, not the markup of this week's purchase order. Compute it from the inventory position, not from the receipt.
- Freight and vendor allowances change the effective cost. Keep them as separate line items feeding
Cost of Goods Soldso finance can see the bridge from invoice cost to landed cost.
Step 4: The sales and markdown plan
Merchandise planners rarely type 52 weekly numbers. They plan a season total and shape it. Build MFP01 Sales Plan so the season total is the input and the weekly curve is a driver:
Season Sales Plan = input at season/subclass level
Week Curve % = seasonality profile, from LY actual or a curated curve library
Sales Plan (Week) = Season Sales Plan * Week Curve %
Sales Plan Override = optional weekly input
Sales Plan Final = IF ISNOTBLANK(Sales Plan Override) THEN Sales Plan Override ELSE Sales Plan (Week)
Keep a small Curve Library module — dimensioned by a Curves list × Fiscal Week # — holding named shapes: Basic Flat, Holiday Peak, Back to School, Spring Transition, Clearance Tail. Planners select a curve per subclass and adjust; nobody rebuilds seasonality from scratch.
Markdowns get the same treatment but phase differently. Markdown is a function of inventory age and sell-through, not of sales volume:
Markdown % of Sales = planned rate by lifecycle stage
Promo Markdown = event-driven, from a Promo Events list
Clearance Markdown = triggered by weeks of supply above a threshold
Markdown Retail = Sales Plan Final * Markdown % of Sales + Promo Markdown + Clearance Markdown
Building promotional markdowns against a Promo Events list rather than as free weekly input is what lets the merchandising and marketing calendars be compared to the financial plan at all.
Step 5: The WSSI
The Weekly Sales, Stock and Intake sheet is the merchandise planner's cockpit. It is the identity from the top of this article, laid out by week, with inventory carried forward. Build it as one module, MFP02 WSSI, dimensioned Merchandise Hierarchy × Location Hierarchy × Time × Versions:
Opening Stock Retail = PREVIOUS(Closing Stock Retail)
Sales Retail = Sales Plan Final
Markdown Retail = from MFP01
Shrink Retail = Sales Retail * Shrink %
Receipts Retail = Planned Receipts Retail (from OTB, step 6)
RTV Retail = returns to vendor
Closing Stock Retail = Opening Stock Retail + Receipts Retail - Sales Retail - Markdown Retail - Shrink Retail - RTV Retail
Weeks of Supply = IF Forward 4wk Sales = 0 THEN 0 ELSE Closing Stock Retail / (Forward 4wk Sales / 4)
Sell Through % = Sales Retail / (Opening Stock Retail + Receipts Retail)
Stock to Sales Ratio = IF Sales Retail = 0 THEN 0 ELSE Opening Stock Retail / Sales Retail
Two mechanical points that trip up first-time builders:
PREVIOUS on the first week of the plan. The opening stock of week one is not a calculation; it is an actual or a seeded input. Handle it with a switch rather than letting PREVIOUS return zero:
Opening Stock Retail = IF Is First Plan Week? THEN Seeded Opening Stock ELSE PREVIOUS(Closing Stock Retail)
Do not aggregate weeks of supply or sell-through. Ratios must be recalculated at every level from their aggregated numerators and denominators. Set summary method to Formula on every ratio line item in the WSSI. Leaving them as Sum produces a department-level weeks-of-supply figure of 400 and a credibility problem you will spend a month repairing.
Step 6: Open-to-buy in cost and retail
OTB answers a specific question: how much more can I commit to buy, right now, without breaking the inventory plan? Build OTB01 Open to Buy:
Target Closing Stock = Forward Weeks of Supply Target * (Forward 4wk Sales / 4)
Planned Receipts Retail = Target Closing Stock + Sales Retail + Markdown Retail + Shrink Retail - Opening Stock Retail
Planned Receipts Cost = Planned Receipts Retail * (1 - Planned IMU %)
On Order Cost = open purchase orders by expected receipt week, from the PO feed
Received to Date Cost = actual receipts
OTB Cost = Planned Receipts Cost - On Order Cost - Received to Date Cost
OTB Retail = OTB Cost / (1 - Planned IMU %)
OTB Status = IF OTB Cost > 0 THEN "Open" ELSE IF OTB Cost > -Tolerance THEN "At Plan" ELSE "Overbought"
Several things make this real rather than academic:
- Both currencies of the trade. Buyers negotiate in cost, merchants plan in retail, finance reports both. Show both columns side by side; never make a user do the IMU arithmetic in their head.
- Phase on-order by expected receipt week, not PO date. A PO placed in week 12 arriving in week 20 consumes week 20's OTB. Pulling the PO feed in with an expected-receipt week dimension is the difference between a usable OTB and a rough guide.
- Respect lead time. Weeks inside the vendor lead-time horizon are not truly open even if the arithmetic says they are. Add
Is Actionable?=Week Ending Date - Today >= Lead Time Daysand grey out the rest with Dynamic Cell Access. An OTB that invites a buyer to place an order that cannot physically arrive in time is worse than no OTB. - Tolerance, not zero. No plan lands exactly. A
Tolerance %by department turns a wall of red cells into a manageable exception list.
Step 7: Top-down, middle-out, bottom-up reconciliation
Finance sets a division sales and margin target. Merchandise planners plan at class. Buyers build assortments at style-colour. These three numbers are never equal, and the model's job is to make the gap visible and assignable rather than to pretend it away.
Build REC01 Plan Reconciliation, dimensioned Merchandise Hierarchy × Time × Plan Levels:
Top-Down Target = finance plan, entered at Division
Top-Down Allocated = Top-Down Target * Class Share %
Middle-Out Plan = merchandise planner input at Class
Bottom-Up Plan = SUM of assortment plans from the style-colour model
Variance TD to MO = Middle-Out Plan - Top-Down Allocated
Variance MO to BU = Bottom-Up Plan - Middle-Out Plan
Variance MO to BU % = IF Middle-Out Plan = 0 THEN 0 ELSE Variance MO to BU / Middle-Out Plan
Reconciled? = ABS(Variance MO to BU %) <= Tolerance %
Give planners an explicit seeding action rather than expecting them to copy numbers: a Push Top-Down to Class action that writes the allocated target into the middle-out input, and a Pull Bottom-Up to Class that does the reverse. Anaplan's advantage over the spreadsheet process this replaces is not better arithmetic; it is that both directions of the negotiation happen in the same numbers, in the same week, with a variance that nobody can quietly delete.
Run the reconciliation status onto a single UX page with a traffic-light grid by department. In-season, that page is the weekly trade meeting.
Step 8: In-season reforecast
Preseason planning is the smaller half of the job. In-season, the model has to answer weekly: given what has actually sold, what will the season land at, and what should I do about it?
Actual Sales YTD = CUMULATE(Sales Actual, FY)
Plan Sales YTD = CUMULATE(Sales Plan Final, FY)
YTD Index = IF Plan Sales YTD = 0 THEN 1 ELSE Actual Sales YTD / Plan Sales YTD
Balance of Season Plan = Remaining Plan * Reforecast Index
Reforecast Index = planner input, seeded from YTD Index
Season Reforecast = Actual Sales YTD + Balance of Season Plan
Open Receipt Exposure = On Order Cost for future weeks
Inventory Risk Flag = Projected Closing WOS > Risk Threshold
Seeding Reforecast Index from the YTD index and letting the planner override is the pattern that gets adopted. A pure-mechanical chase forecast gets ignored; a blank input box gets left blank.
The Inventory Risk Flag plus Open Receipt Exposure combination is the highest-value output of the whole model in a soft season. It tells a merchant which departments to cancel or delay before the goods land, and it is the report that pays for the implementation.
Step 9: Performance
MFP models are among the largest Anaplan applications in existence. Discipline matters more here than anywhere else in the platform.
- Plan at one grain. Every extra dimension on the WSSI multiplies the whole model. Resist store-level, resist SKU-level, resist adding a size dimension for the sake of completeness.
- Split preseason and in-season. Different grains, different users, different weeks. One module trying to serve both ends up wide and slow.
- Use native versions carefully. Versions multiply cell count exactly like a list. Five versions on a large WSSI is five times the WSSI.
- Watch weekly time. 52 weeks plus rollups plus two years of history is a lot of time periods. Use Time Ranges to keep history modules out of the full model calendar.
- Summary methods. Set
Noneon every line item that has no meaningful aggregate — rates, flags, text codes. This is the cheapest performance win available in an MFP model and the most commonly skipped. - Consider Polaris for the sparse layers. Assortment planning at style-colour × store × week is extremely sparse, which is exactly the shape Polaris handles better than Hyperblock. A hybrid estate — Hyperblock for the dense WSSI, Polaris for the sparse assortment grain — is a legitimate architecture worth evaluating rather than forcing everything into one engine.
Common design mistakes
Building the WSSI at the grain the buyers asked for. Buyers ask for SKU-store-week because that is what they want for assortment execution. Give them that in a separate downstream model. Merchandise financial planning is a financial process and belongs at class or subclass.
Letting ratios aggregate. Weeks of supply, sell-through, IMU, and margin percent must all recalculate at parent level. Set summary method to Formula, and check the department totals before demo day.
Ignoring the 53rd week. It arrives roughly every five or six years, it breaks every hard-coded 52-week offset in the model, and it is trivially handled by a calendar mapping module built up front.
Treating OTB as a report. OTB is a decision tool. If a buyer cannot see it filtered to their departments, phased to actionable weeks, in cost, on the day they are negotiating, it will not be used, however correct the arithmetic.
No shrink and no RTV. Both are small percentages that compound into a material closing-inventory error across a season. Model them from day one even if the initial rates are crude.
Where to start
Build the identity first, at one department, for one season, in retail only. Get the WSSI to tie: opening plus receipts minus sales minus markdown minus shrink equals closing, in every week, at every level. Then add cost and the retail method, then OTB, then reconciliation, then in-season.
A merchandise planner who can see a WSSI that ties will trust the model. One who sees a closing inventory that does not reconcile, on day one, will go back to the spreadsheet and never fully return.
If you are planning an MFP or OTB build on Anaplan and want a review of the hierarchy and grain decisions before they are locked in, get in touch — grain is the one choice in this model that is expensive to change later.