Skip to content

Manufacturing processes for any product is like putting together a puzzle. Products are pieced together step by step and it's important to keep a close eye on the process.

For this project, you're supporting a team that wants to improve the way they're monitoring and controlling a manufacturing process. The goal is to implement a more methodical approach known as statistical process control (SPC). SPC is an established strategy that uses data to determine whether the process is working well. Processes are only adjusted if measurements fall outside of an acceptable range.

This acceptable range is defined by an upper control limit (UCL) and a lower control limit (LCL), the formulas for which are:

Using SQL window functions, you'll analyze historical manufacturing data to define this acceptable range and identify any points in the process that fall outside of the range and therefore require adjustments. This will ensure a smooth running manufacturing process consistently making high-quality products.

The data

The data is available in the manufacturing_parts table which has the following fields:

  • item_no: the item number
  • length: the length of the item made
  • width: the width of the item made
  • height: the height of the item made
  • operator: the operating machine
Spinner
DataFrameas
alerts
variable
WITH ManufacturingStats AS (
  SELECT
    operator,
    height,
    AVG(height) OVER w AS avg_height,
    STDDEV(height) OVER w AS stddev_height,
    AVG(height) OVER w + 3 * STDDEV(height) OVER w / SQRT(5) AS ucl,
    AVG(height) OVER w - 3 * STDDEV(height) OVER w / SQRT(5) AS lcl,
    ROW_NUMBER() OVER (PARTITION BY operator ORDER BY operator,item_no) AS row_number
  FROM
    manufacturing_parts
  WINDOW
    w AS (PARTITION BY operator ORDER BY operator,item_no ROWS BETWEEN 4 PRECEDING AND CURRENT ROW)
)

SELECT
  operator,
  row_number,
  height,
  avg_height,
  stddev_height,
  ucl,
  lcl,
  CASE WHEN height NOT BETWEEN lcl AND ucl THEN TRUE ELSE FALSE END AS alert
FROM
  ManufacturingStats
WHERE
  row_number >= 5 -- Ensure at least 5 rows in the window
ORDER BY
  operator,row_number;