From b831dfc35eff3d9ad54b7aed6b2d1499c137dc1a Mon Sep 17 00:00:00 2001 From: Paul Trowbridge Date: Thu, 15 Jul 2021 16:53:21 -0400 Subject: [PATCH] incraease range and modify pull-forward logic to operate off an explicit overlap period --- build/build_pullforward.sql | 39 +++++++++++++++++++------------------ build/build_rolling.sql | 6 +++--- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/build/build_pullforward.sql b/build/build_pullforward.sql index 0aa1186..65a57dc 100644 --- a/build/build_pullforward.sql +++ b/build/build_pullforward.sql @@ -17,10 +17,12 @@ WITH ---these dates will have to be syncronized with the forecast build----------- tdr AS ( SELECT - -----------actuals into baseline------------------------------------- - DATERANGE('2020-06-01','2021-07-12','[]') arange - -----------plan into baseline---------------------------------------- - ,DATERANGE('2021-06-01','2022-06-01','[)') prange + -----------intented forecast range----------------------------------- + DATERANGE('2021-06-01','2022-06-01','[)') prange + -----------explicitly call out overlap period------------------------ + -----------anythign in this period has to net out to match actuals--- + ,DATERANGE('2021-06-01','2021-07-12','[]') overlap + ,jsonb_build_array('plan','diff') iter ) ,booked AS materialized( SELECT @@ -32,8 +34,7 @@ tdr AS ( rlarp.osm_pool WHERE --find actual orders in the overlap range (where orders fall in both target ranges) - order_date <@ (SELECT arange FROM tdr) - AND order_date <@ (SELECT prange FROM tdr) + order_date <@ (SELECT overlap FROM tdr) --anything that falls in this range is supposed to already match actuals, so no need to filter for actuals GROUP BY billto_group @@ -61,7 +62,7 @@ tdr AS ( --budget orders have already been trued up to match actual, so should not be included in the this isolation --find actual orders in the overlap range (where orders fall in both target ranges) p.order_date <@ (SELECT prange FROM tdr) - AND p.iter IN ('plan','diff') + AND (SELECT iter FROM tdr) ? p.iter GROUP BY p.billto_group ,p.shipto_group @@ -78,7 +79,7 @@ tdr AS ( ,p.order_date ,p.ship_date ,round(p.plan_units,2) plan_units - ,round(SUM(p.plan_units) FILTER (WHERE order_date >= (SELECT upper(arange) FROM tdr)) OVER (PARTITION BY p.billto_group, p.shipto_group, p.part_group ORDER BY p.order_date, p.ship_date),2) plan_rolling + ,round(SUM(p.plan_units) FILTER (WHERE order_date >= (SELECT upper(overlap) FROM tdr)) OVER (PARTITION BY p.billto_group, p.shipto_group, p.part_group ORDER BY p.order_date, p.ship_date),2) plan_rolling ,round(SUM(p.plan_units) OVER (PARTITION BY p.billto_group, p.shipto_group, p.part_group ),2) plan_units_tot --,round(SUM(COALESCE(p.plan_units,0) + COALESCE(p.diff_units,0)) OVER (PARTITION BY p.billto_group, p.shipto_group, p.part_group ORDER BY p.order_date, p.ship_date),2) net_units_agg ,round(COALESCE(p.diff_units,0) + coalesce(p.plan_units,0),2) net_units @@ -114,8 +115,8 @@ tdr AS ( rlarp.osm_log(doc) SELECT $${ - "message":"force accounts to match target total value and margin", - "tag":"retail plug", + "message":"remove future orders to the extent the new forecast totals more than the original budget", + "tag":"1+11", "type":"build" }$$::jsonb doc RETURNING * @@ -169,10 +170,10 @@ tdr AS ( ,o.ship_season ,'1+11' AS version ,'pf' iter - --,log.id - --,coalescE(log.doc->>'tag','') AS "tag" - --,log.doc->>'message' AS "comment" - --,log.doc->>'type' module + ,log.id + ,coalescE(log.doc->>'tag','') AS "tag" + ,log.doc->>'message' AS "comment" + ,log.doc->>'type' module FROM rlarp.osm_pool o INNER JOIN eval e ON @@ -181,7 +182,7 @@ tdr AS ( e.part_group = o.part_group AND e.order_date = o.order_date AND e.ship_date = o.ship_date - --CROSS JOIN log + CROSS JOIN log WHERE e.flag GROUP BY @@ -225,10 +226,10 @@ tdr AS ( ,o.ship_date ,o.ship_month ,o.ship_season - --,log.id - --,coalescE(log.doc->>'tag','') AS "tag" - --,log.doc->>'message' AS "comment" - --,log.doc->>'type' module + ,log.id + ,coalescE(log.doc->>'tag','') + ,log.doc->>'message' + ,log.doc->>'type' -----some bad forecast swings, if one is removed it's wacky -----cap at -1,000,000 HAVING diff --git a/build/build_rolling.sql b/build/build_rolling.sql index 7e80b59..39e092c 100644 --- a/build/build_rolling.sql +++ b/build/build_rolling.sql @@ -16,13 +16,13 @@ DROP TABLE IF EXISTS tdr; CREATE TEMP TABLE tdr AS ( SELECT -----------actuals into baseline------------------------------------- - DATERANGE('2020-06-01','2021-07-12','[]') arange + DATERANGE('2020-06-01','2021-07-15','[]') arange -----------plan into baseline---------------------------------------- - ,DATERANGE('2021-06-01','2022-06-01','[)') prange + ,DATERANGE('2020-06-01','2022-06-01','[)') prange -----------forecast into baseline------------------------------------ ,DATERANGE('2022-06-01','2022-06-01','[)') frange -- this range effectively excludes -----------baseline selection for increment-------------------------- - ,DATERANGE('2021-07-08','2021-07-08','[)') selection + ,DATERANGE('2021-07-15','2021-07-15','[)') selection -----------selection increment size---------------------------------- ,'0 year'::interval AS incr -----------iterations to merge with----------------------------------