all forecast builds become an iteration overtop existing data

This commit is contained in:
Paul Trowbridge 2021-04-29 11:16:23 -04:00
parent ac3c50dbba
commit 0a96759945
3 changed files with 348 additions and 321 deletions

View File

@ -1,301 +1,19 @@
WITH
tdr AS (
SELECT SELECT
DATERANGE('2020-05-01','2021-05-01','[)') drange version
,DATERANGE('2020-05-01' + ('1 year'::interval),'2021-05-01' + ('1 year'::interval),'[)') repl ,iter
,'1 year'::interval AS incr ,oseas
,(SELECT jsonb_agg(x.v) FROM (VALUES('copy'),('actuals'),('actuals plug'),('adj price'),('adj volume')) AS x(v)) iter ,g.sspr || ' ' || to_char(odate,'Mon') omon
) ,COUNT(*) cnt
,remove AS ( ,sum(fb_val_loc * r_rate) amt
SELECT
-----------documents-------------
null::int "ddord#"
,null::int "dditm#"
,null::int "fgbol#"
,null::int "fgent#"
,null::int "diinv#"
,null::int "dilin#"
,null::int quoten
,null::int quotel
----------dates/status------------------
,o.odate dcodat
,o.rdate ddqdat
,null::date dcmdat
,null::date fesdat
,o.dhidat
,null::text fesind
,null::text dhpost
,o.fspr
-----------measures--------------------
,null::numeric ddqtoi
,null::numeric ddqtsi
,null::numeric fgqshp
,null::numeric diqtsh
,null::numeric diext
,null::numeric ditdis
,null::jsonb discj
,null::text dhincr
,o.plnt
,o.promo
,o.return_reas
,o.terms
,null::text custpo
,null::text remit_to
,null::text bill_class
,o.bill_cust
,null::text bill_rep
,null::text bill_terr
,null::text ship_class
,o.ship_cust
,null::text ship_rep
,null::text ship_terr
,o.dsm
,null::text account
,null::text shipgrp
,null::text geo
,null::text chan
,null::text chansub
,null::text orig_ctry
,null::text orig_prov
,null::text orig_post
,null::text bill_ctry
,null::text bill_prov
,null::text bill_post
,null::text dest_ctry
,null::text dest_prov
,null::text dest_post
,o.part
,null::text styc
,null::text colc
,null::text colgrp
,null::text coltier
,null::text colstat
,null::text sizc
,null::text pckg
,null::text kit
,null::text brnd
,null::text majg
,null::text ming
,null::text majs
,null::text mins
,null::text gldco
,null::text gldc
,null::text glec
,null::text harm
,null::text clss
,null::text brand
,null::text assc
,null::text ddunit
,null::text unti
,null::numeric lbs
,null::numeric plt
,null::text plcd
,o.fs_line
,o.r_currency
,o.r_rate
,o.c_currency
,o.c_rate
,-sum(o.fb_qty) fb_qty
,-sum(o.fb_val_loc) fb_val_loc
,-sum(o.fb_val_loc_dis) fb_val_loc_dis
,-sum(o.fb_val_loc_qt) fb_val_loc_qt
,-sum(o.fb_val_loc_pl) fb_val_loc_pl
,-sum(o.fb_val_loc_tar) fb_val_loc_tar
,-sum(o.fb_cst_loc) fb_cst_loc
,-sum(o.fb_cst_loc_cur) fb_cst_loc_cur
,-sum(o.fb_cst_loc_fut) fb_cst_loc_fut
,o.calc_status
,o.flag
,o.odate
,o.oseas
,o.rdate
,o.rseas
-----when null, greatest/least is just going to act like coalesce
,o.sdate
,o.sseas
,o.version
,o.iter
FROM FROM
rlarp.osmf_dev o rlarp.osmf_stage o
CROSS JOIN tdr INNER JOIN rlarp.gld g ON
WHERE o.odate <@ g.drange
--collect all the rows in the base period and
--the destination slot for the new rows
o.odate <@ tdr.drange
OR o.odate <@ tdr.repl
GROUP BY GROUP BY
o.odate version
,o.rdate ,iter
,o.dhidat ,oseas
,o.fspr ,g.sspr || ' ' || to_char(odate,'Mon')
,o.plnt ORDER BY
,o.promo oseas
,o.return_reas ,omon
,o.terms
,o.bill_cust
,o.ship_cust
,o.dsm
,o.part
,o.fs_line
,o.r_currency
,o.r_rate
,o.c_currency
,o.c_rate
,o.calc_status
,o.flag
,o.odate
,o.oseas
,o.rdate
,o.rseas
,o.sdate
,o.sseas
)
,stack AS (
SELECT * FROM rlarp.osmf_stage
UNION ALL
SELECT * FROM remove
)
,merge_diff AS (
SELECT
-----------documents-------------
null::int "ddord#"
,null::int "dditm#"
,null::int "fgbol#"
,null::int "fgent#"
,null::int "diinv#"
,null::int "dilin#"
,null::int quoten
,null::int quotel
----------dates/status------------------
,o.odate dcodat
,o.rdate ddqdat
,null::date dcmdat
,null::date fesdat
,o.dhidat
,null::text fesind
,null::text dhpost
,o.fspr
-----------measures--------------------
,null::numeric ddqtoi
,null::numeric ddqtsi
,null::numeric fgqshp
,null::numeric diqtsh
,null::numeric diext
,null::numeric ditdis
,null::jsonb discj
,null::text dhincr
,o.plnt
,o.promo
,o.return_reas
,o.terms
,null::text custpo
,null::text remit_to
,null::text bill_class
,o.bill_cust
,null::text bill_rep
,null::text bill_terr
,null::text ship_class
,o.ship_cust
,null::text ship_rep
,null::text ship_terr
,o.dsm
,null::text account
,null::text shipgrp
,null::text geo
,null::text chan
,null::text chansub
,null::text orig_ctry
,null::text orig_prov
,null::text orig_post
,null::text bill_ctry
,null::text bill_prov
,null::text bill_post
,null::text dest_ctry
,null::text dest_prov
,null::text dest_post
,o.part
,null::text styc
,null::text colc
,null::text colgrp
,null::text coltier
,null::text colstat
,null::text sizc
,null::text pckg
,null::text kit
,null::text brnd
,null::text majg
,null::text ming
,null::text majs
,null::text mins
,null::text gldco
,null::text gldc
,null::text glec
,null::text harm
,null::text clss
,null::text brand
,null::text assc
,null::text ddunit
,null::text unti
,null::numeric lbs
,null::numeric plt
,null::text plcd
,o.fs_line
,o.r_currency
,o.r_rate
,o.c_currency
,o.c_rate
,sum(o.fb_qty) fb_qty
,sum(o.fb_val_loc) fb_val_loc
,sum(o.fb_val_loc_dis) fb_val_loc_dis
,sum(o.fb_val_loc_qt) fb_val_loc_qt
,sum(o.fb_val_loc_pl) fb_val_loc_pl
,sum(o.fb_val_loc_tar) fb_val_loc_tar
,sum(o.fb_cst_loc) fb_cst_loc
,sum(o.fb_cst_loc_cur) fb_cst_loc_cur
,sum(o.fb_cst_loc_fut) fb_cst_loc_fut
,o.calc_status
,o.flag
,o.odate
,o.oseas
,o.rdate
,o.rseas
-----when null, greatest/least is just going to act like coalesce
,o.sdate
,o.sseas
,'actuals'
,'merge'
FROM
stack
WHERE
--collect all the rows in the base period and
--the destination slot for the new rows
o.odate <@ tdr.drange
OR o.odate <@ tdr.repl
GROUP BY
o.odate
,o.rdate
,o.dhidat
,o.fspr
,o.plnt
,o.promo
,o.return_reas
,o.terms
,o.bill_cust
,o.ship_cust
,o.dsm
,o.part
,o.fs_line
,o.r_currency
,o.r_rate
,o.c_currency
,o.c_rate
,o.calc_status
,o.flag
,o.odate
,o.oseas
,o.rdate
,o.rseas
,o.sdate
,o.sseas
)
SELECT COUNT(*) from merge_deff

