Inventory Optimization Calculations

Inventory Optimization uses demand, supply, segmentation, and service-level data to calculate item-location planning values. This topic explains the inputs and formulas used in those calculations.

For segmentation metrics and category calculations, see Inventory Segmentation Calculation Process.

This topic covers the following:

Calculation Inputs

The calculation uses average daily demand and daily demand standard deviation from demand history.

For nonseasonal items, demand uses the Order Analysis Interval. For seasonal items, demand uses the corresponding prior-year period defined by the Seasonal Analysis Interval. Estimated Demand Change scales both Average Daily Demand and Daily Demand Standard Deviation.

Supply Analysis Interval doesn't affect demand inputs.

The calculation uses average lead time and lead-time standard deviation from inbound supply history.

Demand inputs use the following Inventory Management preferences:

  • Order Analysis Interval

  • Seasonal Analysis Interval

  • Estimated Demand Change

  • Transactions to Consider

The transaction types included depend on Transactions to Consider preference:

  • Orders includes sales orders, standalone invoices and cash sales, outbound transfer orders, and work-order component demand. Special-order and closed sales orders are included. Pending Approval, Cancelled, and drop-ship sales orders are excluded.

  • Actual Sales includes transformed and standalone invoices and cash sales, transfer-order fulfillments, assembly-build components, work-order issues, and work-order completion components.

For sales orders and outbound transfer orders, NetSuite uses Supply Required By Date. If it's blank, NetSuite uses Expected Ship Date, then Date if Expected Ship Date is also blank.

For work orders, NetSuite uses Supply Required By Date. If it's blank, NetSuite uses Production Start Date, then Date if Production Start Date is also blank.

All other qualifying demand transactions use Date.

Pending Approval, Rejected, or Void invoices are excluded. Void cash sales and cash sales on payment hold are excluded.

For Orders, Pending Approval, Rejected, or Void transfer orders are excluded. Pending Approval, Cancelled, or Void work orders are also excluded.

For Actual Sales, Picked, Packed, or Shipped transfer-order fulfillments are included regardless of the transfer-order status.

Lead-time inputs use inbound supply history over the Supply Analysis Interval. The start date is included in the supply analysis period. Inbound supply history includes the following:

  • Purchase orders in Pending Billing, Billed, or Closed status

  • Received transfer orders

  • Built or closed assembly work orders

Purchase-order and transfer-order lead time ends at full receipt. Work-order lead time ends on Actual Production End Date. NetSuite requires at least three qualifying lead-time values and excludes negative lead times.

Demand and lead-time inputs are calculated by item-location.

Note:

When no demand history exists, NetSuite sets Average Daily Demand and Demand Standard Deviation to zero. Planning values are zero, and NetSuite logs a warning.

NetSuite uses the following inputs to calculate planning values:

Input

Description

Average Daily Demand

Average item demand for the item-location.

Average Daily Demand = Sum of Qualifying Daily Demand / Number of Calendar Days in the Analysis Period

The analysis period includes both the start date and end date. The number of calendar days varies by month.

For a one-month Order Analysis Interval, June 7 through July 7 includes 31 days. May 7 through June 7 includes 32 days.

Daily Demand Standard Deviation

Variation in daily demand for the item-location.

Daily Demand Standard Deviation = sqrt(Sum((Daily Demand − Average Daily Demand)^2) / Number of Calendar Days in the Analysis Period).

Days without demand are included with a value of zero.

Average Lead Time

Average lead time from inbound supply history for the item-location.

Average Lead Time = Sum of Qualifying Lead-Time Values / Number of Qualifying Lead-Time Values

Lead-Time Standard Deviation

Variation in lead time for the item-location.

Lead-Time Standard Deviation = sqrt(Sum((Lead Time − Average Lead Time)^2) / Number of Qualifying Lead-Time Values)

Lead-Time Demand Standard Deviation

Variation of the lead-time period demand, considering the combined effect of Daily Demand Standard Deviation and Lead-Time Standard Deviation for the item-location.

