The BOM Rap (Part II) — The Vàzsonyi procedure

The BOM Rap recommended restricting the centrally managed part of the Bill Of Materials (BOM) of an assembly plant to the Gozinto (“goes-into”) structure of the items — that is, triplets with an item ID, the ID of an item it goes into, and the quantity used, together with an item list carrying units of measure.

This is the common core to all uses of the BOM, to which engineers, production planners, or accountants can attach additional data for their own purposes.

As discussed in The BOM Rap, BOMs are usually kept in ERP systems that only support their uses in their transaction menus, and production engineers often need to do more.

Project Example

If, for example, your project is to redesign the production line of a subassembly item, you need to manipulate the BOM in several ways:

  1. Extract the BOM for this subassembly from the complete product’s BOM.
  2. Decide how many tiers of the subassembly’s BOM to involve in the line redesign.
  3. Calculate the required quantities of all the multiple tiers of items going into this subassembly.
  4. Flatten the subassembly’s BOM, because the redesign of the line may involve changing its own subassembly structure.
  5. Introduce a new subassembly structure.

You may find that your ERP system is lacking transactions like “Extract Subassembly BOM” or “Flatten BOM.” The best ERP specialists in the company will give you extracts of the current BOM in Excel spreadsheets.

What BOM Software Products Offer

Looking for other software tools to work with BOMs on sites like Software Advice, you find tools to edit BOMs, manage revisions, and report on where items are used. Using the additional data attached to a BOM, this software may also help with equipment selection or allocation, or with costing.

Based on their suppliers’ claims, if you have the answers to questions like 1. to 5. above, these tools will help you integrate this data with the company’s systems but they will not help you find the answers. For this, you are on your own.

Validating a BOM

Let us assume that the ERP team has given you spreadsheets of BOMs, and that you can format them into lists of items and  Gozinto statements, you will need to validate the content before attempting anything else.

If the BOM says you need 10 screws to fasten a lid and you really need 20, you can only detect this kind of error by physically assembling a lid. This is a case of the data not matching reality, which you cannot discover from the data alone. On the other hand, errors like the ones discussed in The BOM Rap are in the internal logic of the data.

Items going into themselves, duplicate Gozinto connections, or loops are identifiable from the data, most by simple queries. Long loops, however, are not so easy to detect. With tens of thousands of entries, you cannot do it by examining a graphic visualization of the BOM. You need software to do it for you. You may use, for example, the simple_cycles() function in the NetworkX 2.4 Python package to detect loops in directed graphs.

Making a BOM Talk

The most straightforward method for an engineer to extract information from a BOM for such purposes as redesigning a line is to use the Vászonyi procedure. It entails converting the BOM into a Gozinto matrix and using matrix multiplications and additions. This requires built-in functions from commonly available software packages like Excel, Matlab, or R.

Who Was Andrew Vàzsonyi?

Andrew Vázsonyi was a mathematician and operations researcher who also made contributions under the names of Endre Weiszfeld and Zepartzat Gozinto. English-language sources credit him primarily with other work. I couldn’t find any reference to the Vászonyi procedure to calculate total requirements on items from the Gozinto matrix in any American book about Production & Operations Management (POM) or Bills of Materials.

It is, however, clever, simple, and more practically useful with today’s IT than it was when Vàzsonyi invented it in 1954. Not only were computers in their infancy then but the “Bill of Materials” concept wouldn’t emerge for another two decades. While not referenced in American literature, the Vászonyi procedure is most likely used to calculate materials requirements in ERP systems. The point here is that an engineer working on designing or improving an assembly shop can use this tool on a laptop to find answers that the ERP system is not designed to provide.

The Vàzsonyi Procedure In The Literature

American macroeconomists apply the same math to tables representing the sales from entire industries to other industries, such as, for example, the amount of agricultural output that is input to manufacturing. For BOMs in manufacturing, I have found several German sources that cover it, including several books and a video tutorial from German university PFH that describes the demand calculations through the Vászonyi procedure.

This video is intended for students who don’t know anything about matrices and have to execute matrix operations by hand, which should not be a large constituency. We are more concerned with readers who learned about matrices in High School or in their first year of College,  use software for calculations, and are interested in the logic of the method.


Converting a small BOM to a Gozinto matrix

