Blog · Board and management reporting · Supply chain
Classify fast-, slow- and nonmoving inventory from a stock snapshot and daily issue records. Set explicit thresholds, calculate movement frequency by SKU and site, and reconcile the class values to inventory.
FSN analysis in Excel classifies stock by observed movement, using thresholds you define before inspecting the result. Count movement for each SKU and site, apply the same observation window, and reconcile the resulting stock values to a dated inventory snapshot. Keep movement frequency separate from receipt age.
This US distributor reviews inventory at September 30, 2026. The observation window runs from July 1 through September 30, or 92 calendar days. Its illustrative policy is fast for at least two qualifying issue days, slow for one, and nonmoving for none. These are workbook demonstration thresholds, not recommended industry standards.
A qualifying day has positive issues to customers or production. Exclude transfers, cycle-count adjustments and receipts. Keep returns identifiable rather than allowing a return to erase evidence of a shipment. State whether the business needs a gross-issue or net-demand measure; the example uses gross issue activity.
Use a stock snapshot with site, SKU, on-hand quantity and approved unit cost. Add issue transactions with site, SKU, posting date, movement type, quantity and a unique document-line identifier. Verify the export covers the whole window. Missing transaction coverage is an exception, not evidence of no movement.
Frequency and value answer different questions. Inventory turnover relates cost of sales to inventory investment; do not substitute that ratio for this movement classification.
Make a working sheet containing only approved movement types and positive issue quantities. Put Site, SKU, PostingDate and IssueQty in A:D, starting in row 2. Add IssueDay in E, FirstDay in F and DailyQty in G:
=INT(C2)
=COUNTIFS($A$2:A2,A2,$B$2:B2,B2,$E$2:E2,E2)=1
=SUMIFS($D$2:$D$9999,$A$2:$A$9999,A2,$B$2:$B$9999,B2,$E$2:$E$9999,E2)
Fill down through the working rows; extend all fixed ranges together for larger files. FirstDay is TRUE only on the first occurrence of each SKU-site-date combination. Copy only those TRUE rows' Site, SKU, IssueDay and DailyQty as values into a table named DailyIssues; name its quantity column IssueQty. Each combination now occurs once, even when several lines shipped that day. SUMIFS and COUNTIFS are documented below.
The complete daily issue input for this example is:
| Site | SKU | IssueDay | IssueQty |
|---|---|---|---|
| North | A | July 6, 2026 | 10 |
| North | A | August 3, 2026 | 15 |
| North | A | September 1, 2026 | 5 |
| North | B | August 5, 2026 | 8 |
| South | A | July 8, 2026 | 12 |
| South | A | September 9, 2026 | 6 |
| Total | 56 |
The total is 56 issued units. Preserve a check between the daily total and the filtered transaction total. Counting the original transaction lines would measure transaction frequency and could change classifications when a shipment has multiple lines.
Create a table named Stock from the snapshot, one row per Site and SKU. Put the observation start in P1 as =DATE(2026,7,1), the exclusive end in P2 as =DATE(2026,10,1), and the fast threshold in P3 as numeric 2. Add IssueDays, FSN and StockValue columns:
=COUNTIFS(DailyIssues[Site],[@Site],DailyIssues[SKU],[@SKU],DailyIssues[IssueDay],">="&$P$1,DailyIssues[IssueDay],"<"&$P$2,DailyIssues[IssueQty],">0")
=IF([@IssueDays]>=$P$3,"F",IF([@IssueDays]>0,"S","N"))
=[@OnHand]*[@UnitCost]
Microsoft documents COUNTIFS as counting records that meet multiple criteria. Here the prior daily aggregation makes the count an issue-day count. The same SKU at different sites remains separate.
| Site | SKU | OnHand | UnitCost (USD) | IssueDays | FSN | StockValue (USD) |
|---|---|---|---|---|---|---|
| North | A | 100 | 10 | 3 | F | 1,000 |
| North | B | 80 | 5 | 1 | S | 400 |
| North | C | 50 | 8 | 0 | N | 400 |
| South | A | 60 | 10 | 2 | F | 600 |
| South | D | 40 | 20 | 0 | N | 800 |
| Total | 6 | 3,200 |
North A's three days and South A's two days both meet the fast threshold. The six issue days across SKU-site combinations tie to the six daily input rows. Do not interpret six as six distinct company-wide calendar days unless that is separately checked.
Build a Summary table with Site, FSN and Value. For each site-class combination use:
=SUMIFS(Stock[StockValue],Stock[Site],[@Site],Stock[FSN],[@FSN])
Microsoft documents SUMIFS as adding values meeting multiple criteria. Covirage is not affiliated with Microsoft.
| Site | Fast value (USD) | Slow value (USD) | Nonmoving value (USD) | Total value (USD) |
|---|---|---|---|---|
| North | 1,000 | 400 | 400 | 1,800 |
| South | 600 | 0 | 800 | 1,400 |
| Total | 1,600 | 400 | 1,200 | 3,200 |
Fast stock is 1,600 / 3,200 = 50.0% of value; slow stock is 12.5%; nonmoving stock is 37.5%. Percentages are rounded to one decimal place. The classes sum to $3,200, matching the snapshot, and both site totals reconcile independently.
North C was first received September 29. It remains N under the stated observed-movement rule but needs a new-item exception flag before review. South D requires its own demand and availability review. Neither status establishes obsolescence. Pair this result with inventory aging by site, which answers how long inventory has been held. For changes between snapshots, use a checked waterfall bridge.
Bring the inventory snapshot and issue file with the stated window and movement policy; Covirage maps the columns, and its tools compute and check stock-value and movement comparisons. The external AI model explains the results with every figure traced to its rows. Create a free Covirage account and bring a sample of your own data.
See Covirage for supply chain teams for the operating context.
Choose thresholds that fit the replenishment cycle and demand pattern, then keep them consistent across comparable periods. State the observation window and whether movement means issue days, transactions or units. An illustrative policy is useful for testing a workbook, but it is not an industry benchmark.
No. A nonmoving classification means no qualifying movement was observed within the selected window. New items, seasonal inventory, critical spares and blocked stock need different explanations. Check introduction dates, future requirements and restrictions before recommending a reserve, return or disposal.
FSN measures movement activity during a period. Inventory aging measures how long stock has been held under a stated receipt-layer or other aging convention. An old receipt can move frequently, and a recent receipt can have no issues. Use both views when prioritizing stock reviews.