The BOM Procedure

Example 3.6 Bill of Material with Repeated Relationships

As briefly described in the section Product Structure Data Set, sometimes it is necessary to structure a given component into a parent item more than once because it is used at different places, at different times in the process, or in different operations. The Product Structure data set shown in Output 3.6.1 is an example of this situation. Because of the different points of use (denoted by the PointUse variable) and lead-time offsets (denoted by the LTOff variable) involved in its two relationships, item '1400' (1/4-20 Screw) cannot be structured just once into the parent item 'B100' (Base assembly). The Line variable in this data set denotes the line sequence number, which is part of the unique key in the product structure record. Although it is not necessary in the BOM procedure, some software packages will not allow two relationships with the same parent and component. However, when unique line sequence numbers are assigned, a given component can be structured into a parent item any number of times. Line sequence numbers are sometimes used to sequence components in the desired order on a bill of material, frequently in order of use. They are also used on occasion to refer to the balloon or find number on engineer drawings (Clement, Coldrick, and Sari 1992).

Output 3.6.1: Product Structure Data Set with Repeated Relationships

ABC Lamp Company
 
Product Structure Records

Parent Component QtyPer Fscrap Line PointUse LTOff
LA01 B100 1 . 010 SA2 0
  S100 1 . 015 SA2 0
  A100 1 . 020 SA5 15
B100 1100 1 . 010 SA4A 0
  1200 1 . 020 SA4A 0
  1400 4 0.25 110 SA4A 0
  1300 1 . 120 SA4B 20
  1400 4 0.50 215 SA4B 20
A100 1500 1 . 100 SA3 0
  1600 1 . 110 SA3 0
  1700 1 . 120 SA5 0
1100 2100 26 0.20   SA9B 0
1500 1400 2 .   SA7 0
1700 2200 12 0.10 010 SA5 0
  2300 1 . 030 SA5 5


The following code invokes PROC BOM with this Product Structure data set, ParComp6, and the Part Master data set, PMaster3 (shown in Output 3.3.1), to create the indented bill of material for the product 'LA01'. The Line and PointUse variables specified in the RID= option can be used to distinguish the two relationships with the same parent item 'B100' and components '1400' (observations $6$ and $8$) in the indented BOM data set as displayed in Output 3.6.2.

  /* Create the indented BOM */
proc bom data=ParComp6 pmdata=PMaster3 out=IndBOM6a; 
   structure / part=Part 
               leadtime=LeadTime 
               parent=Parent
               component=Component
               quantity=QtyPer
               factor=Fscrap
               offset=LTOff
               id=(Desc Unit)
               rid=(Line PointUse)
               enditem=("LA01"); 
run;

Output 3.6.2: Indented Bill of Material with Repeated Relationships

ABC Lamp Company
 
Indented Bill of Material, Part LA01

Obs _Level_ _Parent_ _Part_ Desc QtyPer Fscrap Qty_Prod Unit LeadTime Tot_Lead LTOff Tot_Off Line PointUse _Prod_
1 0   LA01 Lamp LA . . 1 Each 2 2 . 0     LA01
2 1 LA01 B100 Base assembly 1 0.00 1 Each 1 3 0 0 010 SA2 LA01
3 2 B100 1100 Finished shaft 1 0.00 1 Each 2 5 0 0 010 SA4A LA01
4 3 1100 2100 3/8 Steel tubing 26 0.20 26 Inches 3 8 0 0   SA9B LA01
5 2 B100 1200 6-Diameter steel plate 1 0.00 1 Each 3 6 0 0 020 SA4A LA01
6 2 B100 1400 1/4-20 Screw 4 0.25 4 Each 1 4 0 0 110 SA4A LA01
7 2 B100 1300 Hub 1 0.00 1 Each 2 5 20 20 120 SA4B LA01
8 2 B100 1400 1/4-20 Screw 4 0.50 4 Each 1 4 20 20 215 SA4B LA01
9 1 LA01 S100 Black shade 1 0.00 1 Each 2 4 0 0 015 SA2 LA01
10 1 LA01 A100 Socket assembly 1 0.00 1 Each 1 3 15 15 020 SA5 LA01
11 2 A100 1500 Steel holder 1 0.00 1 Each 2 5 0 15 100 SA3 LA01
12 3 1500 1400 1/4-20 Screw 2 0.00 2 Each 1 6 0 15   SA7 LA01
13 2 A100 1600 One-way socket 1 0.00 1 Each 2 5 0 15 110 SA3 LA01
14 2 A100 1700 Wiring assembly 1 0.00 1 Each 1 4 0 15 120 SA5 LA01
15 3 1700 2200 16-Gauge lamp cord 12 0.10 12 Feet 2 6 0 15 010 SA5 LA01
16 3 1700 2300 Standard plug terminal 1 0.00 1 Each 1 5 5 20 030 SA5 LA01


