From 752aeffa061b6004fe8699afb8d29d05ec749b18 Mon Sep 17 00:00:00 2001 From: Paul Trowbridge Date: Mon, 2 Aug 2021 15:46:43 -0400 Subject: [PATCH] add notes and create an adjustment based on a percentage for lines where not all is pullforward --- build/build_pullforward.sql | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/build/build_pullforward.sql b/build/build_pullforward.sql index d3d7672..f606255 100644 --- a/build/build_pullforward.sql +++ b/build/build_pullforward.sql @@ -42,6 +42,8 @@ tdr AS ( ,shipto_group ,part_group ) +--SELECT * FROM booked +------------plan units according to the 'plan' iteration of the current forecast---------------------------- ,planned AS ( SELECT p.billto_group @@ -72,6 +74,8 @@ tdr AS ( ,p.ship_date ,b.units ) +--SELECT * FROM planned LIMIT 100 +-------flag rows by preparing a rolling total in this step------------------ ,plan_ranked AS ( SELECT p.billto_group @@ -89,7 +93,8 @@ tdr AS ( FROM planned p ) ----flag any rows where +--SELECT * FROM plan_ranked +---flag future budget where up to the extent that actuals are larger than budget, but not more------ ,eval AS ( SELECT p.billto_group @@ -104,12 +109,20 @@ tdr AS ( ,p.net_units_tot ,p.net_units --,p.booked - ,plan_rolling <= (p.net_units_tot - p.plan_units_tot + plan_units) flag + -----total current units less plan total units is the excess + -----if the current row contributes to the excess, flag it + -----the last row will likely pull out too much, it will need split probably + ,(plan_rolling - plan_units) <= (p.net_units_tot - p.plan_units_tot) flag + ,-(p.net_units_tot - p.plan_units_tot) max_possible_reduction + ,-CASE + WHEN plan_rolling <= (p.net_units_tot - p.plan_units_tot) THEN plan_units + WHEN plan_rolling > (p.net_units_tot - p.plan_units_tot) AND (plan_rolling - plan_units) <= (p.net_units_tot - p.plan_units_tot) THEN (p.net_units_tot - p.plan_units_tot) - (plan_rolling - plan_units) + END qty --,CASE WHEN (p.plan_units_agg - p.plan_units) > p.booked AND p.plan_units_agg <= p.booked * 2 THEN true ELSE false END remove FROM plan_ranked p ) ---select * from eval limit 10000 +--SELECT * FROM eval LIMIT 10000 ----------------create a log entry-------------------- ,log AS ( INSERT INTO @@ -153,11 +166,12 @@ tdr AS ( ,o.r_rate ,o.c_currency ,o.c_rate - ,round(-sum(o.units ),2) units - ,round(-sum(o.value_loc),2) value_loc - ,round(-sum(o.value_usd),2) value_usd - ,round(-sum(o.cost_loc ),2) cost_loc - ,round(-sum(o.cost_usd ),2) cost_usd + -----only keep the percentage of the current row determined by the last step-------- + ,round(-sum(o.units ),2)*(-e.qty/e.plan_units) units + ,round(-sum(o.value_loc),2)*(-e.qty/e.plan_units) value_loc + ,round(-sum(o.value_usd),2)*(-e.qty/e.plan_units) value_usd + ,round(-sum(o.cost_loc ),2)*(-e.qty/e.plan_units) cost_loc + ,round(-sum(o.cost_usd ),2)*(-e.qty/e.plan_units) cost_usd ,o.calc_status ,o.flag ,o.order_date