work on getting to right price

This commit is contained in:
Paul Trowbridge 2021-05-07 10:12:33 -04:00
parent 032736f0e9
commit b7eb94202c

View File

@ -77,6 +77,49 @@ incr AS (
('C','P','COLOR PRINTED','Color','P') ('C','P','COLOR PRINTED','Color','P')
) x(colgrp, brand, dataseg, tcol, tbrand) ) x(colgrp, brand, dataseg, tcol, tbrand)
) )
---customer dba assigned price levels---------
,dbap AS (
SELECT
dba
,jsonb_agg(DISTINCT plevel) plev
,jsonb_agg(DISTINCT plcd) plist
FROM
rlarp.cust c
INNER JOIN rlarp.sachdef sd ON
sd.plev = c.plevel
AND '2020-05-31' between sd.fdate AND sd.tdate
WHERE
pricing <> ''
AND dba <> ''
GROUP BY
dba
)
----customer dba price list pricing------
,plist AS (
SELECT
dbap.dba
,dbap.plev
,dbap.plist
,jcplcd
,jcpart
,jcunit
--,jcvoll
-----just use the lowest volume price for the part-----
,min(jcpric) jcpric
FROM
dbap
INNER JOIN lgdat.iprcc cc ON
dbap.plist ? cc.jcplcd
WHERE
jcunit = 'M'
GROUP BY
dbap.dba
,dbap.plev
,dbap.plist
,jcplcd
,jcpart
,jcunit
)
------------carve out pricing baseline data-------------------- ------------carve out pricing baseline data--------------------
,p AS ( ,p AS (
SELECT SELECT
@ -138,7 +181,7 @@ incr AS (
,o.shipgrp ,o.shipgrp
,o.odate DESC ,o.odate DESC
) )
--SELECT * FROM p WHERE account ~ 'AMERICAN HORT' and product = 'AZA06000.CBXX' and chgrp = 'W' order by rn ASC --SELECT * FROM p WHERE account ~ 'AMA P' and product = 'AMK06000.CBXX' order by rn ASC
------------build global py asp------------------ ------------build global py asp------------------
,baseline AS ( ,baseline AS (
SELECT SELECT
@ -147,6 +190,7 @@ incr AS (
,assc ,assc
,chgrp ,chgrp
,round(sum(val_usd) FILTER (WHERE oseas = 2020)/sum(units) FILTER (WHERE oseas = 2020),5) py_gasp ,round(sum(val_usd) FILTER (WHERE oseas = 2020)/sum(units) FILTER (WHERE oseas = 2020),5) py_gasp
,round(sum(val_usd) FILTER (WHERE oseas = 2021)/sum(units) FILTER (WHERE oseas = 2021),5) cy_gasp
FROM FROM
p p
GROUP BY GROUP BY
@ -155,6 +199,7 @@ incr AS (
,assc ,assc
,chgrp ,chgrp
) )
--SELECT * FROM baseline WHERE product = 'AMK06000.CBXX'
--SELECT --SELECT
-- p.product -- p.product
-- --,p.styc -- --,p.styc
@ -281,6 +326,7 @@ SELECT
,p.account ,p.account
,p.shipgrp ,p.shipgrp
,bl.py_gasp ,bl.py_gasp
,jsonb_agg(DISTINCT part) item
,sum(units) FILTER (WHERE oseas = 2020) py_units ,sum(units) FILTER (WHERE oseas = 2020) py_units
,sum(units) FILTER (WHERE oseas = 2021) cy_units ,sum(units) FILTER (WHERE oseas = 2021) cy_units
,round(sum(val_usd) FILTER (WHERE oseas = 2020)/sum(units) FILTER (WHERE oseas = 2020),5) py_asp ,round(sum(val_usd) FILTER (WHERE oseas = 2020)/sum(units) FILTER (WHERE oseas = 2020),5) py_asp
@ -299,6 +345,7 @@ SELECT
END END
END rate END rate
,ms.avg_price target ,ms.avg_price target
,JSONB_AGG(DISTINCT plist.jcpric/1000) jcpric
--,CASE WHEN sum(val_usd) FILTER (WHERE oseas = 2020) IS NULL --,CASE WHEN sum(val_usd) FILTER (WHERE oseas = 2020) IS NULL
-- THEN CASE WHEN sum(units) FILTER (WHERE oseas = 2021) IS NULL -- THEN CASE WHEN sum(units) FILTER (WHERE oseas = 2021) IS NULL
-- THEN 'unknown' -- THEN 'unknown'
@ -334,6 +381,9 @@ FROM
AND ms.data_segment = ds.dataseg AND ms.data_segment = ds.dataseg
AND ms.season = '2021' AND ms.season = '2021'
AND ms.region = 'ALL' AND ms.region = 'ALL'
LEFT OUTER JOIN plist ON
plist.dba = p.account
AND plist.jcpart = p.part
GROUP BY GROUP BY
p.productt p.productt
,p.product ,p.product
@ -371,9 +421,11 @@ GROUP BY
,pp.order_season ,pp.order_season
,pp.billto_group ,pp.billto_group
,pp.shipto_group ,pp.shipto_group
,pp.chgrp
,pp.fc_units ,pp.fc_units
,pp.fc_price ,pp.fc_price
,pp.iters ,pp.iters
--,p.item
,p.py_gasp ,p.py_gasp
,p.cy_units ,p.cy_units
,p.py_asp ,p.py_asp
@ -381,9 +433,18 @@ GROUP BY
,p.last_order ,p.last_order
,p.target ,p.target
,p.rate ,p.rate
,p.jcpric
--need to link in targets pricing and price list for cap purposes--------- --need to link in targets pricing and price list for cap purposes---------
--also need to link regional price lists so we don't blow past those------ --also need to link regional price lists so we don't blow past those------
,COALESCE(py_asp,py_gasp) * (1 + rate) fc_price ,least(
min(
COALESCE(p.py_asp,p.last_price),
COALESCE(py_gasp,target)
) * (1 + p.rate),
jcprice->>0
) fc_price
--last season price + % capped at list or py_gasp + %
--last price + % capped at list or pg_gasp + %
FROM FROM
poolprice pp poolprice pp
LEFT OUTER JOIN pivot p ON LEFT OUTER JOIN pivot p ON
@ -393,38 +454,7 @@ GROUP BY
AND pp.billto_group = p.account AND pp.billto_group = p.account
AND pp.shipto_group = p.shipgrp AND pp.shipto_group = p.shipgrp
) )
SELECT * FROM fcp limit 100 SELECT * FROM fcp limit 1000
----------------create the new price-----------------
--,adj AS (
--SELECT
-- p.product
-- ,p.styc
-- ,p.glec
-- ,p.majg
-- ,p.assc
-- ,p.coltier
-- ,p.sizc
-- ,p.suffix
-- ,p.account
-- ,p.shipgrp
-- ,p.py_gasp
-- ,p.cy_units
-- ,p.py_asp
-- ,p.last_price
-- ,p.last_order
-- ,p.rate
-- ,p.flag
-- ,CASE p.flag
-- ----------------------if repeat business then get to prior year + target %--------------------------------------------------------------
-- WHEN 'repeat' THEN greatest(py_asp * COALESCE(1+rate,1) - last_price,0)
-- WHEN 'lost' THEN greatest(py_asp * COALESCE(1+rate,1) - last_price,0)
-- ----------------------if new business, move towards py_gasp + target % : lesser of py gloabl + target or last + target------------------
-- WHEN 'new' THEN least(last_price * COALESCE(1+rate,1) - last_price,greatest(py_gasp * COALESCE(1+rate,1) - last_price,0))
-- END price_increment
--FROM
-- pivot p
--)
--SELECT * FROM adj LIMIT 1000
----------------create a log entry-------------------- ----------------create a log entry--------------------
--,log AS ( --,log AS (
-- INSERT INTO -- INSERT INTO
@ -437,150 +467,99 @@ SELECT * FROM fcp limit 100
-- }$$::jsonb doc -- }$$::jsonb doc
-- RETURNING * -- RETURNING *
--) --)
--,poolprice AS ( ---------------build the iteration rows----------------
--,ins AS (
--SELECT --SELECT
-- i.stlc||'.'||i.colgrp||substring(i.sizc,1,3) product -- o.fspr
-- ,o.quota_rep_descr -- ,o.plnt ---master data
-- ,o.billto_group -- ,o.promo --history date mix
-- ,o.terms
-- ,o.bill_cust_descr --history cust mix
-- ,o.ship_cust_descr --history cust mix
-- ,o.dsm
-- ,o.quota_rep_descr --master data
-- ,o.director
-- ,o.billto_group --master data
-- ,o.shipto_group -- ,o.shipto_group
-- ,order_season -- ,o.chan --master data
-- ,sum(units) units -- ,o.chansub
-- ,sum(value_loc) valloc -- ,o.chan_retail
-- ,sum(value_usd) valusd -- ,o.part
-- ,sum(o.value_loc)/sum(o.units) price -- ,o.part_descr
-- ,jsonb_agg(DISTINCT iter) iters -- ,o.part_group
-- ,o.branding
-- ,o.majg_descr
-- ,o.ming_descr
-- ,o.majs_descr
-- ,o.mins_descr
-- ,o.segm
-- ,o.substance
-- ,o.fs_line --master data
-- ,o.r_currency --history cust mix
-- ,o.r_rate --master data
-- ,o.c_currency --master data
-- ,o.c_rate --master data
-- ,0::numeric units
-- ,ROUND(o.units * (a.price_increment/o.r_rate),2) value_loc
-- ,ROUND(o.units * a.price_increment,2) value_usd
-- ,0::numeric cost_loc
-- ,0::numeric cost_usd
-- ,o.calc_status --0
-- ,o.flag --0
-- ,o.order_date --history date mix
-- ,o.order_month
-- ,o.order_season
-- ,o.request_date --history date mix
-- ,o.request_month
-- ,o.request_season
-- ,o.ship_date --history date mix
-- ,o.ship_month
-- ,o.ship_season
-- ,o.version
-- ---this iteration has to be listed in the master template file in order to be effectively included---
-- ,'upload price' iter
-- ,log.id
-- ,COALESCE(log.doc->>'tag','') "tag"
-- ,log.doc->>'message' "comment"
-- ,log.doc->>'type' module
-- -----------debug columns---------
-- --,value_usd/units price
-- --,a.py_gasp
-- --,a.rate
-- --,a.last_price
-- --,a.price_increment
--FROM --FROM
-- rlarp.osm_pool o -- rlarp.osm_pool o
-- ,rlarp.itemmv i -- ,rlarp.itemmv i
-- ,adj a
-- ,log
--WHERE --WHERE
-- i.item = o.part -- i.item = o.part
-- --AND o.units <> 0 -- AND a.product = i.stlc||'.'||i.colgrp||substring(i.sizc,1,3)
-- AND a.account = o.billto_group
-- AND a.shipgrp = o.shipto_group
-- AND a.price_increment <> 0
-- AND o.units <> 0
-- ---only apply to 2022 orders---- -- ---only apply to 2022 orders----
-- AND o.order_date >= '2021-06-01' -- AND o.order_date >= '2021-06-01'
-- --only include baseline stuff--- -- --only include baseline stuff---
-- AND segm <> 'Retail' -- AND iter <> 'upload price'
--GROUP BY
-- i.stlc||'.'||i.colgrp||substring(i.sizc,1,3)
-- ,o.quota_rep_descr
-- ,o.billto_group
-- ,o.shipto_group
-- ,order_season
-- --AND iter <> 'upload price'
--) --)
--, pooladj AS ( -------------aggregate the impact------------
-- SELECT ----SELECT * FROM ins limit 10000
-- p.product
-- ,p.quota_rep_descr
-- ,p.billto_group
-- ,p.shipto_group
-- ,p.price
-- ,a.py_gasp
-- ,a.rate
-- ,a.last_price
-- ,a.price_increment
-- FROM
-- poolprice p
-- ,adj a
-- WHERE
-- a.product = p.product
-- AND a.account = p.billto_group
-- AND a.shipgrp = p.shipto_group
--)
--SELECT * FROM pooladj WHERE product ~ 'STG06000' AND shipto_group = 'BWI' limit 100
----SELECT * FROM poolprice WHERE product ~ 'TCA06600' AND shipto_group = 'BWI' AND quota_rep_descr = 'BRYAN HILL' LIMIT 1000
---------------build the iteration rows----------------
----,ins AS (
----SELECT ----SELECT
---- o.fspr ---- order_season
---- ,o.plnt ---master data ---- ,sum(value_loc) val_loc
---- ,o.promo --history date mix ---- ,sum(value_usd) val_usd
---- ,o.terms
---- ,o.bill_cust_descr --history cust mix
---- ,o.ship_cust_descr --history cust mix
---- ,o.dsm
---- ,o.quota_rep_descr --master data
---- ,o.director
---- ,o.billto_group --master data
---- ,o.shipto_group
---- ,o.chan --master data
---- ,o.chansub
---- ,o.chan_retail
---- ,o.part
---- ,o.part_descr
---- ,o.part_group
---- ,o.branding
---- ,o.majg_descr
---- ,o.ming_descr
---- ,o.majs_descr
---- ,o.mins_descr
---- ,o.segm
---- ,o.substance
---- ,o.fs_line --master data
---- ,o.r_currency --history cust mix
---- ,o.r_rate --master data
---- ,o.c_currency --master data
---- ,o.c_rate --master data
---- ,0::numeric units
---- ,ROUND(o.units * (a.price_increment/o.r_rate),2) value_loc
---- ,ROUND(o.units * a.price_increment,2) value_usd
---- ,0::numeric cost_loc
---- ,0::numeric cost_usd
---- ,o.calc_status --0
---- ,o.flag --0
---- ,o.order_date --history date mix
---- ,o.order_month
---- ,o.order_season
---- ,o.request_date --history date mix
---- ,o.request_month
---- ,o.request_season
---- ,o.ship_date --history date mix
---- ,o.ship_month
---- ,o.ship_season
---- ,o.version
---- ---this iteration has to be listed in the master template file in order to be effectively included---
---- ,'upload price' iter
---- ,log.id
---- ,COALESCE(log.doc->>'tag','') "tag"
---- ,log.doc->>'message' "comment"
---- ,log.doc->>'type' module
---- -----------debug columns---------
---- --,value_usd/units price
---- --,a.py_gasp
---- --,a.rate
---- --,a.last_price
---- --,a.price_increment
----FROM ----FROM
---- rlarp.osm_pool o ---- ins
---- ,rlarp.itemmv i ----GROUP BY
---- ,adj a ---- order_season;
---- ,log --,del AS (
----WHERE -- DELETE FROM rlarp.osm_pool WHERE iter = 'upload price' RETURNING *
---- i.item = o.part --)
---- AND a.product = i.stlc||'.'||i.colgrp||substring(i.sizc,1,3) --INSERT INTO
---- AND a.account = o.billto_group -- rlarp.osm_pool
---- AND a.shipgrp = o.shipto_group --SELECT * FROM ins;
---- AND a.price_increment <> 0 --
---- AND o.units <> 0 --COMMIT;
---- ---only apply to 2022 orders----
---- AND o.order_date >= '2021-06-01'
---- --only include baseline stuff---
---- AND iter <> 'upload price'
----)
---------------aggregate the impact------------
------SELECT * FROM ins limit 10000
------SELECT
------ order_season
------ ,sum(value_loc) val_loc
------ ,sum(value_usd) val_usd
------FROM
------ ins
------GROUP BY
------ order_season;
----,del AS (
---- DELETE FROM rlarp.osm_pool WHERE iter = 'upload price' RETURNING *
----)
----INSERT INTO
---- rlarp.osm_pool
----SELECT * FROM ins;
----
----COMMIT;