raena_analytics_scripts/redshift/sql_code/Demand_forecasting.sql

993 lines
54 KiB
MySQL
Raw Permalink Normal View History

2024-06-24 12:26:08 +00:00
--------------------------Order Level Data --------------------------
Drop table if exists raena_analytics.Gm_final_table;
CREATE TABLE raena_analytics.Gm_final_table AS
SELECT A.external_id,
cast(transaction_date as date) transaction_date ,
A.order_discount_amount,
A.shipping_cost,
A.shipping_province,
A.coupon_code,
A.discount_type,
A.coupon_applied_on,
A.brand_name,
B.product_type,
A.category_name,
B.name sku_name,
A.reseller_name,
A.reseller_email,
A.reseller_mobile,
A.tier_name ,
A.reseller_id,
A.sku,
A.quantity,
A.retail_price,
A.seller_margin,
A.discounted_price,
A.additional_discount,
A.item_type ,
A.cogs
FROM raena_analytics.gm_dashboard A
LEFT JOIN raena_catalog_management.product B ON A.sku = B.sku;
Drop table if exists raena_analytics.final_order_level_data;
CREATE TABLE raena_analytics.final_order_level_data AS
SELECT A.*,
CURRENT_DATE,
date_part('Month',CURRENT_DATE) month_of_date,
date_part('Week',CURRENT_DATE) Week_of_date,
date_part('Day',CURRENT_DATE) Day_of_date,
retail_price*quantity AS revenue_on_retail,
(retail_price*quantity)-(seller_margin*quantity) AS revenue_on_wholesale,
(discounted_price*quantity) AS revenue_on_after_discount,
(cogs*quantity) AS total_cogs,
case when retail_price<>0 then cast(((cast(((retail_price*quantity)-(seller_margin*quantity)) AS decimal(22,2))-(cast(cogs*quantity AS decimal(22,2))))/cast(((retail_price*quantity)-(seller_margin*quantity)) AS decimal(22,2)))*100 AS decimal(22,2)) end pre_discount_gm,
case when discounted_price<>0 then cast(((cast((discounted_price*quantity) AS decimal(22,2))-(cast(cogs*quantity AS decimal(22,2))))/cast(((discounted_price*quantity)) AS decimal(22,2)))*100 AS decimal(22,2)) end post_discount_gm,
shipping_city,
shipping_pincode,
shipping_country_code,
order_warehouse
FROM raena_analytics.Gm_final_table A
LEFT JOIN
(SELECT id ,
shipping_city,
shipping_pincode,
shipping_country_code,
order_warehouse
FROM raena_order_management.order
WHERE cast(created_at AS date) >=dateadd(d,-120,'2024-06-23')) B ON external_id =id
WHERE discounted_price <>0 and cast(transaction_date AS date) between dateadd(d,-120,'2024-06-23') and '2024-06-23';
-------------------------------------------SKU Level Data ---------------------------------
DROP TABLE IF EXISTS raena_analytics.sku_warehouse_split_stage1;
CREATE TABLE raena_analytics.sku_warehouse_split_stage1 AS
SELECT sku ,
CASE
WHEN shipping_province IN ('Kalimantan Timur',
'Kalimantan Utara',
'Kalimantan Selatan',
'Kalimantan Tengah',
'Kalimantan Barat') THEN 'Balikpapan - Semarandi'
WHEN shipping_province IN ('DKI Jakarta',
'Banten',
'Jawa Barat') THEN 'Bekasi'
WHEN shipping_province IN ('Sulawesi Selatan',
'Sulawesi Tengah',
'Gorontalo',
'Papua',
'Maluku Utara',
'Sulawesi Utara',
'Maluku',
'Sulawesi Tenggara',
'Papua Barat',
'Sulawesi Barat') THEN 'Makassar'
WHEN shipping_province IN ('Sumatera Utara',
'Sumatera Selatan',
'Riau',
'Sumatera Barat',
'Lampung',
'Aceh',
'Bangka Belitung',
'Jambi',
'Nanggroe Aceh Darussalam (NAD)',
'Kepulauan Riau',
'Bengkulu') THEN 'Pekanbaru - Medan'
WHEN shipping_province IN ('Jawa Tengah',
'DI Yogyakarta') THEN 'Semarang'
WHEN shipping_province IN ('Jawa Timur',
'Bali',
'Nusa Tenggara Timur (NTT)',
'Nusa Tenggara Timur',
'Nusa Tenggara Barat',
'Nusa Tenggara Barat (NTB)') THEN 'Surabaya'
END warehouse,
CASE
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-6,'2024-06-23') AND '2024-06-23' THEN 'L7D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-13,'2024-06-23') AND dateadd(d,-7,'2024-06-23') THEN 'L14D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-20,'2024-06-23') AND dateadd(d,-14,'2024-06-23') THEN 'L21D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-27,'2024-06-23') AND dateadd(d,-21,'2024-06-23') THEN 'L28D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-34,'2024-06-23') AND dateadd(d,-28,'2024-06-23') THEN 'L35D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-41,'2024-06-23') AND dateadd(d,-35,'2024-06-23') THEN 'L42D'
END Bucket,
Total_revenue,
sum(revenue_on_after_discount) revenue_on_after_discount,
sum(revenue_on_after_discount)*100/Total_revenue AS contribution
FROM raena_analytics.final_order_level_data A
LEFT JOIN
(SELECT CASE
WHEN shipping_province IN ('Kalimantan Timur',
'Kalimantan Utara',
'Kalimantan Selatan',
'Kalimantan Tengah',
'Kalimantan Barat') THEN 'Balikpapan - Semarandi'
WHEN shipping_province IN ('DKI Jakarta',
'Banten',
'Jawa Barat') THEN 'Bekasi'
WHEN shipping_province IN ('Sulawesi Selatan',
'Sulawesi Tengah',
'Gorontalo',
'Papua',
'Maluku Utara',
'Sulawesi Utara',
'Maluku',
'Sulawesi Tenggara',
'Papua Barat',
'Sulawesi Barat') THEN 'Makassar'
WHEN shipping_province IN ('Sumatera Utara',
'Sumatera Selatan',
'Riau',
'Sumatera Barat',
'Lampung',
'Aceh',
'Bangka Belitung',
'Jambi',
'Nanggroe Aceh Darussalam (NAD)',
'Kepulauan Riau',
'Bengkulu') THEN 'Pekanbaru - Medan'
WHEN shipping_province IN ('Jawa Tengah',
'DI Yogyakarta') THEN 'Semarang'
WHEN shipping_province IN ('Jawa Timur',
'Bali',
'Nusa Tenggara Timur (NTT)',
'Nusa Tenggara Timur',
'Nusa Tenggara Barat',
'Nusa Tenggara Barat (NTB)') THEN 'Surabaya'
END warehouse,
CASE
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-6,'2024-06-23') AND '2024-06-23' THEN 'L7D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-13,'2024-06-23') AND dateadd(d,-7,'2024-06-23') THEN 'L14D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-20,'2024-06-23') AND dateadd(d,-14,'2024-06-23') THEN 'L21D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-27,'2024-06-23') AND dateadd(d,-21,'2024-06-23') THEN 'L28D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-34,'2024-06-23') AND dateadd(d,-28,'2024-06-23') THEN 'L35D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-41,'2024-06-23') AND dateadd(d,-35,'2024-06-23') THEN 'L42D'
END Bucket,
sum(coalesce (revenue_on_after_discount,0)) Total_revenue
FROM raena_analytics.final_order_level_data
WHERE cast(transaction_date as date) BETWEEN dateadd(d,-41,'2024-06-23') AND '2024-06-23'
GROUP BY CASE
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-6,'2024-06-23') AND '2024-06-23' THEN 'L7D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-13,'2024-06-23') AND dateadd(d,-7,'2024-06-23') THEN 'L14D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-20,'2024-06-23') AND dateadd(d,-14,'2024-06-23') THEN 'L21D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-27,'2024-06-23') AND dateadd(d,-21,'2024-06-23') THEN 'L28D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-34,'2024-06-23') AND dateadd(d,-28,'2024-06-23') THEN 'L35D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-41,'2024-06-23') AND dateadd(d,-35,'2024-06-23') THEN 'L42D'
END,
CASE
WHEN shipping_province IN ('Kalimantan Timur',
'Kalimantan Utara',
'Kalimantan Selatan',
'Kalimantan Tengah',
'Kalimantan Barat') THEN 'Balikpapan - Semarandi'
WHEN shipping_province IN ('DKI Jakarta',
'Banten',
'Jawa Barat') THEN 'Bekasi'
WHEN shipping_province IN ('Sulawesi Selatan',
'Sulawesi Tengah',
'Gorontalo',
'Papua',
'Maluku Utara',
'Sulawesi Utara',
'Maluku',
'Sulawesi Tenggara',
'Papua Barat',
'Sulawesi Barat') THEN 'Makassar'
WHEN shipping_province IN ('Sumatera Utara',
'Sumatera Selatan',
'Riau',
'Sumatera Barat',
'Lampung',
'Aceh',
'Bangka Belitung',
'Jambi',
'Nanggroe Aceh Darussalam (NAD)',
'Kepulauan Riau',
'Bengkulu') THEN 'Pekanbaru - Medan'
WHEN shipping_province IN ('Jawa Tengah',
'DI Yogyakarta') THEN 'Semarang'
WHEN shipping_province IN ('Jawa Timur',
'Bali',
'Nusa Tenggara Timur (NTT)',
'Nusa Tenggara Timur',
'Nusa Tenggara Barat',
'Nusa Tenggara Barat (NTB)') THEN 'Surabaya'
END) B ON CASE
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-6,'2024-06-23') AND '2024-06-23' THEN 'L7D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-13,'2024-06-23') AND dateadd(d,-7,'2024-06-23') THEN 'L14D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-20,'2024-06-23') AND dateadd(d,-14,'2024-06-23') THEN 'L21D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-27,'2024-06-23') AND dateadd(d,-21,'2024-06-23') THEN 'L28D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-34,'2024-06-23') AND dateadd(d,-28,'2024-06-23') THEN 'L35D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-41,'2024-06-23') AND dateadd(d,-35,'2024-06-23') THEN 'L42D'
END=B.bucket
AND CASE
WHEN shipping_province IN ('Kalimantan Timur',
'Kalimantan Utara',
'Kalimantan Selatan',
'Kalimantan Tengah',
'Kalimantan Barat') THEN 'Balikpapan - Semarandi'
WHEN shipping_province IN ('DKI Jakarta',
'Banten',
'Jawa Barat') THEN 'Bekasi'
WHEN shipping_province IN ('Sulawesi Selatan',
'Sulawesi Tengah',
'Gorontalo',
'Papua',
'Maluku Utara',
'Sulawesi Utara',
'Maluku',
'Sulawesi Tenggara',
'Papua Barat',
'Sulawesi Barat') THEN 'Makassar'
WHEN shipping_province IN ('Sumatera Utara',
'Sumatera Selatan',
'Riau',
'Sumatera Barat',
'Lampung',
'Aceh',
'Bangka Belitung',
'Jambi',
'Nanggroe Aceh Darussalam (NAD)',
'Kepulauan Riau',
'Bengkulu') THEN 'Pekanbaru - Medan'
WHEN shipping_province IN ('Jawa Tengah',
'DI Yogyakarta') THEN 'Semarang'
WHEN shipping_province IN ('Jawa Timur',
'Bali',
'Nusa Tenggara Timur (NTT)',
'Nusa Tenggara Timur',
'Nusa Tenggara Barat',
'Nusa Tenggara Barat (NTB)') THEN 'Surabaya'
END=warehouse
WHERE cast(transaction_date as date) BETWEEN dateadd(d,-41,'2024-06-23') AND '2024-06-23'
GROUP BY sku ,
CASE
WHEN shipping_province IN ('Kalimantan Timur',
'Kalimantan Utara',
'Kalimantan Selatan',
'Kalimantan Tengah',
'Kalimantan Barat') THEN 'Balikpapan - Semarandi'
WHEN shipping_province IN ('DKI Jakarta',
'Banten',
'Jawa Barat') THEN 'Bekasi'
WHEN shipping_province IN ('Sulawesi Selatan',
'Sulawesi Tengah',
'Gorontalo',
'Papua',
'Maluku Utara',
'Sulawesi Utara',
'Maluku',
'Sulawesi Tenggara',
'Papua Barat',
'Sulawesi Barat') THEN 'Makassar'
WHEN shipping_province IN ('Sumatera Utara',
'Sumatera Selatan',
'Riau',
'Sumatera Barat',
'Lampung',
'Aceh',
'Bangka Belitung',
'Jambi',
'Nanggroe Aceh Darussalam (NAD)',
'Kepulauan Riau',
'Bengkulu') THEN 'Pekanbaru - Medan'
WHEN shipping_province IN ('Jawa Tengah',
'DI Yogyakarta') THEN 'Semarang'
WHEN shipping_province IN ('Jawa Timur',
'Bali',
'Nusa Tenggara Timur (NTT)',
'Nusa Tenggara Timur',
'Nusa Tenggara Barat',
'Nusa Tenggara Barat (NTB)') THEN 'Surabaya'
END,
CASE
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-6,'2024-06-23') AND '2024-06-23' THEN 'L7D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-13,'2024-06-23') AND dateadd(d,-7,'2024-06-23') THEN 'L14D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-20,'2024-06-23') AND dateadd(d,-14,'2024-06-23') THEN 'L21D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-27,'2024-06-23') AND dateadd(d,-21,'2024-06-23') THEN 'L28D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-34,'2024-06-23') AND dateadd(d,-28,'2024-06-23') THEN 'L35D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-41,'2024-06-23') AND dateadd(d,-35,'2024-06-23') THEN 'L42D'
END ,
Total_revenue;
DROP TABLE IF EXISTS raena_analytics.sku_warehouse_split_stage2;
CREATE TABLE raena_analytics.sku_warehouse_split_stage2 AS
SELECT sku ,
warehouse ,
sum(CASE WHEN bucket = 'L7D' THEN contribution END) L7D_sku_contribution,
sum(CASE WHEN bucket = 'L14D' THEN contribution END) L14D_sku_contribution,
sum(CASE WHEN bucket = 'L21D' THEN contribution END) L21D_sku_contribution,
sum(CASE WHEN bucket = 'L28D' THEN contribution END) L28D_sku_contribution,
sum(CASE WHEN bucket = 'L35D' THEN contribution END) L35D_sku_contribution,
sum(CASE WHEN bucket = 'L42D' THEN contribution END) L42D_sku_contribution,
percentile_cont(0.5) within
GROUP (
ORDER BY contribution) median_contribution,
percentile_cont(0.95) within
GROUP (
ORDER BY contribution) Percentile95_contribution,
coalesce(stddev_samp(contribution),sum(contribution)) sd_contribution
FROM raena_analytics.sku_warehouse_split_stage1
WHERE warehouse IS NOT NULL
GROUP BY sku,
warehouse ;
DROP TABLE IF EXISTS raena_analytics.sku_warehouse_split_stage3;
CREATE TABLE raena_analytics.sku_warehouse_split_stage3 AS
SELECT * , (CASE
WHEN sd_contribution <= 0.1 THEN median_contribution
ELSE Percentile95_contribution
END)sku_qty_split_next_order
FROM raena_analytics.sku_warehouse_split_stage2;
DROP TABLE IF EXISTS raena_analytics.sku_warehouse_split_final;
CREATE TABLE raena_analytics.sku_warehouse_split_final AS
SELECT sku,
warehouse,
l7d_sku_contribution,
L14D_sku_contribution,
L21D_sku_contribution,
L28D_sku_contribution,
L35D_sku_contribution,
L42D_sku_contribution,
median_contribution,
Percentile95_contribution,
sd_contribution,
case when sum(sku_qty_split_next_order)over(partition BY sku)= 0 then 0 else sku_qty_split_next_order*100/sum(sku_qty_split_next_order)over(partition BY sku) end sku_qty_split_next_order_percentage
FROM raena_analytics.sku_warehouse_split_stage3;
--------------------------------------Warehouse SKu Split----------------------------------
select count(1)sku_final_split_warehouse from raena_analytics.sku_warehouse_split_final;
DROP TABLE IF EXISTS raena_analytics.sku_level_data ;
CREATE TABLE raena_analytics.sku_level_data AS
SELECT A.sku,
A.name sku_name,
A.is_private,
A.country,
CASE
WHEN A.is_archived = 'true' THEN 'Permanatly_delisted'
WHEN A.is_delisted = 'true' THEN 'delisted'
WHEN A.is_archived = 'false'
AND A.is_delisted = 'false' THEN 'Active'
END active_status,
A.created_at,
B.storage_location storage_type,
A.origin sourcing,
case when C.business_type like '%Consignment%' then 'Consignment' else 'Outright' end ordering_type ,
D.name brand_name ,
A.product_type ,
E.name category_name,
F.cogs ,
CASE
WHEN A.origin= 'Local' THEN coalesce(G.bekasi_buffer_time,2)
WHEN A.origin = 'Crossborder' THEN 15
END Bekasi_buffer_lead_time,
CASE
WHEN A.origin= 'Local' THEN coalesce(G.bekasi_lead_time,5)
WHEN A.origin = 'Crossborder' THEN 50
END bekasi_lead_time,
CASE
WHEN A.origin= 'Local' THEN (coalesce(G.bekasi_lead_time,5)+coalesce(G.bekasi_buffer_time,2))
WHEN A.origin = 'Crossborder' THEN 65
END bekasi_total_lead_time,
CASE
WHEN origin= 'Local' THEN 45
WHEN origin = 'Crossborder' THEN 30
END bekasi_inventory_days,
CASE
WHEN origin= 'Local' THEN coalesce(G.semarinda_buffer_time,2)
WHEN origin = 'Crossborder' THEN 15
END Balikpapan_Semarandi_buffer_lead_time,
CASE
WHEN origin= 'Local' THEN coalesce(G.semarinda_lead_time,12)
WHEN origin = 'Crossborder' THEN 50
END Balikpapan_Semarandi_lead_time,
CASE
WHEN origin= 'Local' THEN (coalesce(G.semarinda_lead_time,12)+coalesce(G.semarinda_buffer_time,2))
WHEN origin = 'Crossborder' THEN 65
END Balikpapan_Semarandi_total_lead_time,
CASE
WHEN origin= 'Local' THEN 30
WHEN origin = 'Crossborder' THEN 30
END Balikpapan_Semarandi_inventory_days,
CASE
WHEN origin= 'Local' THEN coalesce(G.pekanbaru_buffer_time,2)
WHEN origin = 'Crossborder' THEN 15
END Pekanbaru_Medan_buffer_lead_time,
CASE
WHEN origin= 'Local' THEN coalesce(G.pekanbaru_lead_time,12)
WHEN origin = 'Crossborder' THEN 50
END Pekanbaru_Medan_lead_time,
CASE
WHEN origin= 'Local' THEN (coalesce(G.pekanbaru_lead_time,12)+coalesce(G.pekanbaru_buffer_time,2))
WHEN origin = 'Crossborder' THEN 65
END Pekanbaru_Medan_total_lead_time,
CASE
WHEN origin= 'Local' THEN 30
WHEN origin = 'Crossborder' THEN 30
END Pekanbaru_Medan_inventory_days,
CASE
WHEN origin= 'Local' THEN coalesce(semarang_buffer_time,2)
WHEN origin = 'Crossborder' THEN 15
END Semarang_buffer_lead_time,
CASE
WHEN origin= 'Local' THEN coalesce(semarang_lead_time,7)
WHEN origin = 'Crossborder' THEN 50
END Semarang_lead_time,
CASE
WHEN origin= 'Local' THEN ( coalesce(semarang_lead_time,7)+coalesce(semarang_buffer_time,2))
WHEN origin = 'Crossborder' THEN 65
END Semarang_total_lead_time,
CASE
WHEN origin= 'Local' THEN 30
WHEN origin = 'Crossborder' THEN 30
END Semarang_inventory_days,
CASE
WHEN origin= 'Local' THEN coalesce(surabaya_buffer_time,2)
WHEN origin = 'Crossborder' THEN 15
END Surabaya_buffer_lead_time,
CASE
WHEN origin= 'Local' THEN coalesce(surabaya_lead_time,7)
WHEN origin = 'Crossborder' THEN 50
END Surabaya_lead_time,
CASE
WHEN origin= 'Local' THEN coalesce(surabaya_lead_time,7)+coalesce(surabaya_buffer_time,2)
WHEN origin = 'Crossborder' THEN 65
END Surabaya_total_lead_time,
CASE
WHEN origin= 'Local' THEN 30
WHEN origin = 'Crossborder' THEN 30
END Surabaya_inventory_days,
CASE
WHEN origin= 'Local' THEN coalesce(makassar_buffer_time,2)
WHEN origin = 'Crossborder' THEN 15
END Makassar_buffer_lead_time,
CASE
WHEN origin= 'Local' THEN coalesce(makassar_lead_time,12)
WHEN origin = 'Crossborder' THEN 50
END Makassar_lead_time,
CASE
WHEN origin= 'Local' THEN (coalesce(makassar_lead_time,12)+coalesce(makassar_buffer_time,2))
WHEN origin = 'Crossborder' THEN 65
END Makassar_total_lead_time,
CASE
WHEN origin= 'Local' THEN 30
WHEN origin = 'Crossborder' THEN 30
END Makassar_inventory_days,
multiple_flag,
G.moq,
moqremark,
case when moqremark = 'NOT ORDER GIVE AWAY ITEM' then 'Yes' else 'No' end give_away
FROM raena_catalog_management.product A
LEFT JOIN raena_analytics.storage_data B ON A.sku=B.sku
left join raena_analytics.demand_forecasting_configs G on A.sku= G.sku
LEFT JOIN raena_analytics.outright_consignment C ON A.sku = C.sku
LEFT JOIN raena_catalog_management.brand D ON A.brand_id = D.id
LEFT JOIN raena_catalog_management.category E ON A.category_id =E.id
LEFT JOIN (select distinct sku sku_code ,cogs_non_promo cogs from raena_analytics.sku_cogs_audit sca where sku_cogs_action='CREATED') F ON A.sku= F.sku_code ;
---------------------------_basic Calculation -------------------------
DROP TABLE IF EXISTS raena_analytics.basic_calculation;
CREATE TABLE raena_analytics.basic_calculation AS
SELECT sku ,
CASE
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-30,'2024-06-23') AND '2024-06-23' THEN 'L30D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-60,'2024-06-23') AND dateadd(d,-31,'2024-06-23') THEN 'L60D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-90,'2024-06-23') AND dateadd(d,-61,'2024-06-23') THEN 'L90D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-120,'2024-06-23') AND dateadd(d,-91,'2024-06-23') THEN 'L120D'
END txn_period,
sum(revenue_on_after_discount) revenue,
Total_revenue,
sum(revenue_on_after_discount)*100/Total_revenue AS contribution,
sum(quantity) quantity,
count(DISTINCT transaction_date) days,
cast(cast(sum(quantity) as FLOAT)/cast(count(DISTINCT cast(transaction_date as date) ) as FLOAT) as FLOAT) runrate
FROM raena_analytics.final_order_level_data A
LEFT JOIN
(SELECT CASE
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-30,'2024-06-23') AND '2024-06-23' THEN 'L30D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-60,'2024-06-23') AND dateadd(d,-31,'2024-06-23') THEN 'L60D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-90,'2024-06-23') AND dateadd(d,-61,'2024-06-23') THEN 'L90D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-120,'2024-06-23') AND dateadd(d,-91,'2024-06-23') THEN 'L120D'
END txn_period,
sum(coalesce (revenue_on_after_discount,0)) Total_revenue
FROM raena_analytics.final_order_level_data
WHERE cast(transaction_date as date) BETWEEN dateadd(d,-120,'2024-06-23') AND '2024-06-23'
GROUP BY CASE
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-30,'2024-06-23') AND '2024-06-23' THEN 'L30D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-60,'2024-06-23') AND dateadd(d,-31,'2024-06-23') THEN 'L60D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-90,'2024-06-23') AND dateadd(d,-61,'2024-06-23') THEN 'L90D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-120,'2024-06-23') AND dateadd(d,-91,'2024-06-23') THEN 'L120D'
END) B ON (CASE
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-30,'2024-06-23') AND '2024-06-23' THEN 'L30D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-60,'2024-06-23') AND dateadd(d,-31,'2024-06-23') THEN 'L60D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-90,'2024-06-23') AND dateadd(d,-61,'2024-06-23') THEN 'L90D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-120,'2024-06-23') AND dateadd(d,-91,'2024-06-23') THEN 'L120D'
END)=B.txn_period
WHERE cast(transaction_date as date) BETWEEN dateadd(d,-120,'2024-06-23') AND '2024-06-23'
GROUP BY sku,
CASE
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-30,'2024-06-23') AND '2024-06-23' THEN 'L30D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-60,'2024-06-23') AND dateadd(d,-31,'2024-06-23') THEN 'L60D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-90,'2024-06-23') AND dateadd(d,-61,'2024-06-23') THEN 'L90D'
WHEN cast(transaction_date as date) BETWEEN dateadd(d,-120,'2024-06-23') AND dateadd(d,-91,'2024-06-23') THEN 'L120D'
END,
Total_revenue;
select 1;
DROP TABLE IF EXISTS raena_analytics.basic_calculation_stage1;
CREATE TABLE raena_analytics.basic_calculation_stage1 AS
SELECT A.sku ,
gold_price ,
CASE
WHEN L120D_revenue = 0
AND L90D_revenue = 0
AND L60D_revenue = 0 THEN 0
ELSE ((CASE WHEN L120D_revenue = 0 THEN 0 ELSE ((L90D_revenue -L120D_revenue)*100/L120D_revenue) END)
+ (CASE WHEN L90D_revenue= 0 THEN 0 ELSE ((L60D_revenue -L90D_revenue)*100/L90D_revenue) END)
+(CASE WHEN L60D_revenue = 0 THEN 0 ELSE ((L30D_revenue -L60D_revenue)*100/L60D_revenue)END)) / (CASE
WHEN L120D_revenue = 0 THEN 0
ELSE 1
END + CASE
WHEN L90D_revenue = 0 THEN 0
ELSE 1
END+CASE
WHEN L60D_revenue = 0 THEN 0
ELSE 1
END)
END AVG_revenue_growth
FROM
(SELECT sku ,
SUM(CASE WHEN txn_period ='L120D' THEN coalesce(revenue,0) ELSE 0 END) L120D_revenue,
SUM(CASE WHEN txn_period ='L90D' THEN coalesce(revenue,0) ELSE 0 END) L90D_revenue,
sum(CASE WHEN txn_period ='L60D' THEN coalesce(revenue,0) ELSE 0 END) L60D_revenue,
sum(CASE WHEN txn_period ='L30D' THEN coalesce(revenue,0) ELSE 0 END) L30D_revenue
FROM raena_analytics.basic_calculation
GROUP BY sku) A
LEFT JOIN
(SELECT sku ,
json_extract_path_text(tier_price,'bf645e97-8a48-4977-8367-e987489760f9',TRUE) gold_price
FROM raena_catalog_management.product p) B ON A.sku = B.sku;
Drop table if exists raena_analytics.basic_calculation_stage1_v1;
create table raena_analytics.basic_calculation_stage1_v1 as
select A.*,
abs(contribution-median_contribution) for_max_contribution
from raena_analytics.basic_calculation A
left join (select sku ,
MEDIAN(contribution) median_contribution
from raena_analytics.basic_calculation group by sku ) B
on A.sku = B.sku ;
DROP TABLE IF EXISTS raena_analytics.basic_calculation_stage2;
CREATE TABLE raena_analytics.basic_calculation_stage2 AS
SELECT A.SKu ,
gold_price,
sum(CASE WHEN txn_period ='L30D' THEN coalesce(revenue,0) ELSE 0 END) L30D_revenue ,
B.AVG_revenue_growth ,
10 AS avg_expected_revenue_growth,
sum(CASE WHEN txn_period ='L30D' THEN coalesce(revenue,0) ELSE 0 END)*(1.10) expected_30D_revenue,
MEDIAN(contribution) median_of_contribution,
coalesce(stddev_samp(contribution),sum(contribution)) sd_of_contribution,
max(contribution) max_contribution ,
max(for_max_contribution) for_max_contribution,
avg(quantity) avg_quantity,
max(quantity) max_quantity,
case when L90D_revenue= 0 and L60D_revenue= 0 and L30D_revenue >0 then 'Yes' else 'No' end New_sku
FROM raena_analytics.basic_calculation_stage1_v1 A
LEFT JOIN raena_analytics.basic_calculation_stage1 B ON A.sku=B.sku
left join (select sku ,
coalesce(sum(case when txn_period ='L30D' then coalesce(revenue,0) end),0) as l30D_revenue,
coalesce(sum(case when txn_period ='L60D' then coalesce(revenue,0) end),0) as l60D_revenue,
coalesce(sum(case when txn_period ='L90D' then coalesce(revenue,0) end),0) as l90D_revenue
from raena_analytics.basic_calculation_stage1_v1
where txn_period <> 'L120D'
group by sku) C On A.sku = C.sku
WHERE txn_period <> 'L120D'
GROUP BY A.SKu,
B.AVG_revenue_growth,
gold_price,
case when L90D_revenue= 0 and L60D_revenue= 0 and L30D_revenue >0 then 'Yes' else 'No' end;
--SELECT *FROM raena_analytics.basic_calculation_stage2
DROP TABLE IF EXISTS raena_analytics.basic_calculation_stage3;
/*
CREATE TABLE raena_analytics.basic_calculation_stage3 AS
SELECT A.SKu,
percentile_cont(0.5) within
GROUP (
ORDER BY runrate) median_runrate,
max(runrate) max_runrate,
sum(CASE WHEN txn_period ='L30D' THEN quantity/days END)last_month_runrate,
CASE
WHEN --max(contribution)>0.02 or
txn_period ='L30D' and max(runrate)>= 30 THEN 'Fast Moving'
WHEN --max(contribution)>0.01 or
txn_period ='L30D' and max(runrate) between 5 and 29 THEN 'Slow Moving'
WHEN --max(contribution)<=0.01 or
txn_period ='L30D' and max(runrate)<5 THEN 'Not Moving'
END sku_type
FROM raena_analytics.basic_calculation A
WHERE txn_period <> 'L120D'
GROUP BY A.SKu,txn_period;
*/
CREATE TABLE raena_analytics.basic_calculation_stage3 AS
SELECT A.SKu,
percentile_cont(0.5) within
GROUP (
ORDER BY A.runrate) median_runrate,
max(A.runrate) max_runrate,
sum(CASE WHEN txn_period ='L30D' THEN quantity/days END)last_month_runrate,
CASE
WHEN --max(contribution)>0.02 or
max(B.runrate)> 30 THEN 'Fast Moving'
WHEN --max(contribution)>0.01 or
max(B.runrate)>= 5 THEN 'Slow Moving'
WHEN --max(contribution)<=0.01 or
max(B.runrate)<5 or max(B.runrate) is null THEN 'Not Moving'
END sku_type
FROM raena_analytics.basic_calculation A
left join (select distinct sku , runrate from raena_analytics.basic_calculation where txn_period = 'L30D' ) B on A.sku = B.sku
WHERE txn_period <> 'L120D'
GROUP BY A.SKu;
DROP TABLE IF EXISTS raena_analytics.basic_calculation_stage4;
CREATE TABLE raena_analytics.basic_calculation_stage4 AS
SELECT A.* ,
CASE
WHEN sd_of_contribution= 0 THEN 0
ELSE (A.for_max_contribution)/sd_of_contribution
END AS max_deviation_contribution,
B.median_runrate,
B.max_runrate,
coalesce(B.last_month_runrate,0)last_month_runrate ,
B.sku_type,
(l30d_revenue/gold_price)*(1+(avg_revenue_growth/100)) AS qty1_median_rev_contribution,
median_runrate*30 qty2_avg_runrate,
avg_quantity qty3_avg_quantity,
expected_30D_revenue/gold_price qty4_expected_revenue_target,
0 buffer
FROM raena_analytics.basic_calculation_stage2 A
LEFT JOIN raena_analytics.basic_calculation_stage3 B ON A.sku = B.sku;
--SELECT * FROM raena_analytics.basic_calculation_stage4;
--select * from raena_analytics.basic_calculation_stage5
drop table if exists raena_analytics.basic_calculation_stage5;
CREATE TABLE raena_analytics.basic_calculation_stage5
as
select sku , MEDIAN(Max_of_qty) Max_of_qty , Avg(Max_of_qty) Avg_of_quantiy
from
(SELECT sku ,
qty1_median_rev_contribution Max_of_qty
FROM raena_analytics.basic_calculation_stage4
UNION ALL
SELECT sku ,
qty2_avg_runrate
FROM raena_analytics.basic_calculation_stage4
UNION ALL
SELECT sku ,
qty3_avg_quantity
FROM raena_analytics.basic_calculation_stage4
UNION ALL
SELECT sku ,
qty4_expected_revenue_target
FROM raena_analytics.basic_calculation_stage4) A
group by sku;
drop table if exists raena_analytics.basic_calculation_stage6;
create table raena_analytics.basic_calculation_stage6
as
select sku,
sum(CASE WHEN B.warehouse ='Balikpapan - Semarandi' THEN sku_qty_split_next_order_percentage/100 END) balikpapan_semarandi_split,
sum(CASE WHEN B.warehouse ='Bekasi' THEN sku_qty_split_next_order_percentage/100 END) Bekasi_split,
sum(CASE WHEN B.warehouse ='Makassar' THEN sku_qty_split_next_order_percentage/100 END) Makassar_split,
sum(CASE WHEN B.warehouse ='Pekanbaru - Medan' THEN sku_qty_split_next_order_percentage/100 END) pekanbaru_medan_split,
sum(CASE WHEN B.warehouse ='Semarang' THEN sku_qty_split_next_order_percentage/100 END) Semarang_split,
sum(CASE WHEN B.warehouse ='Surabaya' THEN sku_qty_split_next_order_percentage/100 END) Surabaya_split
from raena_analytics.sku_warehouse_split_final B
group by sku;
drop table if exists raena_analytics.final_basic_calucation_table;
CREATE TABLE raena_analytics.final_basic_calucation_table AS
SELECT A.sku ,
A.gold_price ,
A.l30d_revenue ,
A.avg_revenue_growth,
A.avg_expected_revenue_growth ,
A.expected_30D_revenue,
A.median_of_contribution median_of_contribution_l90D,
A.sd_of_contribution standard_deviation_of_contribution_l90d,
A.max_deviation_contribution max_standard_deviation_of_contribution_l90d,
A.avg_quantity avg_quantity_sold_l90d,
A.max_quantity max_quantity_sold_l90d,
A.median_runrate median_runrate_l90d,
A.max_runrate max_runrate_l90d,
A.last_month_runrate l30d_runrate,
A.sku_type ,
A.new_sku as new_sku_flag,
A.qty1_median_rev_contribution ,
A.qty2_avg_runrate ,
A.qty3_avg_quantity ,
qty4_expected_revenue_target,
buffer ,
(case when sku_type= 'Fast Moving' then ((Max_of_qty*(1+buffer))/30)
when sku_type = 'Slow Moving' then ((Avg_of_quantiy*(1+buffer))/30)
when sku_type = 'Not Moving' then 0 end) overall_qty_required_per_day,
(case when sku_type= 'Fast Moving' then ((Max_of_qty*(1+buffer))/30)
when sku_type = 'Slow Moving' then ((Avg_of_quantiy*(1+buffer))/30)
when sku_type = 'Not Moving' then 0 end )*balikpapan_semarandi_split balikpapan_semarandi_split,
(case when sku_type= 'Fast Moving' then ((Max_of_qty*(1+buffer))/30)
when sku_type = 'Slow Moving' then ((Avg_of_quantiy*(1+buffer))/30)
when sku_type = 'Not Moving' then 0 end)*Bekasi_split Bekasi_split,
(case when sku_type= 'Fast Moving' then ((Max_of_qty*(1+buffer))/30)
when sku_type = 'Slow Moving' then ((Avg_of_quantiy*(1+buffer))/30)
when sku_type = 'Not Moving' then 0 end )*Makassar_split Makassar_split,
(case when sku_type= 'Fast Moving' then ((Max_of_qty*(1+buffer))/30)
when sku_type = 'Slow Moving' then ((Avg_of_quantiy*(1+buffer))/30)
when sku_type = 'Not Moving' then 0 end )*pekanbaru_medan_split pekanbaru_medan_split,
(case when sku_type= 'Fast Moving' then ((Max_of_qty*(1+buffer))/30)
when sku_type = 'Slow Moving' then ((Avg_of_quantiy*(1+buffer))/30)
when sku_type = 'Not Moving' then 0 end )*Semarang_split Semarang_split,
(case when sku_type= 'Fast Moving' then ((Max_of_qty*(1+buffer))/30)
when sku_type = 'Slow Moving' then ((Avg_of_quantiy*(1+buffer))/30)
when sku_type = 'Not Moving' then 0 end )*Surabaya_split Surabaya_split
FROM raena_analytics.basic_calculation_stage4 A
LEFT JOIN raena_analytics.basic_calculation_stage6 B ON A.sku =B.sku
LEFT join raena_analytics.basic_calculation_stage5 C on A.sku=C.sku;
drop table if exists raena_analytics.inbound_data;
create table raena_analytics.inbound_data
as
select raena_code sku,
sum(case when warehouse_id = 'CGK WHS' then COALESCE(quantity,0) end) Cikarang_quantity ,
sum(case when warehouse_id = 'Makassar WHS' then COALESCE(quantity,0) end) Makassar_quantity ,
sum(case when warehouse_id = 'Medan WHS' then COALESCE(quantity,0) end) medan_quantity,
sum(case when warehouse_id = 'Samarinda WHS' then COALESCE(quantity,0) end) Samarinda_quantity ,
sum(case when warehouse_id = 'Semarang WHS' then COALESCE(quantity,0) end) semarang_quantity ,
sum(case when warehouse_id = 'Surabaya WHS' then COALESCE(quantity,0) end) Surabaya_quantity
from (select * from raena_erp_management.inbound_order where cast(expected_arrival_date as date) >'2024-06-23' and received_time is null ) A
left join raena_erp_management.inbound_order_sku B on A.id = B."orderIdId"
group by raena_code;
drop table if exists raena_analytics.warehouse_in_stock;
create table raena_analytics.warehouse_in_stock
as
select sku ,
sum(case when F.warehouse_code = 'WH-CGK45' then coalesce(F.stock_limit,0) end) Cikarang_in_stock,
sum(case when F.warehouse_code = 'WH-SUB51' then coalesce(F.stock_limit,0) end) Surabaya_in_stock,
sum(case when F.warehouse_code = 'WH-SRG18' then coalesce(F.stock_limit,0) end) Semarang_in_stock,
sum(case when F.warehouse_code = 'WH-MES07' then coalesce(F.stock_limit,0) end) Medan_in_stock,
sum(case when F.warehouse_code = 'WH-UPG04' then coalesce(F.stock_limit,0) end) Makassar_in_stock,
sum(case when F.warehouse_code = 'WH-AAP02' then coalesce(F.stock_limit,0) end) Samarinda_in_stock
from
raena_catalog_management.product C
left join raena_catalog_management.product_inventory F on C.id = F.product_id
group by sku;
DROP TABLE IF EXISTS raena_analytics.demand_forecast_dashboard_base;
CREATE TABLE raena_analytics.demand_forecast_dashboard_base AS
SELECT DISTINCT A.sku ,
A.brand_name ,
case when B.sku_type is not null then B.sku_type else 'Not Moving' end sku_type ,
case when new_sku_flag is not null then new_sku_flag else 'No' end new_sku_flag,
A.sourcing,
A.ordering_type ,
A.active_status,
multiple_flag,
moq,
moqremark,
give_away,
--cast(case when sourcing = 'Local' THEN 14*overall_qty_required_per_day
-- WHEN sourcing = 'Crossborder' THEN 30*overall_qty_required_per_day end as int) overall_qty_required_per_day,
cast(Cikarang_in_stock as int) Cikarang_in_stock,
cast(coalesce(E.Cikarang_quantity,0) as int) Cikarang_quantity_in_transit,
cast((Cikarang_in_stock+ coalesce(E.Cikarang_quantity,0)) as int) total_Cikarang_stock,
cast(l30d_runrate as int) Cikarang_runrate,
cast(CASE
WHEN l30d_runrate = 0 THEN 0 else((Cikarang_in_stock+ coalesce(E.Cikarang_quantity,0))*(1.1)/l30d_runrate)
END as int) Cikarang_Inventory_day_for_future,
cast(bekasi_total_lead_time as int) cikarang_total_lead_time ,
CASE
WHEN CASE
WHEN l30d_runrate = 0 THEN 0 else((Cikarang_in_stock+ coalesce(E.Cikarang_quantity,0))*(1.1)/l30d_runrate)
END<bekasi_total_lead_time THEN 'True'
ELSE 'False'
END cikarang_reorder_flag,
(cast(Bekasi_split*bekasi_inventory_days as int)-case when moq is not null and multiple_flag is not null then mod(cast(Bekasi_split*bekasi_inventory_days as int),cast(moq as int)) else 0 end ) cikarang_project_quantity_to_order,
cast(Surabaya_in_stock as int) Surabaya_in_stock,
cast(coalesce(E.Surabaya_quantity,0) as int) Surabaya_quantity_in_transit,
cast((Surabaya_in_stock+coalesce(E.Surabaya_quantity,0)) as int) total_Surabaya_stock,
cast(l30d_runrate as int) Surabaya_runrate,
cast(CASE
WHEN l30d_runrate = 0 THEN 0 else((Surabaya_in_stock+coalesce(E.Surabaya_quantity,0))*(1.1)/l30d_runrate)
END as int) Surabaya_Inventory_day_for_future,
cast(Surabaya_total_lead_time as int) Surabaya_total_lead_time,
CASE
WHEN CASE
WHEN l30d_runrate = 0 THEN 0 else((Surabaya_in_stock+coalesce(E.Surabaya_quantity,0))*(1.1)/l30d_runrate)
END<Surabaya_total_lead_time THEN 'True'
ELSE 'False'
END surabaya_reorder_flag,
(cast(Surabaya_split*Surabaya_inventory_days as int)-case when moq is not null and multiple_flag is not null then mod(cast(Surabaya_split*Surabaya_inventory_days as int),cast(moq as int)) else 0 end ) Surabaya_project_quantity_to_order,
cast(Semarang_in_stock as int) Semarang_in_stock,
cast(coalesce(E.semarang_quantity,0) as int) semarang_quantity_in_transit,
cast(Semarang_in_stock+coalesce(E.semarang_quantity,0) as int) total_semarang_stock,
cast(l30d_runrate as int) Semarang_runrate,
cast(CASE
WHEN l30d_runrate = 0 THEN 0 else((Semarang_in_stock+coalesce(E.semarang_quantity,0))*(1.1)/l30d_runrate)
END as int) semarang_Inventory_day_for_future,
cast(Semarang_total_lead_time as int) Semarang_total_lead_time,
CASE
WHEN CASE
WHEN l30d_runrate = 0 THEN 0 else((Semarang_in_stock+coalesce(E.semarang_quantity,0))*(1.1)/l30d_runrate)
END<Semarang_total_lead_time THEN 'True'
ELSE 'False'
END semarang_reorder_flag,
(cast(Semarang_split*Semarang_inventory_days as int)-case when moq is not null and multiple_flag is not null then mod(cast(Semarang_split*Semarang_inventory_days as int),cast(moq as int)) else 0 end ) Semarang_project_quantity_to_order,
cast(Medan_in_stock as int) Medan_in_stock,
cast(coalesce(E.medan_quantity,0) as int) medan_quantity_in_transit,
cast(Medan_in_stock+coalesce(E.medan_quantity,0) as int) total_medan_stock,
cast(l30d_runrate as int) Medan_runrate ,
cast(CASE
WHEN l30d_runrate = 0 THEN 0 else((Medan_in_stock+coalesce(E.medan_quantity,0))*(1.1)/l30d_runrate)
END as int) medan_Inventory_day_for_future,
cast(Pekanbaru_Medan_total_lead_time as int) Medan_total_lead_time,
CASE
WHEN CASE
WHEN l30d_runrate = 0 THEN 0 else((Medan_in_stock+coalesce(E.medan_quantity,0))*(1.1)/l30d_runrate)
END<Pekanbaru_Medan_total_lead_time THEN 'True'
ELSE 'False'
END medan_reorder_flag,
(cast(pekanbaru_medan_split*Pekanbaru_Medan_inventory_days as int)-case when moq is not null and multiple_flag is not null then mod(cast(pekanbaru_medan_split*Pekanbaru_Medan_inventory_days as int),cast(moq as int))else 0 end ) Medan_project_quantity_to_order,
cast(Makassar_in_stock as int) Makassar_in_stock,
cast(coalesce(E.Makassar_quantity,0) as int) Makassar_quantity_in_transit,
cast(Makassar_in_stock+coalesce(E.Makassar_quantity,0) as int) total_Makassar_stock,
cast(l30d_runrate as int) Makassar_runrate,
cast(CASE
WHEN l30d_runrate = 0 THEN 0 else((Makassar_in_stock+coalesce(E.Makassar_quantity,0))*(1.1)/l30d_runrate)
END as int) Makassar_Inventory_day_for_future,
cast(Makassar_total_lead_time as int) Makassar_total_lead_time,
CASE
WHEN CASE
WHEN l30d_runrate = 0 THEN 0 else((Makassar_in_stock+coalesce(E.Makassar_quantity,0))*(1.1)/l30d_runrate)
END<Makassar_total_lead_time THEN 'True'
ELSE 'False'
END makassar_reorder_flag,
(cast(Makassar_split*Makassar_inventory_days as int) -case when moq is not null and multiple_flag is not null then mod(cast(Makassar_split*Makassar_inventory_days as int),cast(moq as int))else 0 end ) Makassar_project_quantity_to_order,
cast(Samarinda_in_stock as int) Samarinda_in_stock,
cast(coalesce(E.Samarinda_quantity,0) as int) Samarinda_quantity_in_transit,
cast(Samarinda_in_stock+coalesce(E.Samarinda_quantity,0) as int) total_Samarinda_stock,
cast(l30d_runrate as int) Samarinda_runrate,
cast(CASE
WHEN l30d_runrate = 0 THEN 0 else((Samarinda_in_stock+coalesce(E.Samarinda_quantity,0))*(1.1)/l30d_runrate)
END as int) Samarinda_Inventory_day_for_future,
cast(Balikpapan_Semarandi_total_lead_time as int) Semarandi_total_lead_time,
CASE
WHEN CASE
WHEN l30d_runrate = 0 THEN 0 else((Samarinda_in_stock+coalesce(E.Samarinda_quantity,0))*(1.1)/l30d_runrate)
END<Balikpapan_Semarandi_total_lead_time THEN 'True'
ELSE 'False'
END semarandi_reorder_flag,
(cast(balikpapan_semarandi_split*Balikpapan_Semarandi_inventory_days as int)-case when moq is not null and multiple_flag is not null then mod(cast(balikpapan_semarandi_split*Balikpapan_Semarandi_inventory_days as int),cast(moq as int)) else 0 end ) semarandi_project_quantity_to_order
FROM raena_analytics.sku_level_data A
LEFT JOIN raena_analytics.final_basic_calucation_table B ON A.sku = B.sku
LEFT JOIN raena_analytics.warehouse_in_stock C ON A.sku = C.sku
LEFT JOIN raena_analytics.basic_calculation D ON A.sku=D.sku
LEFT JOIN raena_analytics.inbound_data E ON A.sku = E.sku;
drop table if exists raena_analytics.demand_forecast_dashboard_final;
create table raena_analytics.demand_forecast_dashboard_final
as
SELECT *,
cast(cikarang_in_stock+surabaya_in_stock +semarang_in_stock +medan_in_stock +makassar_in_stock +samarinda_in_stock as int) AS total_in_stock ,
cast(cikarang_quantity_in_transit +surabaya_quantity_in_transit +semarang_quantity_in_transit +medan_quantity_in_transit +makassar_quantity_in_transit +samarinda_quantity_in_transit as int) AS total_quantity_in_transit,
cast(total_cikarang_stock +total_surabaya_stock +total_semarang_stock +total_medan_stock + total_makassar_stock +total_samarinda_stock as int) AS total_stock,
cast(cikarang_runrate as int) total_runrate,
cast(CASE
WHEN cikarang_runrate = 0 THEN 0 else((total_cikarang_stock +total_surabaya_stock +total_semarang_stock +total_medan_stock + total_makassar_stock +total_samarinda_stock)*(1.1)/cikarang_runrate)
END as int) total_inventory_day_for_future ,
cast(greatest(cikarang_total_lead_time,surabaya_total_lead_time,semarang_total_lead_time,medan_total_lead_time,makassar_total_lead_time,Semarandi_total_lead_time) as int) AS total_total_lead_time,
CASE
WHEN CASE
WHEN cikarang_runrate = 0 THEN 0 else((total_cikarang_stock +total_surabaya_stock +total_semarang_stock +total_medan_stock + total_makassar_stock +total_samarinda_stock)*(1.1)/cikarang_runrate)
END<greatest(cikarang_total_lead_time,surabaya_total_lead_time,semarang_total_lead_time,medan_total_lead_time,makassar_total_lead_time,Semarandi_total_lead_time) THEN 'True'
ELSE 'False'
END overall_reorder_flag,
(coalesce(cikarang_project_quantity_to_order,0)+coalesce(semarandi_project_quantity_to_order,0)+coalesce(Makassar_project_quantity_to_order,0)
+coalesce(Semarang_project_quantity_to_order,0)+coalesce(Medan_project_quantity_to_order,0)+coalesce(Surabaya_project_quantity_to_order,0)) overall_qty_required_per_day
FROM raena_analytics.demand_forecast_dashboard_base
WHERE sku NOT LIKE '%BAZ%';
Delete from raena_analytics.OM_OOS_Base where report_date='2024-06-23';
Insert into raena_analytics.OM_OOS_Base
SELECT *,
cast(cikarang_in_stock+surabaya_in_stock +semarang_in_stock +medan_in_stock +makassar_in_stock +samarinda_in_stock as int) AS total_in_stock ,
cast(cikarang_quantity_in_transit +surabaya_quantity_in_transit +semarang_quantity_in_transit +medan_quantity_in_transit +makassar_quantity_in_transit +samarinda_quantity_in_transit as int) AS total_quantity_in_transit,
cast(total_cikarang_stock +total_surabaya_stock +total_semarang_stock +total_medan_stock + total_makassar_stock +total_samarinda_stock as int) AS total_stock,
cast(cikarang_runrate as int) total_runrate,
cast(CASE
WHEN cikarang_runrate = 0 THEN 0 else((total_cikarang_stock +total_surabaya_stock +total_semarang_stock +total_medan_stock + total_makassar_stock +total_samarinda_stock)*(1.1)/cikarang_runrate)
END as int) total_inventory_day_for_future ,
cast(greatest(cikarang_total_lead_time,surabaya_total_lead_time,semarang_total_lead_time,medan_total_lead_time,makassar_total_lead_time,Semarandi_total_lead_time) as int) AS total_total_lead_time,
CASE
WHEN CASE
WHEN cikarang_runrate = 0 THEN 0 else((total_cikarang_stock +total_surabaya_stock +total_semarang_stock +total_medan_stock + total_makassar_stock +total_samarinda_stock)*(1.1)/cikarang_runrate)
END<greatest(cikarang_total_lead_time,surabaya_total_lead_time,semarang_total_lead_time,medan_total_lead_time,makassar_total_lead_time,Semarandi_total_lead_time) THEN 'True'
ELSE 'False'
END overall_reorder_flag,
(coalesce(cikarang_project_quantity_to_order,0)+coalesce(semarandi_project_quantity_to_order,0)+coalesce(Makassar_project_quantity_to_order,0)
+coalesce(Semarang_project_quantity_to_order,0)+coalesce(Medan_project_quantity_to_order,0)+coalesce(Surabaya_project_quantity_to_order,0)) overall_qty_required_per_day,
'2024-06-23' as Report_date
FROM raena_analytics.demand_forecast_dashboard_base
WHERE sku NOT LIKE '%BAZ%';