For small BOMs, Pivot tables in Excel or Google Sheets, crosstabs in Access or Tableau, or pivot_wider from the R tidyverse package convert a list of Gozinto triplets into a matrix with quantities placed at the intersection of the row for an item and the column for another item it goes into. In most systems, this conversion is one-way. Tidyverse, however, also has a pivot_longer function to convert a matrix to a list of triplets.

First, let’s look first at what we can do with a small BOM. Then we can extend it to more realistic, large ones.

A Toy Example

If we go back to the toy example used in The BOM Rap. In a format improved by using iGraph, the BOM looks like the following Gozinto graph:

Toy BOM Gozintograph

The Gozinto Matrix

The demand vector is comprised of the items that go into the Market if we remove them and cross-tabulate the triplets, we get the following matrix, with 0s omitted for clarity:

Item P1 P2 S1 S2 S3 T1 T2 T3 T4 T5 T6 T7
S1 1
S2 1 3
S3 1
T1 1
T2 3
T3 23 1 5
T4 5
T5 1
T6 1
T7 3


Mining the Gozinto Matrix

The graph, the list of triplets, and the matrix are three different expressions of the same data. While less visually attractive than a Gozinto graph, the Gozinto matrix enables us to detect characteristics of the BOM, even when it contains thousands of items and we cannot see the whole picture:

  1. Items with empty rows, like P1 and P2, don’t go into any other items and are therefore finished goods.
  2. Items have empty columns, likeT1 through T7 have no other items going into them and are therefore purchased.
  3. The diagonal is, and should always be empty. A nonzero entry in the diagonal would represent an item going into itself.
  4. Wherever there is an entry for row i and column j, there isn’t for row j and column i. This means that there are no errors of the type “A goes into B” and “B goes into A.”

Calculating Requirements With The Gozinto Matrix

Let’s call this matrix G. The next step we want to take is multiplying it by a demand vector but the demand we have extracted from the triplets has only three entries, for products P1 and P2 and for subassembly S1 that is sold as a spare part:

Item Quantity
P1 50
P2 40
S1 1


To multiply this vector by G, we need to append a 0-demand for all the items that are not sold on the market, which gives you the demand vector d.

When we take the product G X d, we get the vector d1 of the quantities for the level 1 items needed to meet the demand. Then when we take the product G X d1, we get the vector d2 of the quantities needed for the level 2 items. Finally, G X d2=0 because the BOM is only two levels deep. Then d+d1+d2 gives you the quantities needed for all items, regardless of level, from finished goods to purchased parts. Note that some items, like the subassembly S1 and the screw T3 appear at multiple levels.


Item Demand Level 1 Level 2 Total
P1 50 0 0 50
P2 40 0 0 40
S1 1 50 0 51
S2 0 170 0 170
S3 0 40 0 40
T1 0 1 50 51
T2 0 3 150 153
T3 0 1,160 1,350 2,510
T4 0 0 850 850
T5 0 0 40 40
T6 0 0 40 40
T7 0 0 120 120


The Vazsonyi Procedure — Toy Example

If I is the identity matrix, then:

\mathbf{d+d_{1} +d_{2} = \left (I + G + G^2 \right )\times d}


For matrices as for numbers,

\mathbf{I-G^3 = \left ( I - G \right )\times\left (I + G + G^2 \right )}


Since G^3 = 0 , this says that we have a matrix H that we can just multiply by the original demand vector d to obtain the quantities required at all levels of the BOM:

\mathbf{ H = \left (I + G + G^2 \right )= \left ( I - G \right )^{-1}}


In the toy example, the matrix H, with 0s omitted, is as follows:


Item P1 P2 S1 S2 S3 T1 T2 T3 T4 T5 T6 T7
P1 1
P2 1
S1 1 1
S2 1 3 1
S3 1 1
T1 1 1 1
T2 3 3 1
T3 38 15 1 5 1
T4 5 15 5 1
T5 1 1 1
T6 1 1 1
T7 3 3 1

The Vàzsonyi Procedure — General Formulation

In general, if n is the number of levels in a BOM, then G^{n+1} = 0 and

\mathbf{ H = \left (I + G +...+ G^n \right )= \left ( I - G \right )^{-1}}

This is the Vazsonyi procedure. If all we care about is the total quantities needed of all items, we can just calculate H and multiply d by it. On the other hand, if we are interested in the populations of the different levels, we know that G^{k}\times d will give us the items at level k.

Note in particular that a flat BOM — without subassemblies — is characterized by G^2 = 0 , and therefore

\mathbf{H = I + G}

Names For The Output

