diff --git a/vw_bi_fct_open_position.sql b/vw_bi_fct_open_position.sql index bb9838d..03be8c6 100644 --- a/vw_bi_fct_open_position.sql +++ b/vw_bi_fct_open_position.sql @@ -1,35 +1,73 @@ -CREATE OR REPLACE VIEW vw_bi_fct_open_position -AS - -- Sign physical contracted quantities - SELECT - FTL."intTradeId", - FTL."Trade Category", - FTL."Delivery Date", - CASE - WHEN FTL."Trade Type" = 'Purchase' THEN 1 - ELSE -1 - END * FTL."Quantity" AS "Quantity" - FROM vw_bi_fct_trade_line AS FTL - UNION ALL - -- Deduct delivered quantities - SELECT - FFE."inTradeId", - FFE."Trade Category", - FFE."Event Date" AS "Delivery Date", - CASE - WHEN FFE."Trade Type" = 'Purchase' THEN -1 - ELSE 1 - END * SUM(FFE."Quantity") AS "Quantity" +--DROP VIEW IF EXISTS vw_bi_fct_open_position; - FROM vw_bi_fct_trade_fulfillment_event AS FFE - WHERE FFE."Trade Category" = 'Physical' - GROUP BY - FFE."inTradeId", - FFE."Trade Category", - FFE."Event Date", - FFE."Trade Type"; - +CREATE OR REPLACE VIEW vw_bi_fct_open_position + +AS + + WITH purchase_position AS ( + SELECT + Contracts."intTradeId", + Contracts."Trade Category", + Contracts."Trade Type", + Contracts."Delivery Date", + TO_CHAR(Contracts."Delivery Date", 'YYYY-MM') AS "delivery_month", + TO_CHAR(Contracts."Delivery Date", 'Mon YYYY') AS "delivery_month_label", + Contracts."Quantity", + Contracts."Quantity" - COALESCE( Delivery."delivered_quantity" , 0 ) AS "Open Position Quantity" + FROM vw_bi_fct_trade_line AS Contracts + LEFT JOIN ( + -- Deduct delivered quantities + SELECT + FFE."inTradeId", + SUM(FFE."Quantity") AS "delivered_quantity" + FROM vw_bi_fct_trade_fulfillment_event AS FFE + WHERE FFE."Trade Category" = 'Physical' + AND FFE."Trade Type" = 'Purchase' + GROUP BY + FFE."inTradeId" + ) AS Delivery ON Contracts."intTradeId" = Delivery."inTradeId" + WHERE 1=1 + AND Contracts."Trade Category" = 'Physical' + AND Contracts."Trade Type" = 'Purchase' + ) + ,sale_position AS ( + SELECT + Contracts."intTradeId", + Contracts."Trade Category", + Contracts."Trade Type", + Contracts."Delivery Date", + TO_CHAR(Contracts."Delivery Date", 'YYYY-MM') AS "delivery_month", + TO_CHAR(Contracts."Delivery Date", 'Mon YYYY') AS "delivery_month_label", + Contracts."Quantity", + (Contracts."Quantity" - COALESCE( Delivery."delivered_quantity" , 0 ) ) * (-1) AS "Open Position Quantity" + FROM vw_bi_fct_trade_line AS Contracts + LEFT JOIN ( + -- Deduct delivered quantities + SELECT + FFE."inTradeId", + SUM(FFE."Quantity") AS "delivered_quantity" + FROM vw_bi_fct_trade_fulfillment_event AS FFE + WHERE FFE."Trade Category" = 'Physical' + AND FFE."Trade Type" = 'Sale' + GROUP BY + FFE."inTradeId" + ) AS Delivery ON Contracts."intTradeId" = Delivery."inTradeId" + WHERE 1=1 + AND Contracts."Trade Category" = 'Physical' + AND Contracts."Trade Type" = 'Sale' + ) + + SELECT * + FROM purchase_position + + UNION ALL + + SELECT * + FROM sale_position; + + ALTER TABLE public.vw_bi_fct_open_position OWNER TO postgres; + diff --git a/vw_bi_fct_trade_fulfillment_event.sql b/vw_bi_fct_trade_fulfillment_event.sql index d92bb92..3c9dd65 100644 --- a/vw_bi_fct_trade_fulfillment_event.sql +++ b/vw_bi_fct_trade_fulfillment_event.sql @@ -1,7 +1,11 @@ + +--DROP VIEW IF EXISTS vw_bi_fct_trade_fulfillment_event; + CREATE OR REPLACE VIEW vw_bi_fct_trade_fulfillment_event AS SELECT SM."intPurchaseLineId" AS "inTradeId", 'Physical' AS "Trade Category", + 'Purchase' AS "Trade Type", 'Delivered' AS "Event Type", SM."dtmBLDate" AS "Event Date", SM."dblQuantity" AS "Quantity" @@ -10,8 +14,9 @@ CREATE OR REPLACE VIEW vw_bi_fct_trade_fulfillment_event AS AND COALESCE( SM."intPurchaseLineId" , 0 ) > 0 UNION ALL SELECT - SM."intSaleLineId" AS "inTradeId", + SM."intSaleLineId" AS "inTradeId", 'Physical' AS "Trade Category", + 'Sale' AS "Trade Type", 'Delivered' AS "Event Type", SM."dtmBLDate" AS "Event Date", SM."dblQuantity" AS "Quantity"