Merge branch 'YAM_rep_shipping_company_purchase_frequency' into 'main'

Yam rep shipping company purchase frequency

See merge request cief-data/dbt_cloud!13
This commit is contained in:
CIEF DataTeam
2023-07-31 16:13:01 +00:00
3 changed files with 200 additions and 13 deletions
@@ -0,0 +1,163 @@
{% 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_register_{{time_grain}} AS (
SELECT
sub_company_id,
sub_company_marking_id,
dates.first_day_of_{{time_grain}} AS company_register_{{time_grain}}
FROM shipping_companies
LEFT JOIN dates
ON (date(shipping_companies.sub_company_created_datetime) = dates.date_day)
),
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_register_{{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_register_{{time_grain}} AS c
CROSS JOIN sub_company_register_{{time_grain}} AS c1
WHERE c.company_register_{{time_grain}} >= c1.company_register_{{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
@@ -26,25 +26,21 @@ join_tables AS (
create_metrics AS ( create_metrics AS (
SELECT SELECT
*, *,
{% for column_name in ["parent_company", "sub_company"] %}
CASE CASE
WHEN ROW_NUMBER() OVER (PARTITION BY join_tables.{{column_name}}_id ORDER BY join_tables.origin_warehouse_shipping_order_created_datetime) = 1 THEN 1 WHEN ROW_NUMBER() OVER (PARTITION BY join_tables.parent_company_id ORDER BY join_tables.origin_warehouse_shipping_order_created_datetime) = 1 THEN 1
ELSE 0 ELSE 0
END AS is_first_time_{{column_name}}, END AS is_first_time_parent_company,
CASE CASE
WHEN join_tables.origin_warehouse_shipping_order_status = 'COMPLETED' WHEN join_tables.origin_warehouse_shipping_order_status = 'COMPLETED'
AND AND
MIN(IFF(join_tables.origin_warehouse_shipping_order_status = 'COMPLETED', join_tables.origin_warehouse_shipping_order_created_datetime, NULL)) MIN(IFF(join_tables.origin_warehouse_shipping_order_status = 'COMPLETED', join_tables.origin_warehouse_shipping_order_created_datetime, NULL))
OVER (PARTITION BY join_tables.{{column_name}}_id) OVER (PARTITION BY join_tables.parent_company_id)
= join_tables.origin_warehouse_shipping_order_created_datetime = join_tables.origin_warehouse_shipping_order_created_datetime
THEN 1 THEN 1
ELSE 0 ELSE 0
END AS is_first_time_{{column_name}}_completed, END AS is_first_time_parent_company_completed,
{% endfor %}
-- temp debug, need make sure it do not have null in fct, cause cant add
(ZEROIFNULL(total_package_cbm) + ZEROIFNULL(over_weight_cbm) + ZEROIFNULL(pallet_charge_cbm)) AS total_order_cbm,
'{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime '{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime
@@ -159,9 +159,7 @@ origin_warehouse_shipping_packing_lists_enrich AS (
destination_warehouse_packing_list_transport_arrangements.destination_warehouse_transport_last_eta_datetime, destination_warehouse_packing_list_transport_arrangements.destination_warehouse_transport_last_eta_datetime,
destination_warehouse_packing_list_transport_arrangements.destination_warehouse_transport_first_estimate_schedule_created_datetime, destination_warehouse_packing_list_transport_arrangements.destination_warehouse_transport_first_estimate_schedule_created_datetime,
destination_warehouse_packing_list_transport_arrangements.destination_warehouse_transport_last_estimate_schedule_created_datetime, destination_warehouse_packing_list_transport_arrangements.destination_warehouse_transport_last_estimate_schedule_created_datetime,
destination_warehouse_packing_list_transport_arrangements.destination_warehouse_transport_created_datetime, destination_warehouse_packing_list_transport_arrangements.destination_warehouse_transport_created_datetime
'{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime
FROM origin_warehouse_shipping_packing_lists FROM origin_warehouse_shipping_packing_lists
@@ -185,6 +183,33 @@ origin_warehouse_shipping_packing_lists_enrich AS (
ON (origin_warehouse_shipping_packing_lists.old_origin_warehouse_shipping_packing_list_id = destination_warehouse_packing_list_transport_arrangements.old_origin_warehouse_shipping_packing_list_id) ON (origin_warehouse_shipping_packing_lists.old_origin_warehouse_shipping_packing_list_id = destination_warehouse_packing_list_transport_arrangements.old_origin_warehouse_shipping_packing_list_id)
), ),
create_new_column AS (
SELECT
*,
(ZEROIFNULL(total_package_cbm) +
ZEROIFNULL(over_weight_cbm) +
ZEROIFNULL(pallet_charge_cbm)) AS total_order_cbm,
CASE
WHEN ROW_NUMBER() OVER (PARTITION BY sub_company_id ORDER BY origin_warehouse_shipping_order_created_datetime) = 1 THEN 1
ELSE 0
END AS is_first_time_sub_company,
CASE
WHEN origin_warehouse_shipping_order_status = 'COMPLETED'
AND
MIN(IFF(origin_warehouse_shipping_order_status = 'COMPLETED', origin_warehouse_shipping_order_created_datetime, NULL))
OVER (PARTITION BY sub_company_id)
= origin_warehouse_shipping_order_created_datetime
THEN 1
ELSE 0
END AS is_first_time_sub_company_completed,
'{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime
FROM origin_warehouse_shipping_packing_lists_enrich
),
-- FINAL -- FINAL
final__fct_shipping__origin_warehouse_shipping_packing_lists AS ( final__fct_shipping__origin_warehouse_shipping_packing_lists AS (
@@ -206,6 +231,8 @@ final__fct_shipping__origin_warehouse_shipping_packing_lists AS (
warehouse_order_number, warehouse_order_number,
reference_contract, reference_contract,
has_replaced_by_new_origin_warehouse_shipping_packing_list_id, has_replaced_by_new_origin_warehouse_shipping_packing_list_id,
is_first_time_sub_company,
is_first_time_sub_company_completed,
service_type, service_type,
package_descriptions, package_descriptions,
delivery_address_reference, delivery_address_reference,
@@ -256,6 +283,7 @@ final__fct_shipping__origin_warehouse_shipping_packing_lists AS (
over_weight_kg, over_weight_kg,
number_of_pallet_charge_record, number_of_pallet_charge_record,
pallet_charge_cbm, pallet_charge_cbm,
total_order_cbm,
number_of_invoice, number_of_invoice,
number_of_payment, number_of_payment,
invoice_number_of_shipping_fee, invoice_number_of_shipping_fee,
@@ -321,7 +349,7 @@ final__fct_shipping__origin_warehouse_shipping_packing_lists AS (
-- metadata -- metadata
_dbt_ran_datetime _dbt_ran_datetime
FROM origin_warehouse_shipping_packing_lists_enrich FROM create_new_column
) )
SELECT * FROM final__fct_shipping__origin_warehouse_shipping_packing_lists SELECT * FROM final__fct_shipping__origin_warehouse_shipping_packing_lists