Lead-Time Demand Standard Deviation = sqrt(Average Lead Time * Daily Demand Standard Deviation^2 + Average Daily Demand^2 * Lead-Time Standard Deviation^2)

z-score

Standard-normal value derived from the service level and used in the safety stock calculation.

Preferred Stock Level Days

Item record value used in the preferred stock level calculation.

This value applies to all locations for the item.

Service Level

The service level comes from the item record or Item Location Configuration record, depending on the Calculate Inventory Segmentation per Location preference. Segmentation assigns the segment's service level unless an override is set.

NetSuite converts the service level to a z-score for safety stock calculation. For example:

Service Level

Approximate z-score

50%

0.00

90%

1.28

95%

1.65

98%

2.05

99%

2.33

99.99%

3.72

Higher service levels generally produce higher safety stock.

Safety Stock Level

Lead-time period demand standard deviation uses this formula:

Lead-Time Period Demand Standard Deviation = sqrt((Average Lead Time * Daily Demand Standard Deviation^2) + (Average Daily Demand^2 * Lead-Time Standard Deviation^2))

Safety stock uses this formula:

Safety Stock Level = Lead-Time Period Demand Standard Deviation * z-score

NetSuite rounds the calculated Safety Stock Level up to the next whole number. Reorder Point and Preferred Stock Level use the rounded Safety Stock Level.

Note:

This calculation assumes demand during lead time follows a normal distribution. Results can be approximate when demand is intermittent, promotional, strongly seasonal, or skewed.

Reorder Point

Reorder point uses this formula:

Reorder Point = Safety Stock Level + (Average Lead Time * Average Daily Demand)

NetSuite rounds the calculated Reorder Point up to the next whole number.

Preferred Stock Level

Preferred stock level uses this formula:

Preferred Stock Level = Safety Stock Level + (Preferred Stock Level Days * Average Daily Demand)

NetSuite rounds the calculated Preferred Stock Level up to the next whole number. The Preferred Stock Level Days value comes from the item record.

Note:

Set Preferred Stock Level Days greater than Average Lead Time. A value at or below Average Lead Time can make Preferred Stock Level less than or equal to Reorder Point.

NetSuite logs a warning when Preferred Stock Level is less than or equal to Reorder Point.

Projected Results

Inventory Optimization stores projected results for each item-location and calculation run, based on the inputs stored for that run.

Projected results don't describe actual transaction results. The following table describes each stored projected result.

The Inventory Optimization Results Dataset stores Safety Stock Level as Safety Stock.

Field

Description and Calculation

Low Risk Average Inventory Level

Estimates average inventory when Safety Stock isn't consumed.

Low Risk Average Inventory Level = 0.5 × (Safety Stock + Daily Demand Mean × Days Supply Preferred)

High Risk Average Inventory Level

Estimates average inventory when Safety Stock is fully consumed.

High Risk Average Inventory Level = 0.5 × Daily Demand Mean × Days Supply Preferred

Unit Cost

Stores the current item-location Average Cost per base unit, in the subsidiary currency.

Expected Units Short

Estimates shortage quantity per replenishment cycle. The calculation uses the final rounded Reorder Point.

Expected Units Short = Lead Time Demand Standard Deviation × [phi(z) - z × (1 - Phi(z))]

z = (Reorder Point - Lead Time Demand Mean) ÷ Lead Time Demand Standard Deviation

Phi is the standard normal cumulative distribution function. phi is the standard normal probability density function.

Expected Quantity Fill Rate

Estimates the percentage of units filled during a replenishment cycle under the calculated policy. This value differs from Service Level.

Expected Order Quantity = Days Supply Preferred × Daily Demand Mean − Reorder Point + Safety Stock

Expected Quantity Fill Rate = 100 × (1 − Expected Units Short / Expected Order Quantity)

Expected Average Inventory Value

Estimates the monetary value of projected average inventory using Unit Cost from the same calculation run. The average inventory level is an intermediate calculation and isn't stored as a dataset field.

Expected Average Inventory Value = 0.5 × (Low Risk Average Inventory Level + High Risk Average Inventory Level) × Unit Cost

Expected Units Short Value

Estimates the monetary value of the projected shortage quantity.