View File

@ -1,15 +1,19 @@
BEGIN; BEGIN;
--\timing --\timing
CREATE TABLE IF NOT EXISTS rlarp.osmf_stage AS (SELECT * FROM rlarp.osmf_dev) WITH no data; --CREATE TABLE IF NOT EXISTS rlarp.osmf_stage AS (SELECT * FROM rlarp.osmf_dev) WITH no data;
truncate table rlarp.osmf_stage; TRUNCATE TABLE rlarp.osmf_stage;
WITH DROP TABLE IF EXISTS tdr;
tdr AS ( CREATE TEMP TABLE tdr AS (
SELECT SELECT
DATERANGE('2020-05-01','2021-05-01','[)') drange DATERANGE('2020-05-01','2021-05-01','[)') drange
,(SELECT jsonb_agg(iter) FROM (VALUES('copy'),('actuals'),('actuals plug'),('adj price'),('adj volume'))) iter ,DATERANGE(('2020-05-01'::date + '1 year'::interval)::date,('2021-05-01'::date + '1 year'::interval)::date,'[)') repl
) ,'1 year'::interval AS incr
,gld AS ( ,(SELECT jsonb_agg(x.v) FROM (VALUES('copy'),('actuals'),('actuals plug')) AS x(v)) iter
);
WITH
gld AS (
SELECT SELECT
N1COMP COMP N1COMP COMP
,N1CCYY FSYR ,N1CCYY FSYR
@ -140,7 +144,7 @@ tdr AS (
-----when null, greatest/least is just going to act like coalesce -----when null, greatest/least is just going to act like coalesce
,greatest(least(o.sdate,gld.edat),gld.sdat) sdate ,greatest(least(o.sdate,gld.edat),gld.sdat) sdate
,ss.ssyr sseas ,ss.ssyr sseas
,'15mo' "version" ,'actuals' "version"
,'actuals' iter ,'actuals' iter
FROM FROM
rlarp.osm_dev o rlarp.osm_dev o
@ -197,11 +201,11 @@ SELECT
,o."dilin#" ,o."dilin#"
,o.quoten ,o.quoten
,o.quotel ,o.quotel
,o.dcodat + interval '1 year' --incremented ,o.dcodat + interval '1 year' dcodat --incremented
,o.ddqdat + interval '1 year' --incremented ,o.ddqdat + interval '1 year' ddqdat --incremented
,o.dcmdat ,o.dcmdat
,o.fesdat ,o.fesdat
,o.dhidat + interval '1 year' --incremented ,o.dhidat + interval '1 year' dhidat --incremented
,o.fesind ,o.fesind
,o.dhpost ,o.dhpost
,gld.fspr --incremented ,gld.fspr --incremented
@ -284,12 +288,12 @@ SELECT
,o.fb_cst_loc_fut ,o.fb_cst_loc_fut
,o.calc_status ,o.calc_status
,o.flag ,o.flag
,o.odate + interval '1 year' --incremented ,(o.odate + interval '1 year')::date odate --incremented
,o.oseas + 1 --incremented ,o.oseas + 1 oseas --incremented
,o.rdate + interval '1 year' --incremented ,(o.rdate + interval '1 year')::date rdate --incremented
,o.rseas + 1 --incremented ,o.rseas + 1 rseas --incremented
,o.sdate + interval '1 year' --incremented ,(o.sdate + interval '1 year')::date sdate --incremented
,o.sseas + 1 --incremented ,o.sseas + 1 sseas --incremented
,'b22' "version" ,'b22' "version"
,'copy' iter ,'copy' iter
FROM FROM
@ -299,13 +303,318 @@ FROM
WHERE WHERE
o.odate + interval '1 year' >= (SELECT LOWER(drange) + INTERVAL '1 year' FROM tdr) o.odate + interval '1 year' >= (SELECT LOWER(drange) + INTERVAL '1 year' FROM tdr)
) )
INSERT INTO rlarp.osmf_stage ,stage AS (
SELECT * FROM incr SELECT * FROM incr
UNION ALL UNION ALL
SELECT * FROM baseline; SELECT * FROM baseline
)
,remove AS (
SELECT
-----------documents-------------
null::int "ddord#"
,null::int "dditm#"
,null::int "fgbol#"
,null::int "fgent#"
,null::int "diinv#"
,null::int "dilin#"
,null::int quoten
,null::int quotel
----------dates/status------------------
,o.odate dcodat
,o.rdate ddqdat
,null::date dcmdat
,null::date fesdat
,o.dhidat
,null::text fesind
,null::text dhpost
,o.fspr
-----------measures--------------------
,null::numeric ddqtoi
,null::numeric ddqtsi
,null::numeric fgqshp
,null::numeric diqtsh
,null::numeric diext
,null::numeric ditdis
,null::jsonb discj
,null::text dhincr
,o.plnt
,o.promo
,o.return_reas
,o.terms
,null::text custpo
,null::text remit_to
,null::text bill_class
,o.bill_cust
,null::text bill_rep
,null::text bill_terr
,null::text ship_class
,o.ship_cust
,null::text ship_rep
,null::text ship_terr
,o.dsm
,null::text account
,null::text shipgrp
,null::text geo
,null::text chan
,null::text chansub
,null::text orig_ctry
,null::text orig_prov
,null::text orig_post
,null::text bill_ctry
,null::text bill_prov
,null::text bill_post
,null::text dest_ctry
,null::text dest_prov
,null::text dest_post
,o.part
,null::text styc
,null::text colc
,null::text colgrp
,null::text coltier
,null::text colstat
,null::text sizc
,null::text pckg
,null::text kit
,null::text brnd
,null::text majg
,null::text ming
,null::text majs
,null::text mins
,null::text gldco
,null::text gldc
,null::text glec
,null::text harm
,null::text clss
,null::text brand
,null::text assc
,null::text ddunit
,null::text unti
,null::numeric lbs
,null::numeric plt
,null::text plcd
,o.fs_line
,o.r_currency
,o.r_rate
,o.c_currency
,o.c_rate
,-sum(o.fb_qty) fb_qty
,-sum(o.fb_val_loc) fb_val_loc
,-sum(o.fb_val_loc_dis) fb_val_loc_dis
,-sum(o.fb_val_loc_qt) fb_val_loc_qt
,-sum(o.fb_val_loc_pl) fb_val_loc_pl
,-sum(o.fb_val_loc_tar) fb_val_loc_tar
,-sum(o.fb_cst_loc) fb_cst_loc
,-sum(o.fb_cst_loc_cur) fb_cst_loc_cur
,-sum(o.fb_cst_loc_fut) fb_cst_loc_fut
,o.calc_status
,o.flag
,o.odate
,o.oseas
,o.rdate
,o.rseas
-----when null, greatest/least is just going to act like coalesce
,o.sdate
,o.sseas
,o.version
,o.iter
FROM
rlarp.osmfs_dev o
CROSS JOIN tdr
WHERE
--collect all the rows in the base period and
--the destination slot for the new rows
(
o.odate <@ tdr.drange
OR o.odate <@ tdr.repl
)
---only merge with targeted iterations
AND tdr.iter ? o.iter
GROUP BY
o.odate
,o.rdate
,o.dhidat
,o.fspr
,o.plnt
,o.promo
,o.return_reas
,o.terms
,o.bill_cust
,o.ship_cust
,o.dsm
,o.part
,o.fs_line
,o.r_currency
,o.r_rate
,o.c_currency
,o.c_rate
,o.calc_status
,o.flag
,o.odate
,o.oseas
,o.rdate
,o.rseas
,o.sdate
,o.sseas
,o.version
,o.iter
)
,stack AS (
SELECT * FROM stage
UNION ALL
SELECT * FROM remove
)
,merge_diff AS (
SELECT
-----------documents-------------
null::int "ddord#"
,null::int "dditm#"
,null::int "fgbol#"
,null::int "fgent#"
,null::int "diinv#"
,null::int "dilin#"
,null::int quoten
,null::int quotel
----------dates/status------------------
,o.odate dcodat
,o.rdate ddqdat
,null::date dcmdat
,null::date fesdat
,o.dhidat
,null::text fesind
,null::text dhpost
,o.fspr
-----------measures--------------------
,null::numeric ddqtoi
,null::numeric ddqtsi
,null::numeric fgqshp
,null::numeric diqtsh
,null::numeric diext
,null::numeric ditdis
,null::jsonb discj
,null::text dhincr
,o.plnt
,o.promo
,o.return_reas
,o.terms
,null::text custpo
,null::text remit_to
,null::text bill_class
,o.bill_cust
,null::text bill_rep
,null::text bill_terr
,null::text ship_class
,o.ship_cust
,null::text ship_rep
,null::text ship_terr
,o.dsm
,null::text account
,null::text shipgrp
,null::text geo
,null::text chan
,null::text chansub
,null::text orig_ctry
,null::text orig_prov
,null::text orig_post
,null::text bill_ctry
,null::text bill_prov
,null::text bill_post
,null::text dest_ctry
,null::text dest_prov
,null::text dest_post
,o.part
,null::text styc
,null::text colc
,null::text colgrp
,null::text coltier
,null::text colstat
,null::text sizc
,null::text pckg
,null::text kit
,null::text brnd
,null::text majg
,null::text ming
,null::text majs
,null::text mins
,null::text gldco
,null::text gldc
,null::text glec
,null::text harm
,null::text clss
,null::text brand
,null::text assc
,null::text ddunit
,null::text unti
,null::numeric lbs
,null::numeric plt
,null::text plcd
,o.fs_line
,o.r_currency
,o.r_rate
,o.c_currency
,o.c_rate
,sum(o.fb_qty) fb_qty
,sum(o.fb_val_loc) fb_val_loc
,sum(o.fb_val_loc_dis) fb_val_loc_dis
,sum(o.fb_val_loc_qt) fb_val_loc_qt
,sum(o.fb_val_loc_pl) fb_val_loc_pl
,sum(o.fb_val_loc_tar) fb_val_loc_tar
,sum(o.fb_cst_loc) fb_cst_loc
,sum(o.fb_cst_loc_cur) fb_cst_loc_cur
,sum(o.fb_cst_loc_fut) fb_cst_loc_fut
,o.calc_status
,o.flag
,o.odate
,o.oseas
,o.rdate
,o.rseas
,o.sdate
,o.sseas
--,o.version
--,o.iter
,'actuals' AS version
,'merge' iter
FROM
stack o
WHERE
--collect all the rows in the base period and
--the destination slot for the new rows
o.odate <@ (SELECT tdr.drange FROM tdr)
OR o.odate <@ (SELECT tdr.repl FROM tdr)
GROUP BY
o.odate
,o.rdate
,o.dhidat
,o.fspr
,o.plnt
,o.promo
,o.return_reas
,o.terms
,o.bill_cust
,o.ship_cust
,o.dsm
,o.part
,o.fs_line
,o.r_currency
,o.r_rate
,o.c_currency
,o.c_rate
,o.calc_status
,o.flag
,o.odate
,o.oseas
,o.rdate
,o.rseas
,o.sdate
,o.sseas
--,o.version
--,o.iter
)
INSERT INTO rlarp.osmf_stage SELECT * FROM merge_diff
COMMIT; COMMIT;
END
---identify short ships: causes disconnect with actual sales------------------------------------------------------------------- ---identify short ships: causes disconnect with actual sales-------------------------------------------------------------------
--UPDATE rlarp.osmfs SET iter = 'short ship' WHERE calc_status = 'CLOSED' AND flag = 'REMAINDER'; --UPDATE rlarp.osmfs SET iter = 'short ship' WHERE calc_status = 'CLOSED' AND flag = 'REMAINDER';