BOM
mainBill of materials line — one component per row under a BOM header, with quantity per unit, validity dates, scrap factors, and the operation it is consumed at
What the badges mean
- main
- Table group: how F&O categorizes the table's role — main entity, group/header, transaction, worksheet header, worksheet line, reference, parameter, or framework.
- Shared across companies
- The table carries no
DataAreaId— rows aren’t partitioned per company, so a query never needs (and can’t use) a company filter here (see the quirks guide). - Date-effective
- The table carries a
ValidFrom/ValidToeffectivity window — a join without a date filter multiplies every key by its history (see the quirks guide).
Header & line
BOM lines join back to their header BOMTable — and the DataAreaId — so a line never fans out across companies.
Fields
21 fields · 2 key
21 fields.
| Key | Field | EDT | Description | Type | Length | Flags |
|---|---|---|---|---|---|---|
| Key | BOMId | BOMId | The BOM header this component line belongs to | string | 20 | |
| Key | LineNum | LineNum | Line number within the BOM | real | ||
| ItemId | ItemId | Component item consumed by the line | string | 20 | ||
| BOMType | Line type — item, phantom, pegged supply, or vendor | enum | ||||
| BOMQty | Component quantity per the BOM quantity series | real | ||||
| BOMQtySerie | Quantity series (per-series denominator) BOMQty applies to | real | ||||
| UnitId | Unit the component quantity is stated in | string | 10 | |||
| InventDimId | InventDimId | Inventory-dimension combination the component defaults from; join to InventDim to resolve site / warehouse | string | 25 | ||
| FromDate | Line validity start; unset rows carry the 1900-01-01 sentinel | date | ||||
| ToDate | Line validity end; unset rows carry the 1900-01-01 sentinel | date | ||||
| OprNum | Route operation the component is consumed at | int | ||||
| Position | Position reference on the parent item | string | ||||
| ConfigGroupId | Configuration group that decides which product configurations use the line | string | ||||
| ScrapConst | Constant scrap quantity added to the requirement | real | ||||
| ScrapVar | Variable scrap percentage added to the requirement | real | ||||
| RoundUp | How the calculated consumption is rounded (no rounding, quantity, measurement…) | enum | ||||
| Formula | Measurement formula used to compute consumption from height / width / depth / density | enum | ||||
| ProdFlushingPrincip | Flushing principle defaulted to production order lines | enum | ||||
| ItemBOMId | BOMId | Specific sub-BOM to use when the component is itself a BOM item | string | 20 | ||
| ItemRouteId | RouteId | Specific sub-route to use when the component is produced | string | 20 | ||
| VendId | VendAccount | Vendor for subcontracted (vendor-type) lines | string | 20 |
Field provenance: hand-curated.
Boilerplate SQL
Starting point for reading BOM on Databricks — enums are decoded, 1900-01-01 dates are wrapped to NULL, and the DataAreaId anchor is in place. Set your Unity Catalog location, company, and filter values below; they’re substituted into the SQL and the copy button.
3 parameters not filled: <catalog>, <schema>, <company>
-- ============================================================
-- Table : BOM Bill of materials line — one component per row under a BOM header, with quantity per unit, validity dates, scrap factors, and the operation it is consumed at
-- Purpose: Column-selected read of BOM — auto-generated from field metadata
-- Grain : One row per company (dataareaid) + BOMId + LineNum
-- Notes : Auto-generated skeleton for Synapse Link / Fabric Link-landed F&O data (lowercase column names). Enums decoded inline where verified; datetimes stored in UTC; 1900-01-01 dates are sentinels mapped to NULL. System/audit columns omitted — see the quirks guide.
-- ============================================================
SELECT
b.bomid AS "The BOM header this component line belongs to",
b.linenum AS "Line number within the BOM",
b.itemid AS "Component item consumed by the line",
b.bomtype AS "Line type — item, phantom, pegged supply, or vendor", -- enum: decode b.bomtype via GlobalOptionsetMetadata join — see quirks guide #enums
b.bomqty AS "Component quantity per the BOM quantity series",
b.bomqtyserie AS "Quantity series (per-series denominator) BOMQty applies to",
b.unitid AS "Unit the component quantity is stated in",
b.inventdimid AS "Inventory-dimension combination the component defaults from; join to InventDim to resolve site / warehouse",
CASE WHEN CAST(b.fromdate AS DATE) = DATE '1900-01-01' THEN NULL ELSE CAST(b.fromdate AS DATE) END AS "Line validity start; unset rows carry the 1900-01-01 sentinel", -- 1900-01-01 sentinel → NULL
CASE WHEN CAST(b.todate AS DATE) = DATE '1900-01-01' THEN NULL ELSE CAST(b.todate AS DATE) END AS "Line validity end; unset rows carry the 1900-01-01 sentinel", -- 1900-01-01 sentinel → NULL
b.oprnum AS "Route operation the component is consumed at",
b.position AS "Position reference on the parent item",
b.configgroupid AS "Configuration group that decides which product configurations use the line",
b.scrapconst AS "Constant scrap quantity added to the requirement",
b.scrapvar AS "Variable scrap percentage added to the requirement",
b.roundup AS "How the calculated consumption is rounded (no rounding, quantity, measurement…)", -- enum: decode b.roundup via GlobalOptionsetMetadata join — see quirks guide #enums
b.formula AS "Measurement formula used to compute consumption from height / width / depth / density", -- enum: decode b.formula via GlobalOptionsetMetadata join — see quirks guide #enums
b.prodflushingprincip AS "Flushing principle defaulted to production order lines", -- enum: decode b.prodflushingprincip via GlobalOptionsetMetadata join — see quirks guide #enums
b.itembomid AS "Specific sub-BOM to use when the component is itself a BOM item",
b.itemrouteid AS "Specific sub-route to use when the component is produced",
b.vendid AS "Vendor for subcontracted (vendor-type) lines"
FROM <catalog>.<schema>.bom b
-- Dimension expansion: uncomment to resolve site / warehouse / location / batch
-- LEFT JOIN <catalog>.<schema>.inventdim id ON id.inventdimid = b.inventdimid AND id.dataareaid = b.dataareaid
WHERE
b.dataareaid = '<company>'
ORDER BY b.bomid;Verified September 2026
Relationships
Diagram of 1-hop neighbors — join details below. RecId and InventDim edges are highlighted; they’re the joins newcomers most often get wrong.
Join details
ON bomtable.bomid = bom.bomid AND bomtable.dataareaid = bom.dataareaidON bom.itemid = inventtable.itemid AND bom.dataareaid = inventtable.dataareaidON bom.inventdimid = inventdim.inventdimid AND bom.dataareaid = inventdim.dataareaid
Data Entities That Expose This Table
More Production Control tables
- BOMTableBill of materials header — one row per BOM identifier, with its name, approval state, and production site; versions in BOMVersion decide which items use it and when
- BOMVersionBOM version — the link that assigns a BOM header to a finished item for a validity period, quantity range, and site; the Active flag decides which version planning and orders pick
- ProdBOMProduction order BOM line — the materials a specific production order plans to consume, copied from the item's active BOM at order creation and then adjusted per order
- ProdTableProduction order header — one row per order carrying the item being built, order status and type, scheduled and actual dates, and the BOM and route it was created from
- RouteRoute operation sequence — one row per operation number on a route, ordering the operations and linking each to the next; operation times live on the related RouteOpr table
- RouteTableRoute header — one row per route identifier with its name and approval state; route versions assign it to items, and Route rows hold its operation sequence