The Indented BOM data set produced by PROC BOM contains the indented bill of material for all final products in the Part Master
data set, or for all end items specified in the ENDITEM=
option. Each observation of this data set represents one indented BOM record. Information contained in each indented BOM record can be classified into three categories: part master data for the item
identified by the _Part_
variable, product structure data for the relationship of the component identified by the _Part_
variable to its parent identified by the _Parent_
variable, and data that are dedicated to this record.
As discussed in the section Getting Started: BOM Procedure, each indented bill of material can be illustrated by a family tree. Each node in the family tree corresponds to a record in the Indented BOM data set. The indented BOM record that is associated with the root node of a family tree is distinguished as the root record of the indented bill of material. For a given indented BOM record and its corresponding node j, the parent record of record j is the indented BOM record that is associated with the parent node of node j. If the indented BOM record i is the parent record of record j, then record j is a child record of record i. Every record in the Indented BOM data set has a parent record except for the root records. Alternatively, an indented BOM record can have zero, one, two, or more child records.
Like the product structure record in the Product Structure
data set, each indented BOM record in the Indented BOM data set contains a relationship of one component to its immediate
parent item. The _Part_
variable contains the part number or identification information of the component. The _Parent_
variable contains the part number for the immediate parent item. Each record also contains all other product structure data
from the product structure record with the same parent item (identified by the Parent
variable) and component (identified by the Component
variable) as in this record. The BOM procedure uses the following convention for naming the variable identifying the product
structure data.
If you specify exactly one Quantity
variable, the procedure uses the same variable name as specified in the QUANTITY=
option for the variable that contains the value of the quantity per assembly for the relationship. On the other hand, if you do not specify the QUANTITY=
option, or if you specify more than one Quantity
variable, the variable Qty_Per
contains this value. If you do not specify the QUANTITY=
option, the value of the quantity per assembly is 1 for all relationships. The procedure also uses the same variable name
as specified in the FACTOR=
option if only one Factor
variable is specified, and uses the default name, S_Factor
, if two or more Factor
variables are specified, for the variable that contains the value of scrap factor. Similarly, if you specify more than one
Offset
variable, the default name, L_Offset
, is used; if you specify only one Offset
variable, the same variable name is used for the variable that contains the value of the lead-time offset. Note that if you
do not specify the FACTOR=
or OFFSET=
options, the Indented BOM data set does not have variables that contain the values of scrap factor or lead-time offset, respectively.
The Indented BOM data set has the same RID
variables as in the Product Structure
data set. The values of those variables for each record are copied from the product structure record with the same parent
item and component. The values of the _Parent_
, Factor
, Offset
, Quantity
, and RID
variables for any root records should be missing, if these variables are present.
Each record of the Indented BOM data set also contains part master data for the item identified by the _Part_
variable in this indented BOM record. For instance, the lead time information is contained in the variable with the same
variable name as specified in the LEADTIME=
option. The Indented BOM data set also has the same ID
variables as specified in the ID=
option. The values of these variables for the indented BOM record are copied from the corresponding variables in the part
master record for the same item (identified by the _Part_
variable) in the Part Master data set.
In addition to the product structure and part master data, each record of the Indented BOM data set contains other data calculated
by PROC BOM. The _Prod_
variable contains the part number for the final product or end item of the indented bill of material corresponding to this
record. For any root records, the value of the _Prod_
variable is the same as the value of the _Part_
variable. The _Level_
variable contains the indenture level number of the record. The procedure assigns the value of the indenture level to each record as
follows: Each root record has indenture level 0, and all child records corresponding to a root record have level 1. All subsequent
child records of these records have the level number increased by 1. This process continues until there are no further child
records. The Part_ID
variable contains the sequence or ID number that uniquely identifies each record in this data set. PROC BOM assigns this sequence number to each record in the data set by using the depth-first numbering scheme (Aho, Hopcroft, and Ullman 1983). The Paren_ID
variable contains the ID number for the immediate parent record. The value of the Paren_ID
variable for a root record is missing. These two variables are useful when you use the Indented BOM data set as the input
data set for other SAS/OR procedures, such as PROC NETDRAW and PROC CPM, which require unique identification of each node.
Refer to "The NETDRAW Procedure" and "The CPM Procedure" chapters in the SAS/OR User’s Guide: Project Management for details.
The Qty_Prod
variable denotes the quantity of the item (identified by the _Part_
variable) required to make one unit of the end item identified by the _Prod_
variable. This value is also known as quantity per product and can be determined as
where
If the LEADTIME=
option is specified, PROC BOM measures the total lead time accumulated from the root record to the current record and stores
it in the Tot_Lead
variable. The formula to determine the total lead time for each record is
where
Similarly, if the OFFSET=
option is specified, the procedure computes the total offset from the root record to the current record and stores it in
the Tot_Off
variable. The total offset for each record can be determined as
where
Note that the lead-time offset and the total offset may be expressed in a unit that is different from the lead time and the total lead time in this data set.
Table 3.4 lists all the variables in the Indented BOM data set. It also lists the type and a brief description of these variables.
Table 3.4: Indented BOM Data Set and Associated Variables
Product Structure Data (for the parent-component relationship) |
||
Variable |
Type |
Interpretation |
|
Numeric |
Scrap factor |
|
Numeric |
Lead-time offset |
|
Same as |
Part number for the parent item |
|
Character or numeric |
Part number for the component |
|
Numeric |
Quantity per assembly |
|
Character or numeric |
Additional product structure data |
Part Master Data (for the component) |
||
Variable |
Type |
Interpretation |
|
Character or numeric |
Additional part master data |
|
Numeric |
Lead time |
Indented BOM Data (for the record) |
||
Variable |
Type |
Interpretation |
|
Numeric |
Indenture level number |
|
Numeric |
ID number of the parent record |
|
Numeric |
ID number |
|
Same as |
Part number for the end item |
|
Numeric |
Quantity per product |
|
Numeric |
Total lead time |
|
Numeric |
Total lead-time offset |
The indented BOM records in this data set are organized so that the bill of material contained in the data set are listed
one by one. In each bill of material, the root record is always listed first. In addition, the left-most (oldest) component
of each parent item is listed directly after its parent and before any right siblings of the parent item. For example, from
the Indented BOM data shown in Figure 3.3, you can easily see that the final product 'LA01
' is the first record of the Indented BOM data set. Moreover, item '1100
' is listed directly after its parent, 'B100
', and before the items 'S100
' and 'A100
' (the right siblings of the item 'B100
'). The item '1100
' is followed immediately by its first component '2100
' (the only component in this case), and so on.
By organizing indented BOM records in such a manner and using the indenture level information, the single-level and multilevel
relationships are quite clear. Let us use the indented BOM data set displayed in Figure 3.3 as an example. The three components, 'B100
', 'S100
', and 'A100
', that go into 'LA01
' are easily determined by the level 1 identifiers. It is also easy to see that item 'A100
' takes three components at level 2, and one of them, item '1500
', has a level 3 component (item '1400
') and another item, '1700
', has two level 3 components (items '2200
' and '2300
'). In fact, record 1 to record 6 of this data set contain the indented bill of material for item 'B100
' because record 7 is the first record to have the same level as record 1. The single-level where-used and indented where-used lists can also be done in the same manner but by retrieving records in reversed order. For example, items 'B100
' and '1500
' that directly use component '1400
' can be detected either by looking at the values of the _Parent_
variable directly in record 6 and record 10, or by looking up at the first records with level numbers that are 1 less than
record 6 and record 10, respectively. By continuing to look upward, you see that item '1500
' is used in 'A100
' and item 'A100
' is used in 'LA01
'. As discussed previously, you can also find the parent record (the first record with one level up while retrieving the data
in reversed order) information in the Paren_ID
variable. The Indented BOM data set can also be used to propagate gross requirements, determine a schedule of lower-level items needed,
aggregate lower-level demands, roll up material costs, and so on. See the section Bill of Material Explosion and Implosion for details.