The BOM procedure can create bill of material with two or more identical relationships in a given parent item, if necessary. The specification of the keyword KEEP for the DUPLICATE= option tells PROC BOM to sequence components in the same order as they are listed in the Product Structure data set while constructing the indented bill of material. The following SAS code invokes PROC BOM to create a bill of material with identical relationships, displayed in Output 3.6.3. Note that the RID= option is not specified in this invocation of PROC BOM: the two relationships with the same parent item 'B100' and component '1400' are identical.

/* Create the indented BOM */
proc bom data=ParComp6 pmdata=PMaster3 out=IndBOM6b
      duplicate=KEEP; 
structure / part=Part 
            leadtime=LeadTime 
            parent=Parent
            component=Component
            quantity=QtyPer
            factor=Fscrap
            id=(Desc Unit)
            enditem=("LA01"); 
run;

Output 3.6.3: Indented Bill of Material with Identical Relationships

ABC Lamp Company
 
Indented Bill of Material, Part LA01

_Level_ _Parent_ _Part_ Desc QtyPer Fscrap Qty_Prod Unit LeadTime Tot_Lead _Prod_
0   LA01 Lamp LA . . 1 Each 2 2 LA01
1 LA01 B100 Base assembly 1 0.00 1 Each 1 3 LA01
2 B100 1100 Finished shaft 1 0.00 1 Each 2 5 LA01
3 1100 2100 3/8 Steel tubing 26 0.20 26 Inches 3 8 LA01
2 B100 1200 6-Diameter steel plate 1 0.00 1 Each 3 6 LA01
2 B100 1400 1/4-20 Screw 4 0.25 4 Each 1 4 LA01
2 B100 1300 Hub 1 0.00 1 Each 2 5 LA01
2 B100 1400 1/4-20 Screw 4 0.50 4 Each 1 4 LA01
1 LA01 S100 Black shade 1 0.00 1 Each 2 4 LA01
1 LA01 A100 Socket assembly 1 0.00 1 Each 1 3 LA01
2 A100 1500 Steel holder 1 0.00 1 Each 2 5 LA01
3 1500 1400 1/4-20 Screw 2 0.00 2 Each 1 6 LA01
2 A100 1600 One-way socket 1 0.00 1 Each 2 5 LA01
2 A100 1700 Wiring assembly 1 0.00 1 Each 1 4 LA01
3 1700 2200 16-Gauge lamp cord 12 0.10 12 Feet 2 6 LA01
3 1700 2300 Standard plug terminal 1 0.00 1 Each 1 5 LA01


On other occasions, you may want the bill of material to show the total quantity of each component used by a given parent item without any reference to the order, time, or place of use. To do this, you can specify the keyword COMBINE for the DUPLICATE= option. This is the default behavior of the DUPLICATE= option. The SAS code to accomplish this is as follows:

/* Create the indented BOM */
proc bom data=ParComp6 pmdata=PMaster3 out=IndBOM6c
      duplicate=COMBINE; 
structure / part=Part 
            leadtime=LeadTime 
            parent=Parent
            component=Component
            quantity=QtyPer
            factor=Fscrap
            id=(Desc Unit)
            enditem=("LA01"); 
run;

The indented bill of material is displayed in Output 3.6.4. Note that the two identical relationships of the parent 'B100' and the component '1400' are collapsed into one relationship. See the section Product Structure Data Set for details about combining identical parent-component relationships.

Output 3.6.4: Indented Bill of Material with Identical Relationships Collapsed

ABC Lamp Company
 
Indented Bill of Material, Part LA01

_Level_ _Parent_ _Part_ Desc QtyPer Fscrap Qty_Prod Unit LeadTime Tot_Lead _Prod_
0   LA01 Lamp LA . . 1 Each 2 2 LA01
1 LA01 B100 Base assembly 1 0.000 1 Each 1 3 LA01
2 B100 1100 Finished shaft 1 0.000 1 Each 2 5 LA01
3 1100 2100 3/8 Steel tubing 26 0.200 26 Inches 3 8 LA01
2 B100 1200 6-Diameter steel plate 1 0.000 1 Each 3 6 LA01
2 B100 1400 1/4-20 Screw 8 0.375 8 Each 1 4 LA01
2 B100 1300 Hub 1 0.000 1 Each 2 5 LA01
1 LA01 S100 Black shade 1 0.000 1 Each 2 4 LA01
1 LA01 A100 Socket assembly 1 0.000 1 Each 1 3 LA01
2 A100 1500 Steel holder 1 0.000 1 Each 2 5 LA01
3 1500 1400 1/4-20 Screw 2 0.000 2 Each 1 6 LA01
2 A100 1600 One-way socket 1 0.000 1 Each 2 5 LA01
2 A100 1700 Wiring assembly 1 0.000 1 Each 1 4 LA01
3 1700 2200 16-Gauge lamp cord 12 0.100 12 Feet 2 6 LA01
3 1700 2300 Standard plug terminal 1 0.000 1 Each 1 5 LA01