diff --git a/models/marts/reporting/rep_exchange__company_engagement_behaviors.sql b/models/marts/reporting/rep_exchange__company_engagement_behaviors.sql index 312bba9..d241558 100644 --- a/models/marts/reporting/rep_exchange__company_engagement_behaviors.sql +++ b/models/marts/reporting/rep_exchange__company_engagement_behaviors.sql @@ -1,13 +1,14 @@ -- AVAILALE FILTER VALUE {% set day_use_to_churn = 61 %} + -- IMPORT WITH companies AS ( SELECT * FROM {{ ref('dim_exchange__companies') }} ), transaction_orders AS ( - SELECT * FROM {{ ref('fct_exchange__transaction_orders') }} + SELECT * FROM {{ ref('fct_exchange__daily_orders') }} ), @@ -18,15 +19,15 @@ remove_supplier_company AS ( FROM companies WHERE business_type = 'IMPORTER' + ), - order_date_row_rank AS ( SELECT *, row_number() OVER - (PARTITION BY transaction_orders.company_id - ORDER BY transaction_orders.order_created_datetime) AS row_rank_index + (PARTITION BY company_id + ORDER BY order_created_datetime, order_id) AS row_rank_index FROM transaction_orders @@ -36,54 +37,54 @@ get_next_and_previous_order_date_orders AS ( SELECT order_date_row_rank.*, companies.is_migrated_company, - next_order_date_row_rank_clone.order_created_datetime AS next_order_created_datetime, - previous_order_date_row_rank_clone.order_created_datetime AS previous_order_created_datetime, + previous_order_date_row_rank_clone.order_created_datetime AS previous_order_created_datetime, companies.company_marking_id, - companies.company_created_datetime + companies.company_created_datetime FROM order_date_row_rank LEFT JOIN companies ON (order_date_row_rank.company_id = companies.company_id) - LEFT JOIN order_date_row_rank AS next_order_date_row_rank_clone + LEFT JOIN order_date_row_rank AS next_order_date_row_rank_clone ON order_date_row_rank.row_rank_index = next_order_date_row_rank_clone.row_rank_index - 1 AND order_date_row_rank.company_id = next_order_date_row_rank_clone.company_id - LEFT JOIN order_date_row_rank AS previous_order_date_row_rank_clone + LEFT JOIN order_date_row_rank AS previous_order_date_row_rank_clone ON order_date_row_rank.row_rank_index = previous_order_date_row_rank_clone.row_rank_index + 1 - AND order_date_row_rank.company_id = previous_order_date_row_rank_clone.company_id + AND order_date_row_rank.company_id = previous_order_date_row_rank_clone.company_id ), -- Register / Churn / Register; Churn company_register_events AS ( SELECT - remove_supplier_company.company_id AS company_id, + remove_supplier_company.company_id AS company_id, remove_supplier_company.is_migrated_company, - IFF(MAX(transaction_orders.company_id) IS NULL, 1, 0) AS is_never_order_company, + IFF(MAX(transaction_orders.company_id) IS NULL, 1, 0) AS is_never_order_company, remove_supplier_company.company_marking_id, - 'Register' AS register_event, + 'Register' AS register_event, IFF( DATEDIFF( day, remove_supplier_company.company_created_datetime, COALESCE(MIN(transaction_orders.order_created_datetime), CURRENT_DATE()) ) - >= {{day_use_to_churn}}, - 'Churn', - NULL) AS churn_event, - - RTRIM(CONCAT( - CASE WHEN register_event IS NOT NULL THEN 'Register, ' ELSE '' END, - CASE WHEN churn_event IS NOT NULL THEN 'Churn, ' ELSE '' END ),', ' ) AS concat_event, - - remove_supplier_company.company_created_datetime AS event_datetime + >= {{day_use_to_churn}}, 'Churn', NULL + ) AS churn_event, + + RTRIM( + CONCAT( + CASE WHEN register_event IS NOT NULL THEN 'Register, ' ELSE '' END, + CASE WHEN churn_event IS NOT NULL THEN 'Churn, ' ELSE '' END ),', ' + ) AS concat_event, + + remove_supplier_company.company_created_datetime AS event_datetime FROM remove_supplier_company - + LEFT JOIN transaction_orders - ON (remove_supplier_company.company_id = transaction_orders.company_id) - + ON (remove_supplier_company.company_id = transaction_orders.company_id) + GROUP BY remove_supplier_company.company_id, remove_supplier_company.company_marking_id, @@ -98,7 +99,65 @@ firsttime_repeat_churn_reactive_order_events AS ( company_id, company_marking_id, is_migrated_company, - 0 AS is_never_order_company, + 0 AS is_never_order_company, + order_id AS transaction_order_id, + order_status, + order_payment_method AS payment_method, + base_currency_id, + quote_currency_id, + order_base_to_quote_currency_exchange_rate AS base_to_quote_currency_exchange_rate, + order_value_rm AS value_rm, + order_tax_rm AS tax_rm, + order_service_charge_rm AS service_charge_rm, + + IFF(is_first_time_order_company = 1, 'First Time Order', NULL) AS first_time_order_event, + IFF(is_first_time_order_company = 0, 'Repeat', NULL) AS repeat_event, + IFF(DATEDIFF(day, order_created_datetime, COALESCE(next_order_created_datetime, CURRENT_DATE())) >= {{day_use_to_churn}}, 'Churn', NULL ) AS churn_event, + IFF(DATEDIFF(day, COALESCE(previous_order_created_datetime, company_created_datetime), order_created_datetime) >= {{day_use_to_churn}}, 'Reactive', NULL) AS reactive_event, + + RTRIM(CONCAT( + CASE WHEN first_time_order_event IS NOT NULL THEN 'First Time Order, ' ELSE '' END, + CASE WHEN repeat_event IS NOT NULL THEN 'Repeat, ' ELSE '' END, + CASE WHEN reactive_event IS NOT NULL THEN 'Reactive, ' ELSE '' END, + CASE WHEN churn_event IS NOT NULL THEN 'Churn, ' ELSE '' END ),', ' ) AS concat_event, + + order_created_datetime AS event_datetime + + FROM get_next_and_previous_order_date_orders +), + +union_event_tables AS ( + SELECT + company_id, + company_marking_id, + is_migrated_company, + is_never_order_company, + NULL AS transaction_order_id, + NULL AS order_status, + NULL AS payment_method, + NULL AS base_currency_id, + NULL AS quote_currency_id, + NULL AS base_to_quote_currency_exchange_rate, + NULL AS value_rm, + NULL AS tax_rm, + NULL AS service_charge_rm, + register_event, + NULL AS first_time_order_event, + NULL AS repeat_event, + churn_event, + NULL AS reactive_event, + concat_event, + event_datetime + + FROM company_register_events + + UNION + + SELECT + company_id, + company_marking_id, + is_migrated_company, + is_never_order_company, transaction_order_id, order_status, payment_method, @@ -108,72 +167,15 @@ firsttime_repeat_churn_reactive_order_events AS ( value_rm, tax_rm, service_charge_rm, - IFF(is_first_time_company = 1, 'First Time Order', NULL) AS first_time_order_event, - IFF(is_first_time_company = 0, 'Repeat', NULL) AS repeat_event, - IFF(DATEDIFF(day, order_created_datetime, COALESCE(next_order_created_datetime, CURRENT_DATE())) >= {{day_use_to_churn}}, 'Churn', NULL ) AS churn_event, - IFF(DATEDIFF(day, COALESCE(previous_order_created_datetime, company_created_datetime), order_created_datetime) >= {{day_use_to_churn}}, 'Reactive', NULL) AS reactive_event, - - RTRIM(CONCAT( - CASE WHEN first_time_order_event IS NOT NULL THEN 'First Time Order, ' ELSE '' END, - CASE WHEN repeat_event IS NOT NULL THEN 'Repeat, ' ELSE '' END, - CASE WHEN reactive_event IS NOT NULL THEN 'Reactive, ' ELSE '' END, - CASE WHEN churn_event IS NOT NULL THEN 'Churn, ' ELSE '' END ),', ' ) AS concat_event, + NULL AS register_event, + first_time_order_event, + repeat_event, + churn_event, + reactive_event, + concat_event, + event_datetime - order_created_datetime AS event_datetime - - FROM get_next_and_previous_order_date_orders -), - -union_event_tables AS ( - SELECT - company_id, - company_marking_id, - is_migrated_company, - is_never_order_company, - NULL AS transaction_order_id, - NULL AS order_status, - NULL AS payment_method, - NULL AS base_currency_id, - NULL AS quote_currency_id, - NULL AS base_to_quote_currency_exchange_rate, - NULL AS value_rm, - NULL AS tax_rm, - NULL AS service_charge_rm, - register_event, - NULL AS first_time_order_event, - NULL AS repeat_event, - churn_event, - NULL AS reactive_event, - concat_event, - event_datetime - - FROM company_register_events - - UNION - - SELECT - company_id, - company_marking_id, - is_migrated_company, - is_never_order_company, - transaction_order_id, - order_status, - payment_method, - base_currency_id, - quote_currency_id, - base_to_quote_currency_exchange_rate, - value_rm, - tax_rm, - service_charge_rm, - NULL AS register_event, - first_time_order_event, - repeat_event, - churn_event, - reactive_event, - concat_event, - event_datetime - - FROM firsttime_repeat_churn_reactive_order_events + FROM firsttime_repeat_churn_reactive_order_events ), -- FINAL @@ -209,7 +211,7 @@ final__rep_exchange__company_engagement_behaviors AS ( -- metadata '{{ modules.datetime.datetime.now(modules.pytz.timezone("Asia/Kuala_Lumpur")) }}' AS _dbt_ran_datetime - + FROM union_event_tables )