Sign in

Blog · Territory, capacity and quota planning · Supply chain

ABC-XYZ analysis: combine inventory value and demand variation

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.

The short answerABC-XYZ analysis combines two SKU classifications: ABC ranks inventory usage value, while XYZ groups demand variability over a stated period. Calculate each SKU's usage value and coefficient of variation, apply documented thresholds, and combine the labels. The resulting matrix helps prioritize inventory reviews, but it does not determine safety stock or reorder quantities by itself.

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.

Define the period and the rows first

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.

Build a complete monthly demand table

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.

Calculate both classifications

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%.

Read the matrix and reconcile it

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.

Where it goes wrong

  • Missing months become zeros. A confirmed absence of demand and a missing record have different meanings.
  • New products share an old-product window. Prelaunch months lower the mean and inflate apparent variability. Use an eligibility rule.
  • Shipment gaps are called demand gaps. Review unavailable stock before interpreting zeros as customer behavior.
  • Seasonality is called randomness. A predictable seasonal peak can create a high CV. Inspect the monthly rows before changing purchasing policy.
  • Totals reconcile but units do not. Cases and eaches must be normalized within a SKU before measuring its variation.

Covirage is not affiliated with Microsoft.

Compare your SKU periods in Covirage

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.

Questions people ask

What is the difference between ABC and XYZ inventory analysis?

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.

What coefficient of variation thresholds should define XYZ classes?

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.

Should zero-demand months be included?

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.