Blog · Territory, capacity and quota planning · Supply chain
Combine SKU usage value with monthly demand variation to build an ABC-XYZ review matrix. Follow a worked inventory example with explicit periods, zero-demand treatment, formulas, and checks.
ABC XYZ analysis combines the value of inventory usage with the variability of demand, so buyers can review SKUs on both dimensions. An AX item has a different planning problem from an AZ item even when both account for a large share of usage value. Build the two classifications separately, check them, and then combine their labels.
Start with a monthly inventory or demand export containing SKU, month, units demanded, and unit cost. Use the same calendar months for every active SKU. Keep location as another field if replenishment decisions are made separately by warehouse.
This example uses January through June 2026 for a fictional US distributor. Demand means requested units, including recorded unmet requests. If your file contains only shipments, label it shipment variability: a stockout can suppress shipped units even when customers still want the item.
Use a documented period cost for ABC. Here cost stays constant within each SKU. If costs change monthly, calculate each month's units multiplied by that month's cost and sum those values instead. The method measures usage value, not the value of inventory currently on the shelf.
The existing ABC analysis guide explains cumulative value ranking. For inventory, apply that ranking to SKU usage at cost; it is distinct from activity-based costing, despite the shared initials.
The following rows contain every month in the chosen window, including confirmed zero-demand months. All quantities use the same unit within each SKU.
| SKU | Jan units | Feb units | Mar units | Apr units | May units | Jun units | Unit cost (USD) |
|---|---|---|---|---|---|---|---|
| Pump seal | 100 | 100 | 100 | 100 | 100 | 100 | 50 |
| Drive kit | 0 | 0 | 150 | 0 | 0 | 150 | 80 |
| Filter | 20 | 30 | 20 | 30 | 20 | 30 | 60 |
| Repair clip | 0 | 0 | 0 | 0 | 60 | 0 | 20 |
Use A for SKU, B:G for the months, and H for cost. Add total demand in I, usage value in J, mean monthly demand in K, population standard deviation in L, and coefficient of variation in M:
I2 = SUM(B2:G2)
J2 = I2*H2
K2 = AVERAGE(B2:G2)
L2 = STDEV.P(B2:G2)
M2 = IF(K2=0,"Review",L2/K2)
Fill through row 5. This is a description of the complete six-month window, so the example uses population standard deviation. Microsoft documents STDEV.P for an entire population and explains its treatment of text and logical values. Do not place explanatory text inside the monthly numeric range and expect it to act as a zero.
NIST defines the coefficient of variation as standard deviation divided by mean and warns that it becomes sensitive when the mean is near zero. Here the same ratio is applied using the stated population standard deviation. Keep that convention consistent across periods.
For this review, define X as CV at or below 0.25, Y as above 0.25 through 1.00, and Z as above 1.00. These are explicit working boundaries, not universal inventory standards. A different time bucket or seasonal pattern can produce a different classification.
Sort complete rows by J descending. For ABC, assign A while prior cumulative usage share is below 80%, B while it is below 95%, and C afterward. The item that crosses a boundary remains in the earlier class.
| SKU | Total units | Usage value (USD) | Mean units | Standard deviation | CV | Cumulative value share | ABC | XYZ |
|---|---|---|---|---|---|---|---|---|
| Pump seal | 600 | 30,000 | 100 | 0.00 | 0.0000 | 46.73% | A | X |
| Drive kit | 300 | 24,000 | 50 | 70.71 | 1.4142 | 84.11% | A | Z |
| Filter | 150 | 9,000 | 25 | 5.00 | 0.2000 | 98.13% | B | X |
| Repair clip | 60 | 1,200 | 10 | 22.36 | 2.2361 | 100.00% | C | Z |
| Total | 1,110 | 64,200 |
The displayed standard deviations have two decimals, CVs four, and shares two. Classify using the underlying unrounded values. For Drive kit, squared deviations from its mean total 30,000; dividing by six gives 5,000, whose square root is 70.7107. Dividing that by 50 gives a CV of 1.4142.
Add N for cumulative share, O for prior share, P for ABC, Q for XYZ, and R for the combined label:
N2 = SUM($J$2:J2)/SUM($J$2:$J$5)
O2 = N2-J2/SUM($J$2:$J$5)
P2 = IF(O2<80%,"A",IF(O2<95%,"B","C"))
Q2 = IF(K2=0,"Review",IF(M2<=0.25,"X",IF(M2<=1,"Y","Z")))
R2 = P2&Q2
Fill down after sorting. The crossing rule puts Drive kit in A even though its addition takes cumulative value to 84.11%. Filter then takes B to 98.13%.
Use usage value as the matrix measure. For example, with ABC labels down column T and XYZ labels across row 1, enter the following in U2 and copy across and down:
=SUMIFS($J$2:$J$5,$P$2:$P$5,$T2,$Q$2:$Q$5,U$1)
| ABC tier | X usage value (USD) | Y usage value (USD) | Z usage value (USD) | Total (USD) |
|---|---|---|---|---|
| A | 30,000 | 0 | 24,000 | 54,000 |
| B | 9,000 | 0 | 0 | 9,000 |
| C | 0 | 0 | 1,200 | 1,200 |
| Total | 39,000 | 0 | 25,200 | 64,200 |
The matrix total must equal the SKU table's $64,200. Reconcile the monthly usage values to the source export and check that every eligible SKU has exactly one combined label. A missing month should stop classification until it is explained.
The inventory planner owns demand definitions and reviews AZ exceptions with purchasing and sales. Pump seal's AX label supports a discussion of routine replenishment. Drive kit's AZ label calls for checking whether its demand is project-based, scheduled, or distorted by missing requests. Neither label supplies a reorder quantity.
Use inventory analysis for the broader review and ABC inventory cycle counting for how value classes can inform count priorities. Neither should silently turn a variability label into a service-level promise.
Covirage is not affiliated with Microsoft.
Bring a sample of your own monthly SKU file with demand, cost, and the classification policy. Covirage maps the columns, and its tools compute and check the supplied period comparisons; the external AI model explains the results with every figure traced to its rows. Create a free Covirage account, which takes about a minute, then set up your business and bring your file.
See Covirage for supply chain teams for the supporting workflow.
ABC identifies which SKUs account for the largest share of the selected value measure, such as consumption at cost. XYZ identifies how much demand varies relative to its average. Combining them distinguishes a valuable item with steady demand from one with irregular demand.
Set thresholds for your assortment, time bucket, and review purpose, then hold them constant for comparisons. A weekly demand series can classify differently from a monthly series. Treat published cutoffs as examples rather than universal operating standards for every business.
Include a confirmed zero when the item was active and no demand occurred. Keep missing records, prelaunch months, and unavailable stock separate because they do not establish zero demand. If average demand is zero, leave the coefficient of variation undefined and flag the SKU for review.