replaced new fct orders table

This commit is contained in:
CIEF ACC1
2023-08-23 08:13:47 +00:00
parent 2a90f2cef2
commit 991db604ff
@@ -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
)