mirror of
https://gitlab.com/cief-data/dbt_cloud.git
synced 2026-08-19 04:14:00 +00:00
341 lines
10 KiB
SQL
341 lines
10 KiB
SQL
-- MARCRO for count the cummulative_activity_number
|
|
{% set funnel_activity = ['register','email_verified','identity_documents_uploaded','identity_documents_verified','first_time_booking','first_time_order','first_time_order_completed','repeat_completed_order_after_30days','repeat_completed_order_after_60days']%}
|
|
|
|
-- IMPORT
|
|
WITH companies AS (
|
|
SELECT * FROM {{ ref('dim_exchange__companies') }}
|
|
),
|
|
|
|
transaction_orders AS (
|
|
SELECT * FROM {{ ref('fct_exchange__transaction_orders') }}
|
|
),
|
|
|
|
company_identity_documents AS (
|
|
SELECT * FROM {{ ref('fct_exchange__company_identity_documents') }}
|
|
),
|
|
|
|
email_verifications AS (
|
|
SELECT * FROM {{ ref('fct_exchange__email_verifications') }}
|
|
),
|
|
|
|
bookings AS (
|
|
SELECT * FROM {{ ref('fct_exchange__bookings') }}
|
|
),
|
|
|
|
|
|
-- LOGIC
|
|
remove_supplier_company AS (
|
|
SELECT
|
|
*
|
|
FROM companies
|
|
|
|
WHERE business_type NOT IN ('1','3')
|
|
),
|
|
|
|
clean_company_transaction_orders AS (
|
|
SELECT
|
|
transaction_orders.*
|
|
|
|
FROM transaction_orders
|
|
|
|
-- Remove supplier (If any) 16/3/2023 Currently do not have any supplier in transaction orders
|
|
INNER JOIN remove_supplier_company
|
|
ON (transaction_orders.company_id = remove_supplier_company.id)
|
|
),
|
|
|
|
clean_company_bookings AS (
|
|
SELECT
|
|
bookings.*
|
|
|
|
FROM bookings
|
|
|
|
-- Remove supplier (If any) 16/3/2023 Currently do not have any supplier in transaction orders
|
|
INNER JOIN remove_supplier_company
|
|
ON (bookings.company_id = remove_supplier_company.id)
|
|
),
|
|
|
|
|
|
company_first_time_order_date AS (
|
|
SELECT
|
|
id,
|
|
company_id,
|
|
created_at
|
|
|
|
FROM clean_company_transaction_orders
|
|
|
|
WHERE
|
|
is_first_time_company_completed = '1'
|
|
),
|
|
|
|
|
|
|
|
--start defind funnel
|
|
repeat_completed_order_after_60days_activities AS (
|
|
SELECT
|
|
clean_company_transaction_orders.company_id,
|
|
0 AS is_data_cleansing_generate_row,
|
|
'repeat_completed_order_after_60days' AS activity,
|
|
MIN(clean_company_transaction_orders.created_at) AS activity_datetime
|
|
|
|
FROM clean_company_transaction_orders
|
|
|
|
LEFT JOIN company_first_time_order_date
|
|
ON (clean_company_transaction_orders.company_id = company_first_time_order_date.company_id)
|
|
|
|
WHERE
|
|
DATEDIFF(day, company_first_time_order_date.created_at, clean_company_transaction_orders.created_at) >= 60
|
|
|
|
GROUP BY
|
|
clean_company_transaction_orders.company_id
|
|
),
|
|
|
|
repeat_completed_order_after_30days_activities AS (
|
|
SELECT
|
|
clean_company_transaction_orders.company_id,
|
|
0 AS is_data_cleansing_generate_row,
|
|
'repeat_completed_order_after_30days' AS activity,
|
|
MIN(clean_company_transaction_orders.created_at) AS activity_datetime
|
|
|
|
FROM clean_company_transaction_orders
|
|
|
|
LEFT JOIN company_first_time_order_date
|
|
ON (clean_company_transaction_orders.company_id = company_first_time_order_date.company_id)
|
|
|
|
WHERE
|
|
DATEDIFF(day, company_first_time_order_date.created_at, clean_company_transaction_orders.created_at) >= 30
|
|
|
|
GROUP BY
|
|
clean_company_transaction_orders.company_id
|
|
),
|
|
|
|
first_time_order_completed_activities AS (
|
|
SELECT
|
|
clean_company_transaction_orders.company_id,
|
|
0 AS is_data_cleansing_generate_row,
|
|
'first_time_order_completed' AS activity,
|
|
MIN(clean_company_transaction_orders.created_at) AS activity_datetime
|
|
|
|
FROM clean_company_transaction_orders
|
|
|
|
WHERE
|
|
clean_company_transaction_orders.is_first_time_company_completed = 1
|
|
|
|
GROUP BY
|
|
clean_company_transaction_orders.company_id
|
|
),
|
|
|
|
first_time_order_activities AS (
|
|
SELECT
|
|
clean_company_transaction_orders.company_id,
|
|
0 AS is_data_cleansing_generate_row,
|
|
'first_time_order' AS activity,
|
|
MIN(clean_company_transaction_orders.created_at) AS activity_datetime
|
|
|
|
FROM clean_company_transaction_orders
|
|
|
|
WHERE
|
|
clean_company_transaction_orders.is_first_time_company = 1
|
|
|
|
GROUP BY
|
|
clean_company_transaction_orders.company_id
|
|
),
|
|
|
|
first_time_booking_activities AS (
|
|
SELECT
|
|
IFNULL( unclean_first_time_booking_activities.company_id , first_time_order_activities.company_id ) AS company_id,
|
|
IFF( unclean_first_time_booking_activities.company_id IS NULL, 1, 0) AS is_data_cleansing_generate_row,
|
|
'first_time_booking' AS activity,
|
|
IFNULL( unclean_first_time_booking_activities.activity_datetime , first_time_order_activities.activity_datetime ) AS activity_datetime
|
|
|
|
FROM
|
|
(
|
|
SELECT
|
|
clean_company_bookings.company_id,
|
|
'first_time_booking' AS activity,
|
|
MIN(clean_company_bookings.booking_created_datetime) AS activity_datetime
|
|
|
|
FROM clean_company_bookings
|
|
|
|
WHERE
|
|
clean_company_bookings.is_first_time_company = 1
|
|
|
|
GROUP BY
|
|
clean_company_bookings.company_id
|
|
) AS unclean_first_time_booking_activities
|
|
|
|
FULL OUTER JOIN first_time_order_activities
|
|
ON (unclean_first_time_booking_activities.company_id = first_time_order_activities.company_id)
|
|
),
|
|
|
|
|
|
identity_documents_verified_activities AS (
|
|
SELECT
|
|
IFNULL( unclean_identity_documents_verified_activities.company_id , first_time_booking_activities.company_id ) AS company_id,
|
|
IFF( unclean_identity_documents_verified_activities.company_id IS NULL, 1, 0) AS is_data_cleansing_generate_row,
|
|
'identity_documents_verified' AS activity,
|
|
IFNULL( unclean_identity_documents_verified_activities.activity_datetime , first_time_booking_activities.activity_datetime ) AS activity_datetime
|
|
|
|
FROM
|
|
(
|
|
|
|
SELECT
|
|
company_id,
|
|
'identity_documents_verified' AS activity,
|
|
MIN(identity_created_datetime) AS activity_datetime
|
|
|
|
FROM company_identity_documents
|
|
|
|
WHERE
|
|
identity_status = '2'
|
|
|
|
GROUP BY
|
|
company_id
|
|
|
|
) AS unclean_identity_documents_verified_activities
|
|
|
|
|
|
FULL OUTER JOIN first_time_booking_activities
|
|
ON (unclean_identity_documents_verified_activities.company_id = first_time_booking_activities.company_id)
|
|
|
|
),
|
|
|
|
identity_documents_uploaded_activities AS (
|
|
SELECT
|
|
IFNULL( unclean_identity_documents_uploaded_activities.company_id , identity_documents_verified_activities.company_id ) AS company_id,
|
|
IFF( unclean_identity_documents_uploaded_activities.company_id IS NULL, 1, 0) AS is_data_cleansing_generate_row,
|
|
'identity_documents_uploaded' AS activity,
|
|
IFNULL( unclean_identity_documents_uploaded_activities.activity_datetime , identity_documents_verified_activities.activity_datetime ) AS activity_datetime
|
|
|
|
FROM
|
|
(
|
|
|
|
SELECT
|
|
company_id,
|
|
'identity_documents_uploaded' AS activity,
|
|
MIN(identity_created_datetime) AS activity_datetime
|
|
|
|
FROM company_identity_documents
|
|
|
|
GROUP BY
|
|
company_id
|
|
|
|
) AS unclean_identity_documents_uploaded_activities
|
|
|
|
|
|
FULL OUTER JOIN identity_documents_verified_activities
|
|
ON (unclean_identity_documents_uploaded_activities.company_id = identity_documents_verified_activities.company_id)
|
|
),
|
|
|
|
email_verified_activities AS (
|
|
SELECT
|
|
IFNULL( unclean_email_verified_activities.company_id , identity_documents_uploaded_activities.company_id ) AS company_id,
|
|
IFF( unclean_email_verified_activities.company_id IS NULL, 1, 0) AS is_data_cleansing_generate_row,
|
|
'email_verified' AS activity,
|
|
IFNULL( unclean_email_verified_activities.activity_datetime , identity_documents_uploaded_activities.activity_datetime ) AS activity_datetime
|
|
|
|
FROM
|
|
(
|
|
SELECT
|
|
company_id,
|
|
'email_verified' AS activity,
|
|
MIN(verification_email_created_datetime) AS activity_datetime
|
|
|
|
FROM email_verifications
|
|
|
|
WHERE
|
|
is_completed = '1'
|
|
|
|
GROUP BY
|
|
company_id
|
|
) AS unclean_email_verified_activities
|
|
|
|
FULL OUTER JOIN identity_documents_uploaded_activities
|
|
ON (unclean_email_verified_activities.company_id = identity_documents_uploaded_activities.company_id)
|
|
|
|
),
|
|
|
|
register_activities AS (
|
|
SELECT
|
|
IFNULL( unclean_register_activities.company_id , email_verified_activities.company_id ) AS company_id,
|
|
IFF( unclean_register_activities.company_id IS NULL, 1, 0) AS is_data_cleansing_generate_row,
|
|
'register' AS activity,
|
|
IFNULL( unclean_register_activities.activity_datetime , email_verified_activities.activity_datetime ) AS activity_datetime
|
|
|
|
FROM
|
|
(
|
|
SELECT
|
|
id AS company_id,
|
|
'register' AS activity,
|
|
MIN(created_at) AS activity_datetime
|
|
|
|
FROM remove_supplier_company
|
|
|
|
GROUP BY
|
|
id
|
|
) AS unclean_register_activities
|
|
|
|
FULL OUTER JOIN email_verified_activities
|
|
ON (unclean_register_activities.company_id = email_verified_activities.company_id)
|
|
|
|
),
|
|
|
|
|
|
--all activites Union into a table
|
|
union_all_activities AS (
|
|
SELECT *
|
|
FROM register_activities
|
|
|
|
{% for activity in funnel_activity[1:] %}
|
|
|
|
UNION
|
|
SELECT *
|
|
FROM {{activity}}_activities
|
|
|
|
{% endfor %}
|
|
|
|
),
|
|
|
|
union_all_activities_flag_migrated_company AS (
|
|
SELECT
|
|
union_all_activities.*,
|
|
remove_supplier_company.is_migrated_company
|
|
|
|
FROM union_all_activities
|
|
|
|
LEFT JOIN remove_supplier_company
|
|
ON (union_all_activities.company_id = remove_supplier_company.id)
|
|
|
|
),
|
|
|
|
|
|
--FINAL
|
|
|
|
sem_exchange__company_funnels AS (
|
|
SELECT
|
|
company_id,
|
|
is_data_cleansing_generate_row,
|
|
is_migrated_company,
|
|
activity_datetime,
|
|
|
|
{% for activity in funnel_activity %}
|
|
|
|
count(iff(activity = '{{activity}}', company_id, NULL))
|
|
OVER (ORDER BY activity_datetime) AS cumulative_{{activity}}_activity,
|
|
|
|
{% endfor %}
|
|
|
|
{% for activity in funnel_activity %}
|
|
|
|
count(iff(activity = '{{activity}}' AND is_migrated_company = 0, company_id, NULL))
|
|
OVER (ORDER BY activity_datetime) AS exclude_migrated_cumulative_{{activity}}_activity,
|
|
|
|
{% endfor %}
|
|
|
|
'__macro_end' AS __macro_end
|
|
|
|
FROM union_all_activities_flag_migrated_company
|
|
|
|
ORDER BY activity_datetime
|
|
)
|
|
|
|
SELECT * FROM sem_exchange__company_funnels |