Thirteen views on one business, from the sales of the week down to the operating result, the stock behind them and the plan in front of them. Every figure comes from the same weekly data set, and every filter recomputes the whole page, so no two views can disagree.
The week in one place: sales by channel and country against plan and last year, the commercial equation behind them, and what the store network produced.
The turnover read control in the filter bar changes the tax basis of the turnover, the average basket and the average price on this tab only — the till number a trading meeting uses, or the net number finance declares. Nothing is recomputed: transactions, conversion, items per basket, shares and growth rates are identical on both bases, and Financials, S&OP and every cost figure stay net of VAT whatever is selected, because a P&L is declared net and five markets taxed between 0% and 15% cannot be compared any other way.
Every figure in this brief is computed, not written. Change the data in the Data tab and the brief changes with it.
Stylised vector map, not to scale. Colour = growth vs the “Compare vs” reference; click again on a country to reset.
Turnover is net of VAT on every line; the average basket is the tax-inclusive figure the customer paid, which is the one a commercial team steers on — the two bases are reconciled on the Financials tab. Store conversion is transactions divided by people entering the store, counted at the door — not mall passers-by. On that basis the specialty-retail band is roughly 15% to 35%, and it moves with the format: a flagship in a mall carries browsers and converts near the bottom of the band, a small local store is visited to buy something specific and converts near the top. The cluster table on S&OP & Stock shows the spread behind this group average. One row per channel, one column per KPI, so a channel reads across and a KPI reads down. The demand base and the conversion column carry different units by channel — footfall and buyers per visitor in store, sessions and orders per session online, active accounts and order rate in wholesale — because that is what those channels actually count. The levels are therefore not comparable across rows; the movements are, which is what the vs LY and vs budget columns are for.
Country and sales channel come from the filter bar at the top of the tab; cluster and category are set here. Store conversion is deliberately not scaled by the category filter — the same people walk through the door whatever category is being read — while the basket is, because the goods differ. A country total is an average of four formats that do not behave alike, and the category filter is where that shows: the same market buys a different assortment depending on which format it walks into.
Payroll is the largest line in a store P&L and the only one that can be re-deployed inside a week, so it is read per hour rather than per head. Selling capacity is the share of paid hours actually spent in front of a customer, divided by the average time a transaction takes; utilisation is the transactions actually taken against that capacity. A store running under capacity does not need more people, it needs its hours moved; a store running at capacity is turning customers away and the conversion figure will never show it, because a customer who leaves without being served was still counted at the door.
Definitions: Online sales = digital demand across own sites, app and marketplace (GMV basis) — the line plan and targets are set on; Contribution is what it leaves after margin, retailer-funded discounts and digital media. CR = orders per session. Omnichannel share = orders fulfilled through Click & Collect, ship-from-store or endless aisle. Discount penetration = share of orders carrying a discount; suppliers fund most of the face value — only the retailer-funded cost enters Contribution. CAC = digital media per new customer. All data synthetic.
Margin before the P&L: banner mix, the VAT bridge, gross margin by category and its bridge, then the profit and loss down to operating result, channel by channel.
Commercial margin is stated before and after the discount granted, with promo penetration alongside, because depth and penetration move independently: the same margin rate can be reached by discounting a few lines heavily or many lines lightly, and the two need different corrections. Share of group margin against share of group sales says whether a banner is accretive or dilutive to the group margin rate. Every other view on this dashboard is calibrated on the fashion, beauty and home banner; the reconciliation identities, chained bridges, funding classes and cover bands transfer to every banner, the parameters are re-calibrated per banner.
The commercial basket is tax-inclusive, the declared margin is net of VAT. The rate is not constant across the region — zero in Qatar and Kuwait, 15% in Saudi Arabia — so a country ranking built on tax-inclusive turnover can be in the wrong order, not merely inflated. Every sales, margin, contribution and open-to-buy figure on this dashboard is net of VAT. Input VAT on purchases is recoverable, so the intake side of the OTB is net of it as well.
Rates are stated at full ticket price, before the retailer-funded discount — the same basis as the top line of the P&L below and as the opening and closing bars of the bridge beside it. The spread between categories is the stated parameter; the level is not: the rates are renormalised so the sales-weighted blend is the gross margin of the selection, and the two movement columns are recentred so their weighted averages are the movements the bridge shows. The category-mix step of that bridge is the shift of sales weight toward, or away from, the high-margin categories.
Same discipline as the monthly margin reviews this page imitates: mix (market and category), rate (discount rate, supplier margins by range, rebates), technical (NIP & expiries, accounting timing). Every step is signed, grouped and sums exactly to the GM movement — nothing is left in an unexplained bucket, and the opening and closing bars are the budget and actual gross margin of the selection above.
Backlog P−1 adds last week's ordered-not-yet-shipped volume invoiced this week; Backlog P removes this week's. Over a quarter the two roughly cancel; a widening gap between them is the early warning on warehouse throughput.
Identical line labels on both sides, and n/a where a line genuinely does not exist for that channel — a store has no last mile, a website has no shop floor to staff. The point of reading them together is the shape, not the level: the two channels reach a similar result through cost structures that have almost nothing in common, which is why a single group cost ratio is meaningless and why a channel that looks expensive per order can be the more profitable of the two.
Reconciliation: "Unit contribution before offers & media" is the same figure the Sales Overview steers with; this table expands it into its cost lines. Each cost line is stated per channel and blended on the selected mix, which is why a line disappears when the channel that carries it is filtered out.
Margin is recognised where the order is invoiced, which is the hub that shipped it — so a hub's margin rate is really a statement about the mix of countries, categories and promotions it serves. Read it next to the warehouse orchestration table on S&OP: the node with the worst capacity and split-order rate is also the one carrying the lowest margin, and neither fact causes the other, they share a cause.
The arbitrage that decides where the omnichannel investment goes. Cost to serve includes picking, packing, transport and the store fee where the store does the work; contribution is after that cost, after returns and after payment fees. A route that is cheaper to serve but slower is not automatically better — the promise column is what the customer buys.
The same week cut by route, country, category, cluster and brand, then the merchandising view — assortment, offer, brand power and price position.
Every route of the business — stores, web, app, marketplace, the three store-fulfilled routes and wholesale — so the columns total the country and the corner totals the group. Splits inside the digital layer are modelled from each country's channel mix (app and marketplace maturity differ by market; endless aisle counts in-store digital orders); v2 replaces them with tagged order data. The country and category filters at the top of the tab apply here too.
Clusters on the rows, countries in the columns, so the question becomes "which format works where" rather than "which country is up". Click a cluster row to open its categories in the same grid — the sub-rows sum back to the cluster line, and the cluster lines sum back to the group, so a drill-down never invents volume. Every cell is store sales for the latest week with growth against the same week last year; the country and category filters at the top of the tab apply.
Category mixes are modelled per market and reconcile to the country and group totals on the whole business, stores included. The country and category filters at the top of the tab apply here too — selecting a category leaves its own row as the total.
Turnover reads on the 20 country × channel cells including stores; traffic, conversion and basket read at country level on the digital layer, where session-level data exists. The bar on each box is the share of cells growing vs LY.
The commercial reading of the range: which stock is on offer and how fast it moves, what each brand earns and costs, the quality of the basket it produces, and where the price sits against the market. The markdown engine decides the depth; this section decides where the range is working and where it is not.
Three different speeds, deliberately separated. Promo stock speed = weekly units sold from promoted stock ÷ promoted stock — how fast the discounted assortment actually moves. Promo contribution to category speed = the same promoted outbound divided by the WHOLE category stock, promoted and not — what the promotion is worth to the category's overall rotation, which is the number buying and planning care about. The two never say the same thing: a deep promo on a small slice can look fast and move the category barely at all. The blend of promoted and non-promoted speed reconciles exactly to the category speed on the S&OP tab.
Dynamic discount rate is the discount actually granted on the brand's sales this week, not the shelf mechanic. Cash margin index is margin in dirhams per unit of sales relative to the group — the number that decides which brand a point of extra promotional weight should go to. Surge brands are those beating budget on falling discount intensity: they earn the space, they do not buy it.
A "perfect" basket is not the biggest one: it is the one that carries full-price value, breadth across categories and newness. Tracking the share of transactions meeting each condition tells you whether growth is being bought or earned, one criterion at a time.
Panel-based market share against a price index on comparable items. Read the two columns together: share gained while priced above the market is pricing power; share lost while priced below it is an assortment or availability problem that no further discount will fix.
Index 100 = market median shelf price on comparable items. Own-label sits far below market by design — a markdown point there costs less margin per unit of demand than the same point on selective brands, which is why the engine's funding classes matter as much as its depths.
What acquisition and retention cost and return: media by source, owned channels, the tranche released on ROAS, and the year secured in advance.
CAC is media spend per new customer, all sources. NCAC isolates the cost of a customer genuinely new to the brand; RCAC is what it costs to bring a lapsed one back — they are different budgets solving different problems and blending them hides which one is working. Media revenue share is the share of online sales the platforms claim; the contribution line on Financials charges the full spend against total sales instead, which is the harsher test.
This is the table that has to be read before the two below it. Paid media and owned channels each get their own deep dive further down, but neither can be judged without knowing what share of the business arrives without either — a paid ROAS of 6 means nothing if the same customer would have arrived through organic search or walked into a store. The incremental view applies the holdout results to each source and is the one to take into a budget discussion; last-touch is the one the platforms report.
Owned channels have almost no media cost, so ROAS on them is a large and misleading number: the real cost is the file, the platform, the creative and the permission to send. Cost per contactable customer is the column that makes them comparable with paid, and unsubscribes are the price of over-sending — a channel that beats budget on revenue while burning the file is spending an asset that does not appear in this week's P&L.
The table above is this week. This one is the year, and it is built before the year starts. Two layers: share of voice protection pre-books the weeks where the category was lost or seriously challenged last year, and opportunity windows pre-books the periods where extra spend historically paid — the last days of a month, the seasonal peaks, the late-conversion window. Both are agreed with finance in advance, so a trading meeting releases a tranche instead of negotiating a budget. Anything beyond the two layers stays available in-year when the trigger conditions are met.
The trigger column is the discipline: a window is not released because the month is behind, it is released because the condition written down twelve months earlier is true. Windows whose condition is not met stay unspent, and that is the point — the value of the framework is as much in the tranches it stops as in the ones it releases.
Three tranches per lever. Base is the committed always-on budget. Dynamic is released day by day only while week-to-date ROAS holds above the plan threshold — it buys volume on the days the auction is cheap and stops on the days it is not. Brand equity is defended share of voice, judged on presence rather than on last-click return, which is why its ROAS is structurally the lowest and why mixing it into the blended number makes the whole budget look worse than it is.
Incremental sales are measured against a holdout on every programme, so the "sales" column is what would not have happened otherwise — not everything the recipients bought. Cost includes the offer funded by us plus the send cost; ROI is incremental contribution over that cost.
The customer-level mirror of the commercial equation on Sales Overview: the same multiplication, one level down. Turnover per client = frequency × basket, and basket = items × price — so a tier can grow on any of the three and the action is completely different in each case.
From the door of the store to the confirmation page: footfall, sessions, the steps where customers are lost, and the ones who use both channels.
Read down this row before anything on the site: eighty-three per cent of the business happens here, and every digital number further down is a fraction of the same customer. Footfall is people entering a store counted at the door, not mall passers-by.
The store funnel does not have sessions and add-to-cart, it has footfall, advisor engagement and fitting or demo. The steps are different; the diagnosis is the same — find the step that loses ground against last year. Advisor engagement is the store's equivalent of the recommendation surface online, and it is the single biggest driver of the basket gap between the two channels.
A flagship carries browsers, so it converts lowest and sells the largest basket; a local store is visited to buy a known item, so it converts highest and sells the smallest. Averaging the two produces a store that does not exist and a conversion target no manager can hit.
Every line here is a customer who used both channels in the same journey. The omnichannel customer is not a third segment: it is the store customer and the site customer being the same person, and the value of that overlap is what pays for the endless aisle, the ship-from-store and the click and collect operation on Logistics.
Store conversion counts buyers per store visitor (footfall), online CR counts orders per session — the levels are not comparable, the GAPS between countries are. Digitally-influenced retail = store sales where the journey started online (viewed availability, C&C research, wishlist).
Bars are strictly proportional to sessions — no visual distortion. The thin bar under each step is the comparison period at the same scale, so a step that looks small is judged on whether it is normally that small. The right column carries the number that actually decides: the step-to-step pass rate and its movement, because a 3.0% → 2.3% drop only means something next to the 3.0% → 2.4% it used to be.
The site funnel above can be filtered by device, but filtering does not surface what is specific to an app: the install, the account creation and the first session are steps a website simply does not have, and they are where an app loses most of the people it paid to acquire. Steps that exist on only one side are marked; the shared steps are directly comparable.
Three horizons on purpose: the ISO week is noisy, month to date is the trading conversation, year to date is the structural one. A device losing ground on all three is a platform decision; one losing only on the week is a calendar effect.
The digital shop: how the customer finds the product, what is put in front of them, what brings them back, and what reassures them before they buy.
Four questions in order: how the customer finds the product (search and navigation), what is put in front of them (recommendation surfaces, editorial blocks, the offer by axis), what brings them back (push and in-app cards), and what reassures them before they buy (reviews, advisors). Every figure is a share of the same weekly digital business used elsewhere on the dashboard.
Conversion of searchers and non-searchers is derived from the site conversion of the surface and the observed ratio between the two populations, so the two lines always reconcile to the surface conversion shown in Customer Journey. Search-attributed revenue is the revenue of sessions that used search at least once, not a last-click attribution to the query.
Attributed revenue is the revenue of orders containing a product clicked from the surface. Tested uplift is the difference measured against a held-out control group, which is the only figure that can be added to a plan: attribution counts sales the customer might have made anyway, the control group does not.
Seen = share of sessions exposed to the component; CTR = clicks per exposure; CVR = conversion of sessions that engaged with it; sales share = last-touch attribution inside the session. Central vs local mirrors the homepage governance model — most blocks are centrally driven with defined local slots.
Coverage is the share of active references carrying at least one review. Collection rate is reviews received per post-purchase solicitation sent. Syndicated share is the part of the review base received from brand partners rather than collected by us, which costs nothing to obtain and carries no proof of purchase.
One row per axis, one column per week, each cell carrying the mechanic in place that week. The right-hand block reads the current week: the share of the axis sold on a mechanic, its movement against last year, sales, the discount rate and the margin left after it. An axis on a mechanic every week is not on promotion, it is on a new price.
The delivery promise and what it costs: warehouse, carriers, Click & Collect, ship-from-store, returns, and the store clusters that carry them.
The operational base of the report, read before anything commercial: click-to-delivery is what the customer experiences, promise respected is whether we did what we said, and the warehouse and carrier lines say which of the two is responsible when we did not. Forecast deviation (WAPE) belongs here because a warehouse cannot staff to a plan it does not believe.
Three omni routes that are constantly confused and cost completely different things. Click & Collect is picked from the store's own stock and never touches a carrier. Delivery to store is shipped from the warehouse inside the normal store replenishment flow: no carrier cost at all, because the parcel travels on a truck that was going to the store anyway, but it does add goods-in handling, a holding area and a customer hand-off that the store has to staff. Ship from store is the expensive one: the store picks, packs and hands to a carrier, so it carries both the labour and the last mile. Replenishment completion is the share of the allocated replenishment actually put on the shelf in the week it arrived — the number that decides whether the store fill rate below is a buying problem or an execution one.
The allocation view on S&OP asks which channel each node is holding stock for. This one asks whether the node can physically move it: storage density is how much of the racking is actually used, throughput is units in and out against the capacity of the shift pattern, and cost per movement is what the variable labour and handling contract charges for it. A node can be perfectly allocated and still be the reason the delivery promise breaks.
Ranked from the signals: the fastest-moving signal comes first. H3 is explicitly marked not derivable from this data.
Cost per order is the delivery leg only — picking and packing sit in the fulfilment cost on Financials. The AOV column matters because carriers do not carry the same baskets: the express lane takes the high-value orders and the post takes the light ones, so a cheap cost per order on a cheap basket is not the saving it looks like. Cost as a share of order value is the column that makes them comparable. Cash-on-delivery share is shown per carrier because COD is where the delivery failure, the cash handling and the refusal risk all concentrate.
The intraday curve is an operations decision, not a reporting curiosity: orders peak in the evening, preparation capacity is staffed to the afternoon, and collection peaks an hour after the order peak — which is exactly where the two-hour promise breaks. The additional-sale column is the argument that pays for the whole service: a customer collecting in store buys something else roughly a third of the time in flagships.
Category return rates rescale to the group return rate on the scorecard. Reasons reuse the ordered→invoiced classification on the Financials tab, extended to post-delivery returns; refund lead time is the days from carrier scan-in to money back.
Everything after the sale: cost to serve, payment methods and authorisation, the contact centre, and the costs that sit below the margin line.
Every figure is a cost per order stated against net-of-VAT order value, with one correction: the payment fee is charged by the scheme on the amount actually collected, tax included, so it is grossed up by each market’s VAT rate before being expressed here — which is why it costs more in Saudi Arabia than the headline rate suggests. Every line here sits below the gross margin and above the operating result, and none of them is decided by the commercial team: they are the invoice for the payment mix, the carrier mix and the contact volume the business generates. Read against the average basket, because a cost per order only means something next to the order it serves.
Delivery and pick & pack tie to the carrier and warehouse views on Logistics; payment fees and cash handling come from the mix below; contact centre is the weekly contact volume costed at the channel rates further down. The last column is the one that decides where to act — a market can be expensive per order and still cheap per dirham of sales.
Deflection potential is the share of that channel’s contacts whose reason has a self-serve answer today (tracking, return label, refund status) — it is a reachable number, not a theoretical one. Bot contacts are cheap per contact but resolve worst, so a bot that fails simply re-books the same contact into voice at fifteen times the cost.
What the customer says, by country and by channel, and which operational panel each satisfaction score is attached to.
The cost of these contacts sits on the Payment, Service & Costs tab; what is measured here is what the customer is left with afterwards. The repurchase column is the reason the service line is not a cost line: a contact resolved at the first touch leaves the customer buying again at close to the never-contacted rate, and one closed unresolved does not.
Each theme is mapped to the tab that owns its fix — satisfaction is an outcome, the levers live elsewhere.
The plan and the stock behind the sales: open-to-buy, intake, cover, sell-through, returns, stock speed and a six-week stress test.
Stock identity, applied weekly per category: closing = opening + inbound + returns to stock − outbound gross. Forward cover = closing stock ÷ trailing 4-week outbound. Stock speed = outbound ÷ opening stock. All units flow from the same weekly orders and items-per-basket as the Sales Overview tab, so the two tabs cannot disagree.
This is the table the S&OP meeting actually runs on. Actual weeks are computed from the stock identity; forward weeks apply the committed intake plan to the demand plan, including the sales peak in W36–W37, so a problem that only appears in six weeks is visible today. Rows flag themselves: cover out of band, a stock-out risk, or an intake pulse landing on top of an already-full category.
Sell-through and closing stock answer where the season ends. Stock speed answers what is happening now: the share of opening stock that leaves in the window selected in the Horizon filter. A category can close the season on healthy cover and still be selling half its opening stock in a single week, which means the best-selling sizes and shades are already gone even though the total looks fine.
Depreciation is the provision the ageing stock carries: units above the cover band are aged into buckets and provisioned at the rate their state deserves, which is exactly the write-off the Markdown Engine buys back when it clears at the optimal depth. Actions are rule-based from the numbers on the row.
Every line states its own formula so the number can be re-derived rather than trusted. Turnover, DIO and carrying cost are computed on average inventory at cost across the period, not on the closing snapshot, because a closing figure taken the week after a large intake flatters both. Service level, fill rate and stockout rate are three different questions and are not interchangeable: an order can be delivered late but complete, or on time but short.
The right-hand line is stock speed, not closing stock: the share of opening stock that leaves each week. A value line rises whenever intake lands and says nothing about whether the book is working; a speed line answers the only question the meeting has, which is whether the stock currently owned is moving faster or slower than the same week last year. Bars are units, the line is a percentage, and the shaded block on the right is the committed plan rather than history.
Two stock books share one warehouse and they are on opposite trajectories. The current season is being sold down and its residual is what the Markdown Engine has to clear; the incoming season is being received and has to reach the shop floor while it is still full price. A single stock total nets the two and hides the moment they cross, which is the week the markdown calendar and the newness push have to be set against each other.
One point per category. Horizontal is weeks of cover, vertical is the share of opening stock sold this week. The shaded column is the target cover band. The faint point is where the category sat last year and the line is the move since. Each quadrant carries one decision, which is the whole reason for plotting the two together: a category can be fast and still be a problem if it is short, and slow is only a problem when it is also long.
One line per category. The vertical axis is weeks of forward cover — closing stock divided by the average outbound of the last four weeks, so it reads as "at the current rate of sale, this category lasts N more weeks". The solid part is history, the dashed part applies the committed PO book to the demand plan. The shaded horizontal band is the target range. The question it answers is not how much stock there is but when a category runs out or drowns, and because intake has a lead time, a line heading for the floor six weeks out has to be acted on today, not when it gets there.
The same stock identity applied to the physical network: stores hold the majority of the units and are the reservoir the omnichannel promise draws on. Ship-from-store and Click & Collect only work if store cover holds — a store that is short cannot serve a digital order, and a store that is long is where the markdown starts. Inter-store transfers are the cheapest correction available before any markdown.
One warehouse is a simplification no multi-country retailer can afford. Capacity used is the constraint that turns a commercial plan into a CAPEX decision; split-order rate is what it costs the customer when a basket has to be served from two nodes; transfers are the correction that keeps the promise alive when allocation was wrong.
A cluster average still hides the spread inside it. Ranked on sales, with the operating metrics that decide whether the ranking is earned: a store high on sales and low on sell-through is carrying stock that belongs somewhere else, and it is the first candidate for a transfer rather than a markdown.
Lost sales are estimated as pageviews while out of stock × product-page conversion × price — the demand was measured, the stock was not there. The list feeds the expedite queue on inbound and the substitution rules in site merchandising.
Projection chains the same stock identity forward: outbound follows each category's demand plan including the seasonal peak, inbound follows the current PO book. The "recommended intake" column is the intake level that lands cover in the middle of the target band by W+6 — the number the next S&OP cycle has to sign.
A return is two events on two clocks. The sale is reversed the moment the customer sends the parcel back; the unit only becomes sellable again when it has been received, inspected and put away. The lag curve below is the share of a category's returns that is back in stock in W+1, W+2, and W+3 or later, stretched by the market's own reverse-logistics speed. Units still in transit are stock the business owns, pays to carry and cannot sell, and they are invisible to any model that credits a return in the week it was created.
The scenario re-runs the same six-week chain on the same identity — no separate model, no different numbers. It answers the three questions a planning review actually asks: what happens to cover, where does the first stock-out land, and what does it cost in lost sales.
How an aged block is cleared: a single depth against a step-by-step ladder on a sell-through target, what the residual is worth, and who funds each mechanic.
Markdown depth on this tab is expressed off the ticket price, tax included, because that is how a discount is granted and how a customer reads it. The margin and contribution consequences of that depth, here and on Financials, are computed on net-of-VAT sales. The two bases are reconciled on the Financials tab.
Two ways to clear the same stock, side by side, on the same block and the same window. On the left, the depth is chosen once and applied to everything until the window closes — the benchmark, and the way most discount tools frame the question. On the right, the depth is raised step by step until the block reaches the sell-through the business unit committed to. The table underneath puts both on the same four measures, and the ladder wins on all of them, which is the point of showing them together rather than one after the other.
The optimum is the peak of the blue curve, not where the two curves cross. The curves are on two different axes and two different units, so the crossing moves if either axis is rescaled and means nothing. The peak does not move: it sits where one more point of depth costs the discount on every unit that was already going to sell, and earns the margin on the incremental units it unlocks plus the provision those units no longer carry.
The two panels are not measuring the same thing. The optimiser's depth is applied to every unit, every week. A ladder's terminal depth is granted only in the last weeks and only to the units nobody wanted at the shallower steps, so the number that compares with the optimiser is not the last step but the average depth actually paid, on the total line below.
The step response is the part of this model that cannot be derived from a price elasticity, and it is the reason a ladder is not just a slower version of the same discount: each new depth is an announcement, and the week it lands sells above the steady-state rate of that depth before settling back. It is a stated parameter here, and it is the first thing to fit against real markdown history — set it to zero to see the ladder's advantage on elasticity alone.
One row per week of the clearance window: the depth in force, whether that week carries an announcement, what moved, and what it earned. The four summary lines are in the comparison table above.
A sell-through target below 100% is a decision, not a failure: clearing the last units costs more margin on the units that were selling than the residual is worth. That residual then has to go somewhere, and each route has a stated recovery and a stated cost. The provision the units carry is released whichever route is taken — which is why a route recovering less than cost can still be the right answer.
Set a depth and the panel reads the same scope as the curve above: units, speed, sell-through, margin per unit and total contribution, before and after. The question it answers is not whether sales rise — at any depth they do — but whether the volume gained pays for the margin given away, once the supplier's share and the provision the stock would otherwise have carried are both counted.
This panel answers one question: at what depth does a retailer-funded discount make money, given what the stock would otherwise do? Bars show the weekly contribution impact at 10% / 20% / 30% depth; the chip shows the profit-maximising depth found by the engine. The three sliders are the model's assumptions — move them to stress-test the conclusion, not to set policy.
What to build and what it is worth: the initiative portfolio with its capital, the store opening and closing calculator, and a four-quarter plan by lever.
The plan below is built from levers. This table is built from projects, because that is what gets funded and staffed. Each line states the part of the business it touches, the effect on sales and on margin in the first full year, the capital it needs to build and the cost of running it for a year kept apart — they are approved by different people at different moments — and the one prerequisite without which the rest of the line is fiction. Sales and margin effects are expressed against the current run-rate of the business the initiative touches, so they move with the country and channel filters.
Confidence is stated, not implied: high means the mechanism is already measured somewhere on this dashboard, medium means it is measured elsewhere in the market but not here, low means it is a judgement. A low-confidence line is not a line to drop, it is a line to test before it is sized.
Advisor cost per conversation is held constant across the three paths; only the routing changes. Three effects are modelled separately, because a table that nets a cost saving against a wage bill always reaches the same conclusion. Selection: advisors are handed the conversations with the strongest intent, so their order rate and basket rise as their share falls, with no change in skill. Handler skill: the copilot converts a comparable conversation less well, and the factor is solved from today's two order rates once selection is removed rather than assumed. Escalation: a copilot pushed past its competence leaves conversations unresolved that come back as a contact-centre contact and a lost sale, and that cost rises faster than the volume automated. The third effect is what makes the answer a routing line rather than a slope.
Every lever below lands on a number the rest of the dashboard can reconcile: the market and share block sizes the pool, the commercial drivers move the sales equation, the CRM and media block converts spend into revenue at a marginal return that falls as spend rises, and the store blocks build an opening or a closing from a surface, a format and an assortment rather than from a store count, then state the capital and the running cost it needs — the detail is in the store panel below the bridge. Nothing here creates demand out of nothing — media buys share of an existing market, and a push moves a purchase forward rather than inventing one, which is why the owned-channel returns below are stated net of the demand that would have arrived anyway.
Sales density is not assumed: it is the sales per m² per year that the selected format already produces in the current country and channel scope. The assortment adjustment is not linear — a store carrying 65% of the range does not sell 65% of a full-range store, because the range it drops is the slowest-selling part of it. The exponent used here is 0.55, which is a stated assumption rather than a measured one, and it is the first thing to fit against real openings. Cannibalisation is subtracted from the programme, not from the store: the store sells what it sells, and part of it comes from the store or the website next door.
Stated up front because they are the first things to fix with real data, and they all push in identifiable directions.
| Margin held flat across channels Marketplace orders carry commission economics and ship-from-store moves cost per order with store density; both are held at the blended margin here, so the marketplace initiative's ROI is optimistic and the SFS wave's likely conservative. |
| Store P&L interactions not modelled Click & Collect and endless aisle move footfall and store labour; the model stops at digital contribution. |
| Elasticities assumed, not fitted Markdown response by product state and channel is a prior to calibrate on transaction history. |
| Country, channel and loyalty splits are modelled All dimensional splits are deterministic models for the demo, built to reconcile exactly to the weekly group totals; the first job on real data is replacing them with observed splits. |
The weekly data set the whole page is computed from, and the calculation contract that keeps every view consistent with it.
Every currency figure on this dashboard is net of VAT — turnover, average basket, margin, contribution, cost to serve, Open-to-Buy, stock value. There is one basis and no mixed reading: sales ÷ average basket gives the transaction count on every panel, which is not true of a page that states sales net and the basket tax-inclusive. The reason for choosing the net basis is on the Financials tab: these five markets are taxed at 15%, 14%, 5%, 0% and 0%, so a tax-inclusive comparison between them measures the tax as much as the business, and a P&L is declared net in any case.
This is a deliberate departure from how a commercial team usually reads its week. A trading meeting reads the till — tax included, because that is what the customer paid and what the store manager sees — and finance converts to net afterwards. Both are right, they are not the same number, and the gap on this week is AED 18.3M: 248.9M tax included, 230.5M net. The bridge between the two, country by country, is the first table of the Financials tab.
Two exceptions, labelled where they appear. Markdown depth is expressed off the ticket price, tax included, because that is how a discount is granted and how a customer reads it; its margin consequences are computed net. Payment fees are charged by the scheme on the amount actually collected, which includes the tax, so a fee costs more as a percentage of net sales than its headline rate — that gross-up is applied on the Payments tab rather than ignored.
Schema: week, sessions, new_customers, orders, sales_aed, retailer_discount_aed, media_spend_aed, plan_sessions, plan_cr_pct, plan_aov, discount_penetration_pct — one row per week, oldest first. Every group-level view and the brief recompute; country, channel and loyalty splits are modelled on top and rescale to your totals.
One calculation contract for the whole page: the weekly group rows above are the only input; country, channel, funding and loyalty splits are modelled on top and rescaled so every table reconciles to the group totals in all directions. The Decision Brief follows the same contract — it is generated from the computed aggregates only, so it can never quote a figure that is not on the page, and anything the data cannot support is flagged as not derivable rather than guessed.
Conventions: growth attribution in pp on a common group base (additive in both directions); the commercial equation runs a chained four-factor bridge, traffic → conversion → items per basket → average price, whose steps sum exactly to the gap (the filtered waterfall keeps the three-factor form since basket depth is not modelled per channel); comparisons only on comparable periods (same week vs Plan or vs LY); contribution = sales × margin − retailer-funded discounts − digital media.
S&OP identities: outbound gross units = orders × items per basket, split by category share; closing stock = opening + inbound + returns to stock − outbound; forward cover = closing ÷ trailing 4-week outbound; sell-through = outbound ÷ (opening + inbound). The ordered → invoiced bridge applies stated erosion factors (shipping fees, gift cards, cancellations by origin, fraud, backlog in/out, returns by reason) to ordered value excluding Click & Collect, and reconciles demand-side sales to invoiceable revenue. Brands, media levers and care reasons are modelled splits that rescale to the group weekly totals, like every other dimension on the page.
Financials & CRM: the P&L expands the steering margin into stated cost ratios (customer care computed from the care model) and reconciles to the same contribution figure as the Sales Overview; the GM bridge and operations bridge are weight-based decompositions whose steps sum exactly to the movement they explain; recruitment, multi-category baskets, funnel steps and top products rescale to the week's new customers, transactions, sessions and AOV respectively. The S&OP forward projection chains the stock identity six weeks ahead at the committed intake, and solves the intake ratio that lands cover mid-band — a deterministic calculation, not a forecast model.
Onsite, merchandising and the initiative portfolio: search conversion is solved, not typed — given the share of sessions that use search and the observed ratio between searchers and non-searchers, the two conversions are the pair that reconciles to the conversion of the surface, so the panel can never contradict the funnel. Recommendation surfaces carry two figures on purpose: attributed revenue, which counts orders containing a clicked product, and the part of it proved incremental against a held-out control, which is the only one used in a plan. Push and in-app volumes are built from an app base derived from app sessions and visits per user, so they move with the same traffic as every other panel. The copilot paths model three effects separately — selection (advisors receive the conversations with the strongest intent, so their order rate rises as their share falls), handler skill (solved from today's two order rates once selection is removed), and escalation (unresolved conversations return as a contact-centre contact and a lost sale, at a rate that rises faster than the volume automated). The initiative portfolio sizes each line against the run-rate of the business it touches, separates the contribution of incremental sales from the effect on the rate of the business that already exists, and states a confidence weight rather than implying one.
Next iterations: v2 fits channel and country elasticities from transaction history instead of assumed parameters; v3 automates the weekly refresh and posts the brief to the trading channel.