|
|
|
@ -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
|
|
|
|
|