FMCG analytics: sell-in, sell-out, trade spend and service in one reconciled view
An FMCG supplier does not own the shelf, the checkout or the customer record. Every number that matters to the business either arrives from somebody else's system or has to be argued out against somebody else's system. That single structural fact is what FMCG analytics exists to deal with, and it is why data analytics for fast moving consumer goods looks nothing like reporting in a business that sells direct.
This page is written for the person who has to carry the number into the room: a commercial or national account manager preparing for a range review, a sales director who has to say whether the last catalogue period paid for itself, a demand planner defending a forecast, or a finance manager who needs customer margin after trade before the board pack goes out. If you have ever had four versions of last week's sales sitting in four tabs and no defensible way to say which one is right, this page is about that.
What it settles is narrow and specific: which sources a supplier's reporting has to draw on, how the core measures are actually calculated, why the calculation goes wrong when it is done casually, and what a reporting set has to reconcile before anyone can trust a chart on it. There are no client names and no percentages here, because we do not publish outcomes we cannot attribute. There is a lot of mechanics, because that is the part nobody else writes down.
What FMCG analytics has to answer
Strip away the dashboards and the reporting exists to settle five questions. They get asked in almost exactly these words.
"Did that promotion actually make money?" Not did it move volume — it always moves volume. Did the incremental margin cover the scan-back, the off-invoice, the co-op advertising, the gondola end and the deductions that turned up nine weeks later against an unrelated invoice.
"Why is our number different from the retailer's number?" Usually asked about service. Sometimes asked about sales. Always the same underlying problem: two parties measuring the same event against different denominators, on different clocks, at different units of measure.
"Whose forecast was wrong?" Asked when there is a truckload of short-dated stock in the distribution centre, or when a promotion sold out in week one and the retailer has a gap on shelf and a long memory.
"What is this customer actually worth to us?" Gross sales by customer is easy and nearly useless. Net realised price after every rebate, deduction and freight line, minus cost to serve, is the number that changes decisions, and most suppliers cannot produce it on demand.
"Are we ranged where it counts, and is it selling once we are there?" Distribution gains that look good on a store count and disappear on a weighted measure. Rate of sale that cannot be compared between two SKUs sitting on different distribution.
Everything below is in service of those five.
The data, and where it comes from
Six layers, each arriving in a different shape, on a different cadence, keyed differently. Nothing joins to anything else without deliberate work.
| Source | Where it arrives from | Format | The catch |
|---|---|---|---|
| Retailer scan and sales data | Each retailer's own supplier analytics platform — reporting can connect to what a supplier exports from platforms such as Coles Synergy, built with IRI/Circana on Liquid Data, or the wiq (Woolworths Group and Quantium) supplier stack | Web platform with export; CSV and Excel | Each retailer defines the measure and the supplier inherits the definition. Coles Synergy is explicit that it uses the same measures Coles uses internally. Two retailers' "sales" are not the same sales. |
| Retailer operational and service data | Supplier portals — Woolworths Partner Hub, Primary Connect's SCoRe non-conformance system, the Coles Supplier Portal, Metcash's Sorted platform. Reporting can connect to what these export | Portal screens, CSV, PDF claim notices | Different login per retailer, different export layout per retailer, and column headers that change without notice. Non-conformances are recorded at vehicle, pallet and carton level and rarely make it back into the supplier's own service reporting. |
| Syndicated market data | Circana (formerly IRI, and before that Aztec in Australia and New Zealand) or NielsenIQ Retail Measurement Services, bought by subscription | Provider platform with export; weekly or four-weekly periods | Scoped and priced by category and market, so a brand is visible in one cut and invisible in the adjacent one. Historical files may carry any of three provider names across a five-year trend. |
| Internal ERP | Whatever the business runs — reporting can connect to SAP Business One, Dynamics 365 Business Central, NetSuite, Pronto Xi, MYOB Acumatica, Odoo, or Xero with an inventory app | Database, API, or scheduled extract | Holds shipments, not sales. Trade spend components land in revenue for some deals and expense for others depending on how the ERP was configured, which is why two people compute a different trade spend percentage from the same ledger. |
| Warehouse, 3PL and transport | Usually the 3PL's warehouse system, not yours; carrier feeds; retailer-collected freight where the retailer picks up | CSV drops, or an API you do not control | You are reporting on a system you cannot change, at whatever grain the 3PL chooses to send. Despatch timestamps are yours; receipt timestamps are the retailer's. |
| Pallet accounts | CHEP and Loscam transfer dockets. Primary Connect operates as a sender-declares partner, so the supplier raises the docket | Electronic dockets, spreadsheets, statements | A pallet account behaves like a bank account any counterparty can post to. Suppliers are directed to process transfers within 60 days of delivery; CHEP allows 180 days to notify a transfer and Loscam two months, and pools cannot be crossed. Unreconciled transfers become hire charges with no line of sight back to the delivery that caused them. |
| The spreadsheet layer | One person, every Monday | XLSX | It works, it takes hours before every trading meeting, and it stops when that person takes leave. |
Underneath all of it sits a master data problem that causes more reporting failures in Australian FMCG than any analytical mistake: the supplier's item master, the GS1 Australia National Product Catalogue record used with Woolworths, Coles and Metcash, each retailer's own item code and the syndicated provider's product hierarchy are four different keys for the same carton. Nobody owns the mapping between them, so it gets rebuilt by hand every time somebody needs it.
The KPIs, defined properly
Formulas, not benchmarks. We do not publish target values for these because there is no citable Australian benchmark for any of them.
| KPI | Definition | What goes wrong when it is calculated casually |
|---|---|---|
| Trade spend as % of gross sales | Total trade investment ÷ gross sales value, same period, same customer scope. Investment includes off-invoice, permanent price allowances, scan-back and bought-in promotional funding, volume and growth rebates, listing and new-line fees, distribution allowances, retail media and co-op advertising, catalogue and gondola-end fees, and deductions raised against invoice | Some components are booked against revenue and some against expense. Change the ERP treatment of one rebate type and the percentage moves without anything real changing. Without a named gross-to-net bridge, sales and finance quote different numbers and both are defensible |
| Net realised price | List price, less off-invoice, gives invoiced price; less scan-back and promotional rebates; less volume and growth rebates; less deductions, claims and returns. What is left is net realised | Suppliers routinely stop at invoiced price and call it net. The rebates that land later are the ones that decide whether the customer is profitable |
| Gross margin after trade | Net realised revenue − COGS. Subtract cost to serve for true customer contribution | Trade accruals are booked in the month of the deal, actual claims arrive weeks later. Compare an accrual month to a claim month and margin by customer oscillates for reasons that have nothing to do with trading |
| Promotional ROI | Incremental gross margin ÷ promotional investment, where incremental volume = promoted volume − baseline volume | Everything contentious lives in "baseline". Last year is not a baseline. An honest number also nets off cannibalisation of your own SKUs, pantry loading that flattens the following four weeks, and retailer forward-buy at deal price. A promotion can be positive on incremental units and negative on incremental margin at the same time |
| DIFOT | Deliveries both in full and inside the agreed window ÷ total deliveries. No partial credit — a line is perfect or it is not | The unit of measure changes the answer on identical deliveries: orders, lines, cases and pallets all give different percentages. OTIF is the same idea and frequently a different calculation |
| Forecast accuracy | MAPE = mean of |actual − forecast| ÷ actual; accuracy usually quoted as 100% − MAPE. WMAPE = Σ|actual − forecast| ÷ Σ actual | MAPE is unbounded above, so one slow SKU with a tiny denominator can drag a whole category's average into nonsense. WMAPE is fairer for a portfolio. And a number quoted without its grain and its lag means nothing — SKU by store by week at eight weeks' lag and national by month at one week's lag are both called "forecast accuracy" |
| Forecast bias | Σ(forecast − actual) ÷ Σ actual | Reported inside accuracy rather than beside it. Accuracy says how wrong; bias says which way, persistently. Acceptable MAPE with a steady positive bias quietly builds inventory nobody decided to hold |
| Stock cover | Closing inventory units ÷ average daily demand, or weeks of cover on average weekly demand | Whether "demand" means last period's actual, a trailing average or the forward forecast changes the answer, and most suppliers mix all three across different reports without saying so |
| Numeric distribution | Stores stocking the item ÷ stores in the defined universe | Counts a metro flagship and a small country store the same |
| Weighted distribution | Share of category value held by the stores that stock the item | The gap between numeric and weighted is the whole insight: it tells you whether you are ranged in the stores that matter or just in a lot of stores |
| Rate of sale | Units ÷ stores stocking ÷ weeks | Comparing raw units between two SKUs on different distribution is the most common self-inflicted error in a range review deck |
| On-shelf availability | Proportion of store-item-days the item was not on shelf | Not the same as DC availability. You can be at full DIFOT into the distribution centre and still be out of stock on shelf, and that distinction is exactly where supplier and retailer talk past each other |
Why this is hard in a spreadsheet
Not because spreadsheets are bad. Because three specific joins are beyond what a workbook can hold together reliably.
Joining scan data to your own sales. Scan is at the retailer's item and store level, on the retailer's week. Your sales are at your item, customer and invoice level, on your period calendar. Syndicated data is at the provider's product hierarchy and market definition. Reconciling them needs a maintained four-way mapping between your item master, the National Product Catalogue GTIN, each retailer's item code and the provider's product code — plus a calendar that reconciles retail weeks to your accounting periods. In a workbook this is a VLOOKUP against a file that lives somewhere else and is updated by whoever remembered. The join silently drops the new SKUs first, which are the ones everyone is watching.
Rebate accrual timing. The deal is agreed in one month, the volume ships in another, the scan-back is claimed six to ten weeks later, and it arrives as a deduction against an unrelated invoice carrying a claim number that does not match any promotion code you use internally. The commercial spreadsheet tracks planned spend; the ledger tracks actual deductions; nothing links a row in one to a row in the other. That is why the promotion argument has no resolution mechanism and gets settled by seniority. The fix is not cleverer analysis — it is giving every promotion one identifier that survives from the trading agreement into the ERP into the deduction, so the post-analysis assembles itself.
DIFOT reconciliation, where two parties measure differently. The gap between your 98% and the retailer's 91% is enumerable, and each line of it is a different data problem. The retailer measures against the original purchase order; you measure against the confirmed quantity after the order was trimmed to available stock — same delivery, two denominators. You count lines, they count orders. You timestamp despatch, they timestamp receipt into the DC or the booked window, so the time your truck spent queuing belongs to whoever's clock you use. The despatch advice says what was sent, the receipt scan says what was booked in, and pallet-level versus carton-level receipting produces different shortfalls. Then there are non-conformances recorded in the retailer's system that never flow back into yours. Rebuilding that reconciliation means one row per delivery carrying order, confirmation, despatch, advice, receipt and non-conformance together — which is a data model, not a pivot table.
There is a fourth, quieter one. Forecast accuracy cannot be measured at all if no forecast version was kept. If the only forecast in the system is the current one, nobody can answer what was known on the day the production run was committed, and the argument is unwinnable by design.
What a working FMCG dashboard shows
Four pages, each with an owner and a question it settles.
Promotion post-analysis. Every promotion as one row, keyed on a single promotion identifier: planned spend, actual claimed spend, uplift against a stated baseline method, cannibalisation of your own lines, the four weeks after for pantry loading, and incremental margin against investment. Read by the national account manager before the next range or promotional plan goes in, and by finance when the accrual is released. It ends the argument described above by making the two ledgers the same ledger.
Customer and channel margin. The gross-to-net bridge, per customer, per period, with every deduction type named and traceable back to a claim. Then cost to serve — freight, 3PL handling, case pick versus full pallet, rebooking, short-life credits, pallet hire — down to contribution. Read by the commercial lead and by finance. This is the page that changes what gets negotiated.
Service level. DIFOT rebuilt from your own data at the same grain the retailer scorecards it, with the variance broken into its causes rather than shown as a single percentage. Read by supply chain and by whoever fronts the retailer's service review, who needs to arrive with a list of specific deliveries rather than a disagreement.
Forecast accuracy and bias. WMAPE and bias by category, brand and customer, measured against snapshotted forecast versions at the lag decisions are actually made at. Read by demand planning and S&OP. It converts "whose forecast was wrong" into "we are consistently 6% long on this brand at eight weeks", which is an actionable statement rather than an accusation.
A fifth page — distribution, share and rate of sale from syndicated and scan data — earns its place if the business subscribes to the data, and carries most of the load during a category review.
Sales dashboards in Power BI
If you are searching for an FMCG sales dashboard in Power BI, the useful question is not which visuals to use. It is what the model underneath has to reconcile before any visual is honest.
A model that works has scan and shipments as two separate fact tables at their own grain, joined through conformed dimensions rather than flattened into one table. Product resolves through a bridge that maps your item code, the GTIN, the retailer item code and the syndicated product code. Date resolves through a calendar that carries both retail weeks and your accounting periods, so a four-week retail period and a calendar month can sit on the same page without lying to each other. Customer resolves through a hierarchy that survives a banner restructure.
Promotion is its own dimension, keyed on the identifier that also appears on the ERP transaction and on the deduction. Without that, promotional ROI in Power BI is a chart of two unrelated numbers placed near each other.
Beyond that: row-level security so an account team sees its own customers, incremental refresh tied to the weekly scan drop rather than a nightly full reload, measures written once in DAX with the definition documented on the page, and a deliberate decision about whether a card labelled "sales" means shipments or scan — stated on the dashboard, not assumed. Most FMCG dashboards that lose trust lose it there.
How we work
Roar Data is operator-led and Brisbane-based, serving Queensland and suppliers across Australia. The founder spent 20-plus years in operations across manufacturing, pharmaceutical, glass packaging, FMCG, healthcare, aged care, finance and construction before building reporting for a living, which is why this page reads the way it does.
We start with the Reporting Clarity Diagnostic, fixed at A$1,950. It maps what data you actually have, where the definitions conflict, which joins are broken, and what a working reporting set would need to hold — and you own the output whether or not you build anything with us. Builds are quoted after that, never sold from a page, because a supplier on one retailer with a clean ERP and a supplier on four retailers with a 3PL and a syndicated subscription are not the same job.
Delivery is remote for most of it, on site in Brisbane and South East Queensland where that is useful. Every build is handed over with training and documentation: measure definitions written down, refresh schedules explained, and your team able to change things without calling us. We are rated 5.0 on Google.
FMCG & Consumer Goods analytics FAQs
What is FMCG analytics, in practice?
Can reporting connect to our retailer portal data?
We already subscribe to Circana or NielsenIQ. Why do we need anything else?
Why does our DIFOT never match the retailer's?
How do we work out whether a promotion made money?
Do we need to replace our ERP first?
Does the mandatory Food and Grocery Code change what we should report on?
Do you work with suppliers outside Queensland?
Our services
Power BI Consulting
Roar Data helps Australian organisations eliminate spreadsheet reporting, unify fragmented systems and deliver real-time executive, financial and operational dashboards using Microsoft Power BI.
Explore servicePower BI Managed Services
Ensure your dashboards stay accurate, secure and performance-ready with proactive Power BI monitoring, optimisation and continuous improvement.
Explore servicePower BI Training Brisbane
Practical Power BI training for Brisbane teams that need reports to be maintainable, commercially useful, and easier to run day to day.
Explore serviceStart with the reporting, not the tooling
A fixed-price Reporting Clarity Diagnostic is $1,950. You get a written view of what your reporting can and cannot answer today, and what it would take to close the gap. Builds are quoted against a written scope before anything starts.


