As described previously, the records (or observations) in the Indented BOM data set are organized in depth-first order (Aho, Hopcroft, and Ullman 1983). The order of observations in the Indented BOM data set and the presence of the _Level_
variable make it possible to perform bill of material explosion and implosion easily. In fact, the Indented BOM data set contains the quantity per product, total lead time, and total lead-time offset data already. The Summarized Parts data set lists the gross and net requirements for each item to fill a given production plan. Other calculations can be performed
using a simple SAS DATA step. For example, the following SAS code creates a single-level bill of material for the item 'LA01
' from the Indented BOM data set, IndBOM0
, as displayed in Figure 3.3. The single-level bill of material is shown in Figure 3.6.
/* Display the components that are directly used */ /* in item LA01 */ proc print data=IndBOM0(where=(_Parent_='LA01') rename=(_Part_=Component)) noobs; var Component Desc QtyPer Unit; title 'ABC Lamp Company'; title3 'Single-level Bill of Material Retrieval, Part LA01'; run;
Figure 3.6: Components Directly Used in Part LA01
ABC Lamp Company |
Single-level Bill of Material Retrieval, Part LA01 |
Component | Desc | QtyPer | Unit |
---|---|---|---|
B100 | Base assembly | 1 | Each |
S100 | Black shade | 1 | Each |
A100 | Socket assembly | 1 | Each |
The single-level where-used list for item '1400
', displayed in Figure 3.7, is created with the following SAS code. PROC SQL is invoked to link the part master data to each parent item.
/* Create the where-used data set */ data Used0a(keep=_Parent_ Paren_ID QtyPer Unit); set IndBOM0(where=(_Part_='1400')); run; /* Get the part description from the IndBOM0 data set */ proc sql; create table Used0b as select Used0a._Parent_, IndBOM0.Desc, Used0a.QtyPer, Used0a.Unit from Used0a left join IndBOM0 on Used0a.Paren_ID=IndBOM0.Part_ID; quit; /* Display the where-used data set */ proc print data=Used0b noobs; var _Parent_ Desc QtyPer Unit; title 'ABC Lamp Company'; title3 'Single-level Where-used Report, Part 1400'; run;
Figure 3.7: Parents in Which Part 1400 is Directly Used
ABC Lamp Company |
Single-level Where-used Report, Part 1400 |
_Parent_ | Desc | QtyPer | Unit |
---|---|---|---|
B100 | Base assembly | 4 | Each |
1500 | Steel holder | 2 | Each |
The section Reporting Macros in Chapter 4: Bill of Material Postprocessing Macros, describes six SAS autocall macros that can be used to create single-level, indented, and summarized bill of material and where-used lists for an item from the Indented BOM data set. Example 3.8 demonstrates a simple way to roll up costs using SAS DATA step code. Similar techniques can be used to aggregate lower level requirements up to the end items or to perform other bill of material explosion and implosion. See Example 3.9 and Example 3.10 for further examples.