mirror of
https://gitlab.com/cief-data/dbt_cloud.git
synced 2026-08-19 04:14:00 +00:00
Merge branch 'YAM_rep_shipping_company_purchase_frequency' into 'main'
Yam rep shipping company purchase frequency See merge request cief-data/dbt_cloud!14
This commit is contained in:
@@ -0,0 +1,171 @@
|
|||||||
|
{% set time_grain_list = ["month", "quarter", "year"] %}
|
||||||
|
{% set monthly_cbm_rank_list = [1.25, 5, 20] %} -- 0->1.25 40% 1.25->5 40% 5->20 15% 20->onward 5%
|
||||||
|
{% set quarterly_cbm_rank_list = [1.75, 10, 30] %}
|
||||||
|
{% set yearly_cbm_rank_list = [2.5, 20, 60] %}
|
||||||
|
|
||||||
|
-- IMPORT
|
||||||
|
WITH shipping_companies AS (
|
||||||
|
SELECT * FROM {{ ref('dim_shipping__companies') }}
|
||||||
|
),
|
||||||
|
|
||||||
|
origin_warehouse_shipping_packing_lists AS (
|
||||||
|
SELECT * FROM {{ ref('fct_shipping__origin_warehouse_shipping_packing_lists') }}
|
||||||
|
),
|
||||||
|
|
||||||
|
dates AS (
|
||||||
|
SELECT * FROM {{ ref('dim__dates') }}
|
||||||
|
),
|
||||||
|
|
||||||
|
-- LOGIC
|
||||||
|
{% for time_grain in time_grain_list %}
|
||||||
|
sub_company_first_time_order_{{time_grain}} AS (
|
||||||
|
SELECT
|
||||||
|
origin_warehouse_shipping_packing_lists.sub_company_id,
|
||||||
|
shipping_companies.sub_company_marking_id,
|
||||||
|
MIN(dates.first_day_of_{{time_grain}}) AS company_first_time_order_{{time_grain}}
|
||||||
|
|
||||||
|
FROM origin_warehouse_shipping_packing_lists
|
||||||
|
|
||||||
|
LEFT JOIN shipping_companies
|
||||||
|
ON (origin_warehouse_shipping_packing_lists.sub_company_id = shipping_companies.sub_company_id)
|
||||||
|
|
||||||
|
LEFT JOIN dates
|
||||||
|
ON (date(origin_warehouse_shipping_packing_lists.origin_warehouse_shipping_order_created_datetime) = dates.date_day)
|
||||||
|
|
||||||
|
GROUP BY
|
||||||
|
origin_warehouse_shipping_packing_lists.sub_company_id,
|
||||||
|
shipping_companies.sub_company_marking_id
|
||||||
|
|
||||||
|
),
|
||||||
|
|
||||||
|
origin_warehouse_shipping_packing_list_{{time_grain}} AS (
|
||||||
|
SELECT
|
||||||
|
origin_warehouse_shipping_packing_lists.*,
|
||||||
|
dates.first_day_of_{{time_grain}} AS origin_warehouse_shipping_order_created_{{time_grain}}
|
||||||
|
|
||||||
|
FROM origin_warehouse_shipping_packing_lists
|
||||||
|
|
||||||
|
LEFT JOIN dates
|
||||||
|
ON (date(origin_warehouse_shipping_packing_lists.origin_warehouse_shipping_order_created_datetime) = dates.date_day)
|
||||||
|
),
|
||||||
|
|
||||||
|
register_date_and_company_id_combination_{{time_grain}} AS (
|
||||||
|
SELECT
|
||||||
|
DISTINCT c.company_first_time_order_{{time_grain}} AS event_date,
|
||||||
|
'{{time_grain|upper}}LY' AS time_grain_filter,
|
||||||
|
c1.sub_company_id,
|
||||||
|
c1.sub_company_marking_id
|
||||||
|
|
||||||
|
FROM sub_company_first_time_order_{{time_grain}} AS c
|
||||||
|
|
||||||
|
CROSS JOIN sub_company_first_time_order_{{time_grain}} AS c1
|
||||||
|
|
||||||
|
WHERE c.company_first_time_order_{{time_grain}} >= c1.company_first_time_order_{{time_grain}}
|
||||||
|
|
||||||
|
ORDER BY event_date
|
||||||
|
),
|
||||||
|
|
||||||
|
company_sale_by_time_grain_{{time_grain}} AS (
|
||||||
|
SELECT
|
||||||
|
register_date_and_company_id_combination_{{time_grain}}.event_date,
|
||||||
|
register_date_and_company_id_combination_{{time_grain}}.time_grain_filter,
|
||||||
|
register_date_and_company_id_combination_{{time_grain}}.sub_company_id,
|
||||||
|
register_date_and_company_id_combination_{{time_grain}}.sub_company_marking_id,
|
||||||
|
|
||||||
|
SUM(IFF(origin_warehouse_shipping_order_status = 'APPROVED' OR
|
||||||
|
origin_warehouse_shipping_order_status = 'COMPLETED',
|
||||||
|
total_order_cbm,
|
||||||
|
0)) AS total_cbm_completed_approved,
|
||||||
|
|
||||||
|
COUNT(DISTINCT(IFF(origin_warehouse_shipping_order_status = 'APPROVED' OR
|
||||||
|
origin_warehouse_shipping_order_status = 'COMPLETED',
|
||||||
|
old_origin_warehouse_shipping_packing_list_id,
|
||||||
|
NULL))) AS total_order_completed_approved,
|
||||||
|
|
||||||
|
{% if time_grain == "month" -%}
|
||||||
|
{%- set cbm_rank_list = monthly_cbm_rank_list -%}
|
||||||
|
{%- elif time_grain == "quarter"%}
|
||||||
|
{%- set cbm_rank_list = quarterly_cbm_rank_list -%}
|
||||||
|
{%- elif time_grain == "year"%}
|
||||||
|
{%- set cbm_rank_list = yearly_cbm_rank_list -%}
|
||||||
|
{%- else -%}
|
||||||
|
{%- set cbm_rank_list = [] -%}
|
||||||
|
{%- endif -%}
|
||||||
|
|
||||||
|
CASE
|
||||||
|
WHEN total_cbm_completed_approved = 0
|
||||||
|
THEN 'NO_USAGE'
|
||||||
|
WHEN total_cbm_completed_approved <= {{cbm_rank_list[0]}}
|
||||||
|
THEN 'LOW_USAGE'
|
||||||
|
WHEN (total_cbm_completed_approved > {{cbm_rank_list[0]}} AND total_cbm_completed_approved <= {{cbm_rank_list[1]}})
|
||||||
|
THEN 'MEDIUM_USAGE'
|
||||||
|
WHEN (total_cbm_completed_approved > {{cbm_rank_list[1]}} AND total_cbm_completed_approved <= {{cbm_rank_list[2]}})
|
||||||
|
THEN 'HIGH_USAGE'
|
||||||
|
WHEN total_cbm_completed_approved > {{cbm_rank_list[2]}}
|
||||||
|
THEN 'SUPER_HIGH_USAGE'
|
||||||
|
ELSE 'ERROR'
|
||||||
|
END AS company_usage_type,
|
||||||
|
|
||||||
|
CASE
|
||||||
|
WHEN total_order_completed_approved = 0
|
||||||
|
THEN 'NO_ORDER'
|
||||||
|
WHEN MAX(is_first_time_sub_company) = 1
|
||||||
|
THEN 'FIRST_TIME_ORDER'
|
||||||
|
WHEN LAG(total_order_completed_approved) OVER (PARTITION BY register_date_and_company_id_combination_{{time_grain}}.time_grain_filter, register_date_and_company_id_combination_{{time_grain}}.sub_company_id, register_date_and_company_id_combination_{{time_grain}}.sub_company_marking_id ORDER BY event_date) != 0
|
||||||
|
THEN 'RECURRING_ORDER'
|
||||||
|
WHEN LAG(total_order_completed_approved) OVER (PARTITION BY register_date_and_company_id_combination_{{time_grain}}.time_grain_filter, register_date_and_company_id_combination_{{time_grain}}.sub_company_id, register_date_and_company_id_combination_{{time_grain}}.sub_company_marking_id ORDER BY event_date) = 0
|
||||||
|
THEN 'REACTIVE_ORDER'
|
||||||
|
ELSE 'ERROR'
|
||||||
|
END AS event_type
|
||||||
|
|
||||||
|
|
||||||
|
FROM register_date_and_company_id_combination_{{time_grain}}
|
||||||
|
|
||||||
|
LEFT JOIN origin_warehouse_shipping_packing_list_{{time_grain}}
|
||||||
|
ON (register_date_and_company_id_combination_{{time_grain}}.sub_company_id = origin_warehouse_shipping_packing_list_{{time_grain}}.sub_company_id
|
||||||
|
AND
|
||||||
|
register_date_and_company_id_combination_{{time_grain}}.event_date = origin_warehouse_shipping_packing_list_{{time_grain}}.origin_warehouse_shipping_order_created_{{time_grain}})
|
||||||
|
|
||||||
|
GROUP BY
|
||||||
|
register_date_and_company_id_combination_{{time_grain}}.event_date,
|
||||||
|
register_date_and_company_id_combination_{{time_grain}}.time_grain_filter,
|
||||||
|
register_date_and_company_id_combination_{{time_grain}}.sub_company_id,
|
||||||
|
register_date_and_company_id_combination_{{time_grain}}.sub_company_marking_id
|
||||||
|
),
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
union_all_time_grain AS (
|
||||||
|
{% for time_grain in time_grain_list %}
|
||||||
|
SELECT * FROM company_sale_by_time_grain_{{time_grain}}
|
||||||
|
{%- if not loop.last %} UNION{% endif -%}
|
||||||
|
{% endfor %}
|
||||||
|
),
|
||||||
|
|
||||||
|
--FINAL
|
||||||
|
final__rep_shipping__company_order_usages AS (
|
||||||
|
SELECT
|
||||||
|
-- ids
|
||||||
|
{{ dbt_utils.generate_surrogate_key(['event_date', 'time_grain_filter', 'sub_company_id']) }} AS company_order_usage_sk,
|
||||||
|
sub_company_id,
|
||||||
|
sub_company_marking_id,
|
||||||
|
|
||||||
|
-- dimensions
|
||||||
|
time_grain_filter,
|
||||||
|
company_usage_type,
|
||||||
|
event_type,
|
||||||
|
|
||||||
|
-- measures
|
||||||
|
total_cbm_completed_approved,
|
||||||
|
total_order_completed_approved,
|
||||||
|
|
||||||
|
-- date/times
|
||||||
|
event_date,
|
||||||
|
|
||||||
|
-- metadata
|
||||||
|
'{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime
|
||||||
|
|
||||||
|
FROM union_all_time_grain
|
||||||
|
)
|
||||||
|
|
||||||
|
SELECT * FROM final__rep_shipping__company_order_usages
|
||||||
Reference in New Issue
Block a user