Expected Units Short Value = Expected Units Short × Unit Cost

Expected Inventory Turnover

Estimates projected turnover from planning results stored for the same calculation run.

Expected Inventory Turnover = Lead Time Demand Mean × Unit Cost / Expected Average Inventory Value

Service Level Diagnostics

Service level diagnostics compare previous and optimized Safety Stock using the current run's Lead Time Demand Standard Deviation. The result's Service Level is the target.

Service level diagnostics describe mathematical planning projections and don't represent Expected Quantity Fill Rate or achieved customer service.

The following table describes the stored and derived diagnostic fields. In these formulas, normalCDF is the standard normal cumulative distribution function.

Field

Type

Description and Calculation

Demand Source

Stored

Identifies ORDERS or ACTUALS as the run's demand source. This field can't be blank. Legacy results whose Demand Source was blank are populated with ORDERS during migration.

Previous Safety Stock

Stored

Copies Safety Stock from the latest prior result for the same item-location. The selected prior result can be inactive.

Previous Projected Service Level

Stored

Projects Service Level for Previous Safety Stock using the current run's variability.

Previous Projected Service Level = normalCDF(Previous Safety Stock ÷ Lead Time Demand Standard Deviation)

Optimized Projected Service Level

Stored

Projects Service Level for optimized Safety Stock using the current run's variability.

Optimized Projected Service Level = normalCDF(Safety Stock Level ÷ Lead Time Demand Standard Deviation)

Projected Service Level Delta

Derived

Projected Service Level Delta = Optimized Projected Service Level - Previous Projected Service Level

Distance From Target Before

Derived

Distance From Target Before = abs(Service Level - Previous Projected Service Level)

Distance From Target After

Derived

Distance From Target After = abs(Service Level - Optimized Projected Service Level)

Zero and Missing Input Values

Numeric zero is valid and isn't treated as missing. The following table describes how zero, missing, or insufficient inputs affect calculations.

Condition

Result

Demand or lead-time standard deviation is zero

NetSuite uses zero as a valid input.

When Lead Time Demand Standard Deviation is zero, NetSuite uses this calculation:

Expected Units Short = max(Lead Time Demand Mean - Reorder Point, 0)

Each applicable projected Service Level is 100%.

Average lead time is zero

NetSuite continues the planning calculations and logs a warning.

Average daily demand is zero

Safety Stock Level, Reorder Point, and Preferred Stock Level are zero. NetSuite logs a warning.

Expected Units Short and both average inventory levels are zero. Expected Quantity Fill Rate is blank.

Expected order quantity is zero or negative

Expected Quantity Fill Rate is blank.

Expected Units Short exceeds Expected Order Quantity

Expected Quantity Fill Rate is blank.

Fewer than three qualifying lead-time values exist

Average Lead Time and Lead-Time Standard Deviation aren't calculated.

NetSuite doesn't calculate Safety Stock Level, Reorder Point, or Preferred Stock Level and logs a warning.

Service level is missing

Processing fails for the item-location.

Preferred Stock Level Days is zero

Preferred Stock Level equals Safety Stock Level.

Preferred Stock Level Days is missing

NetSuite calculates Safety Stock Level and Reorder Point. NetSuite doesn't calculate Preferred Stock Level and logs a warning. The following are blank:

  • Low Risk Average Inventory Level

  • High Risk Average Inventory Level

  • Expected Average Inventory Value

  • Expected Inventory Turnover

  • Expected Quantity Fill Rate

Average Cost is missing

Unit Cost, Expected Average Inventory Value, Expected Units Short Value, and Expected Inventory Turnover are blank.

Expected Average Inventory Value is zero or negative

Expected Inventory Turnover is blank.

No prior result exists

Previous Safety Stock, Previous Projected Service Level, Projected Service Level Delta, and Distance From Target Before are blank.

Optimized Projected Service Level and Distance From Target After can still calculate when their inputs are available.

No item-location has complete demand and lead-time statistics after Inventory Optimization Initialization.

NetSuite doesn't start the Inventory Optimization Calculation process.

Related Topics

General Notices