Vàzsonyi called the H matrix the Total Requirements Factor Table; A.-W. Scheer, the Total Input Matrix; the macroeconomists, the Leontief Inverse. If a short name is needed, I suggest “TIM,” based on Scheer’s choice.

Answering The Engineer’s Questions

The introduction lists 5 questions that an engineer needs to answer when designing or improving an assembly line. Let us examine how we can answer them, starting from just an item list and a Gozinto table.

If we set up a demand vector with 1 for a subassembly and 0 for all other items, then multiplying it by H will provide the required quantities for items at all levels for this subassembly. This is equivalent to selecting the column of H for this subassembly. Then we get the Gozinto matrix for the subassembly by removing the rows and columns for all items with a required quantity of 0 for the subassembly.

Extracting a subassembly BOM

If we do this for subassembly S1, we take the column H[S1], and omit the 0 items:

Item S1
S1 1
T1 1
T2 3
T3 10

Since S1 has no subassemblies, if we remove the line for S1 itself, we have its BOM and it’s flat. More generally, you obtain the Gozinto matrix for the subassembly by extracting the rows and columns for the Items in H[S1] from the Gozinto matrix G.

Flattening a BOM

As the product P1 has two subassemblies, S1 and S2, we can use it as an example for flattening the BOM. The only challenge is to make sure that, after removing the subassemblies, we get the quantities right for the purchased items. But we know that the matrix H holds the total quantities of each item used per unit of product. As before, we take column H[P1] from H and remove the 0s:

Item P1
P1 1
S1 1
S2 1
T1 1
T2 3
T3 38
T4 5

Flattening The BOM For One Product

To get the flat BOM for P1, we now need to remove the entries for subassemblies. In G, as noted above, we identify finished goods as items with empty rows and purchased items as items with empty columns. The remaining items have neither an empty row nor an empty column. They go into other items and other items go into them, which means that they are subassemblies. These queries against G identify S1 and S2 as subassemblies, and therefore the flat BOM for P1 is

Item P1
P1 1
T1 1
T2 3
T3 38
T4 5

Flattening the BOM For All Products

To flatten the entire BOM G, for all products, we need to remove from the matrix H the rows and columns for subassemblies and subtract the identity matrix I.

P1 P2 T1 T2 T3 T4 T5 T6 T7
T1 1
T2 3
T3 38 15
T4 5 15
T5 1
T6 1
T7 3

The design of a new and better subassembly structure is an assembly process engineering challenge, not just a matter of matrix manipulations. Once you are done with it, however, you flatten it and verify that the new flattened BOM matches the old one.

Four Views of a BOM

We now have four formal ways to represent a BOM that are different ways of organizing, operating on, and visualizing the same data:
1. The Gozinto graph
2. The Gozinto table
3. The Gozinto matrix
4. The Total Input matrix

In principle, converting between these views is possible. In practice, it is best to use the Gozinto table as the master, as it is easiest to generate all the other views from it.

Going Sparse When Scaling up

We can explain the Vàzsonyi procedure with the toy example above but, in this example, it provides no answers that you couldn’t obtain easily from the Gozinto graph. It is useful to the extent you can scale it up to real demands for thousands of products made from tens of thousands of items.

Most items don’t go into most other items, and therefore the majority of the quantities in the Gozinto matrix are zeros. The BOM of an assembly plant with 20,000 different items would be expressed as a Gozinto matrix of 400 million coefficients, most of them zero. Fortunately, there are ways of representing such a sparse matrix with only the nonzero coefficients and yet operate on them as if all the coefficients were present. We’ll explore this in Part III.


  • Duchin, F. & Steenge A.(2007)Mathematical Models in Input-Output Economics, Rensselaer Working Papers in Economics
  • Scheer, A.-W. (1998) Business Process Engineering Study Edition: Reference Models for Industrial Enterprises, pp. 120-121, Springer Verlag, ISBN: 978-3-540-63867-4
  • Vazsonyi, A. & Spirer, H. (1984)Quantitative Analysis for Business, Prentice Hall, ISBN: 978-0137465781
  • Kloock, J. (1969) Betriebswirtschaftliche Input-Output-Modelle, Gabler, ISBN: 978-3-663-03117-8
  • Vàzsonyi, A. (1962) Die Planungsrechnung in Wirtschaft und Industrie, ASIN: B002A1QL0U
  • Vàzsonyi, A. (1954)The Use of Mathematics in Production and Inventory Control. Management Science 1(1):70-85.