If you are, like us, users of Oracle Process Manufacturing then you'll have written a lot of reports which rely on Item Costings (both for products and ingredients). One of the things that makes the current structure of the Noetix View difficult to work with is that it provides a detailed breakdown of the costs - something that's useful if you're reporting on the costs themselves - which is not useful if you're reporting on, for example, the value of inventory where you're just interested in the *total* cost.
Of course it's fairly easy to get there, you just total up all the costs but what it does do is introduce unnecessary complexity in your SQL often leading to sub-selects in JOINS like the following;
As you can see we have three component groups LABour, OVErhead, and MATerial and while this is a fairly understandable piece of SQL what happens is that it gets repeated over and over again in various reports and when, as recently, we change the way costing works (by moving costs from one Organsiation to anotehr) it becomes very complex to make the change to all the affected reports.
Because of this we've introduced a summary view which sits on top of GMFG0_Item_Costs called GMFG0_Item_Cost_Summary which looks like this;
Name Type Nullable Default Comments
------------------- ------------ -------- ------- --------
ORGANIZATION_CODE VARCHAR2(40) Y
PERIOD_CODE VARCHAR2(10)
Z$INVG0_ITEMS ROWID Y
ITEM$ITEM VARCHAR2(40) Y
TOTAL_LABOUR_COST NUMBER Y
TOTAL_OVERHEAD_COST NUMBER Y
TOTAL_MATERIAL_COST NUMBER Y
TOTAL_ITEM_COST NUMBER Y
The SQL to generate it is;
To have this view rebuilt every time we do a Noetix regenerate we have created a XU6 script to automatically build the view after every regenerate - it's available here (via Google Docs).
Of course it's fairly easy to get there, you just total up all the costs but what it does do is introduce unnecessary complexity in your SQL often leading to sub-selects in JOINS like the following;
select
gic.ITEM$Item,
sum(decode(gic.Component_Group, 'LAB', gic.Item_Cost)) as TOTAL_LABOUR_COST,
sum(decode(gic.Component_Group, 'OVE', gic.Item_Cost)) as TOTAL_OVERHEAD_COST,
sum(decode(gic.Component_Group, 'MAT', gic.Item_Cost)) as TOTAL_MATERIAL_COST
from gmfg0_item_costs gic
where gic.PERIOD_CODE = :PERIODCODE
group by gic.ITEM$Item
sum(decode(gic.Component_Group, 'LAB', gic.Item_Cost)) as TOTAL_LABOUR_COST,
sum(decode(gic.Component_Group, 'OVE', gic.Item_Cost)) as TOTAL_OVERHEAD_COST,
sum(decode(gic.Component_Group, 'MAT', gic.Item_Cost)) as TOTAL_MATERIAL_COST
from gmfg0_item_costs gic
where gic.PERIOD_CODE = :PERIODCODE
group by gic.ITEM$Item
As you can see we have three component groups LABour, OVErhead, and MATerial and while this is a fairly understandable piece of SQL what happens is that it gets repeated over and over again in various reports and when, as recently, we change the way costing works (by moving costs from one Organsiation to anotehr) it becomes very complex to make the change to all the affected reports.
Because of this we've introduced a summary view which sits on top of GMFG0_Item_Costs called GMFG0_Item_Cost_Summary which looks like this;
Name Type Nullable Default Comments
------------------- ------------ -------- ------- --------
ORGANIZATION_CODE VARCHAR2(40) Y
PERIOD_CODE VARCHAR2(10)
Z$INVG0_ITEMS ROWID Y
ITEM$ITEM VARCHAR2(40) Y
TOTAL_LABOUR_COST NUMBER Y
TOTAL_OVERHEAD_COST NUMBER Y
TOTAL_MATERIAL_COST NUMBER Y
TOTAL_ITEM_COST NUMBER Y
The SQL to generate it is;
create or replace view gmfg0_item_cost_summary as
select gic.Organization_Code,
gic.period_code,
gic.Z$INVG0_Items,
gic.ITEM$Item,
sum(decode(gic.Component_Group, 'LAB', gic.Item_Cost)) as TOTAL_LABOUR_COST,
sum(decode(gic.Component_Group, 'OVE', gic.Item_Cost)) as TOTAL_OVERHEAD_COST,
sum(decode(gic.Component_Group, 'MAT', gic.Item_Cost)) as TOTAL_MATERIAL_COST,
sum(gic.Item_Cost) as TOTAL_ITEM_COST
from gmfg0_item_costs gic
group by gic.Organization_Code,
gic.period_code,
gic.Z$INVG0_Items,
gic.ITEM$Item;
select gic.Organization_Code,
gic.period_code,
gic.Z$INVG0_Items,
gic.ITEM$Item,
sum(decode(gic.Component_Group, 'LAB', gic.Item_Cost)) as TOTAL_LABOUR_COST,
sum(decode(gic.Component_Group, 'OVE', gic.Item_Cost)) as TOTAL_OVERHEAD_COST,
sum(decode(gic.Component_Group, 'MAT', gic.Item_Cost)) as TOTAL_MATERIAL_COST,
sum(gic.Item_Cost) as TOTAL_ITEM_COST
from gmfg0_item_costs gic
group by gic.Organization_Code,
gic.period_code,
gic.Z$INVG0_Items,
gic.ITEM$Item;
To have this view rebuilt every time we do a Noetix regenerate we have created a XU6 script to automatically build the view after every regenerate - it's available here (via Google Docs).