pivot_forecast/readme.md

6.4 KiB

  • setup postgres db with a username and password and database
  • add this to .bashrc to quickly invoke command line connection export PGD="psql -U ptrowbridge -d ubm -p 5433 -h 192.168.1.110" setup

  • setup the application tables $PGD -f setup_sql/schema.sql
  • create a table of data to forecast
  • edit target_info.sql to reflect the name of the table from previous step
  • $PGD -f setup_sql/target_info.sql to populate the meta table
  • fill out the target_meta table in the database to model the forecast table
  • PGD -f setup_sql/build_maste_tables.sql to create master data tables from forecast data
  • ./routes/baseline/generate_route_sql.sh to create the baseline sql used by the /baseline route
schema tname cname opos func fkey fcol dtype appcol pretty
fc live fb_cst_loc 91 cost fb_cst_loc numeric
fc live ship_cust 36 scust scust ship_cust text
fc live rdate 98 rdate rdate drange date
fc live geo 42 scust geo text customer
fc live part 54 item item part text item
fc live odate 96 odate odate drange date order_date
fc live sdate 100 sdate sdate sdate date ship_date
fc live oseas 97 odate ssyr integer
fc live calc_status 94 order_status order_status calc_status text order_status
fc live rseas 99 rdate ssyr integer
fc live sseas 101 sdate ssyr integer
version
iter
logid
  • func: table name of associated data
  • fkey: primary key of assoicated dat
  • fcol: associated field from the master data table if it is different (oseas would refer to ssyr in fc.perd)
  • pretty: display column name (user friendly)
  • appcol: parameters that will have to be supplied but the application
    • order_date
    • ship_date
    • customer
    • item
    • order_stats
    • units
    • cost
    • value
    • version (added if missing)
    • iter (added if missing)
    • logid (added if missing)

routes

  • all routes would be tied to an underlying sql that builds the incremental rows
  • that piece of sql will have to be build based on the particular sales layout
    • columns: a function to build the columns for each route
    • where a function to build the where clause will be required for each route
    • the result of above will get piped into a master function that build the final sql
    • the master function will need to be called to build the sql statements into files of the project

route baseline

  • forecast = baseline (copied verbatim from actuals and increment the dates) + diffs. if orders are canceled this will show up as differ to baseline
  • regular updates to baseline may be required to keep up with canceled/altered orders
  • copy some period of actual sales and increment all the dates to serve as a baseline forecast
  • join to period tables to populate season; requires variance number oof table joins, based on howmany date functions there are 🙄
  • some of the app parameters can be consolidated, the baseline period could be one large range potentially, instead of 2 stacked periods
  • setup something to fill in sql parameters to do testing on the function
  • update node to handle forecast name parameter
  • calc status is hard-coded right now in the json request -> probably needs to be manuall supplied up front

scale

  • need to add version columns to all CTE's
  • need to build log insert
  • Need to build where clause for scenario

running problem list

  • baseline route
    • problem: how will the incremented order season get updated, adding an interval won't work
      • a table fc.odate, has been built, but it is incomplete, a setup function filling in these date-keyed tables could be setup
      • if a table is date-keyed, fc.perd could be targeted to fill in the gaps by mapping the associated column names
    • problem: the target sales data has to map have concepts like order_date, and the application needs to know which col is order date
      • add column called application hook
    • there is not currently any initial grouping to limit excess data from all the document# scenarios
  • general
    • clean up SQL generation to prevent injection
    • how to handle a target value adjustment, which currency is it in?
    • the sales data has to have a column for module and change ID, live sales data isn't going to work well
      • need to target the live sales data, build build a whole new table to use it plus add version columns