DBT restructure

This commit is contained in:
Yam ZhengLim
2023-04-09 15:13:42 +08:00
parent 1d63223a5f
commit 3db90f2ac6
57 changed files with 949 additions and 115 deletions
+46 -31
View File
@@ -1,5 +1,5 @@
-- 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']%}
{% set funnel_activity = ['register','email_verified','identity_document_uploaded','identity_document_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 (
@@ -69,12 +69,13 @@ company_first_time_order_date AS (
--start defind funnel
--start defind funnel activity
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,
9 AS activtity_rank,
MIN(clean_company_transaction_orders.created_at) AS activity_datetime
FROM clean_company_transaction_orders
@@ -94,6 +95,7 @@ repeat_completed_order_after_30days_activities AS (
clean_company_transaction_orders.company_id,
0 AS is_data_cleansing_generate_row,
'repeat_completed_order_after_30days' AS activity,
8 AS activtity_rank,
MIN(clean_company_transaction_orders.created_at) AS activity_datetime
FROM clean_company_transaction_orders
@@ -113,6 +115,7 @@ first_time_order_completed_activities AS (
clean_company_transaction_orders.company_id,
0 AS is_data_cleansing_generate_row,
'first_time_order_completed' AS activity,
7 AS activtity_rank,
MIN(clean_company_transaction_orders.created_at) AS activity_datetime
FROM clean_company_transaction_orders
@@ -129,6 +132,7 @@ first_time_order_activities AS (
clean_company_transaction_orders.company_id,
0 AS is_data_cleansing_generate_row,
'first_time_order' AS activity,
6 AS activtity_rank,
MIN(clean_company_transaction_orders.created_at) AS activity_datetime
FROM clean_company_transaction_orders
@@ -145,6 +149,7 @@ first_time_booking_activities AS (
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,
5 AS activtity_rank,
IFNULL( unclean_first_time_booking_activities.activity_datetime , first_time_order_activities.activity_datetime ) AS activity_datetime
FROM
@@ -168,19 +173,20 @@ first_time_booking_activities AS (
),
identity_documents_verified_activities AS (
identity_document_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
IFNULL( unclean_identity_document_verified_activities.company_id , first_time_booking_activities.company_id ) AS company_id,
IFF( unclean_identity_document_verified_activities.company_id IS NULL, 1, 0) AS is_data_cleansing_generate_row,
'identity_document_verified' AS activity,
4 AS activtity_rank,
IFNULL( unclean_identity_document_verified_activities.activity_datetime , first_time_booking_activities.activity_datetime ) AS activity_datetime
FROM
(
SELECT
company_id,
'identity_documents_verified' AS activity,
'identity_document_verified' AS activity,
MIN(identity_created_datetime) AS activity_datetime
FROM company_identity_documents
@@ -191,27 +197,28 @@ identity_documents_verified_activities AS (
GROUP BY
company_id
) AS unclean_identity_documents_verified_activities
) AS unclean_identity_document_verified_activities
FULL OUTER JOIN first_time_booking_activities
ON (unclean_identity_documents_verified_activities.company_id = first_time_booking_activities.company_id)
ON (unclean_identity_document_verified_activities.company_id = first_time_booking_activities.company_id)
),
identity_documents_uploaded_activities AS (
identity_document_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
IFNULL( unclean_identity_document_uploaded_activities.company_id , identity_document_verified_activities.company_id ) AS company_id,
IFF( unclean_identity_document_uploaded_activities.company_id IS NULL, 1, 0) AS is_data_cleansing_generate_row,
'identity_document_uploaded' AS activity,
3 AS activtity_rank,
IFNULL( unclean_identity_document_uploaded_activities.activity_datetime , identity_document_verified_activities.activity_datetime ) AS activity_datetime
FROM
(
SELECT
company_id,
'identity_documents_uploaded' AS activity,
'identity_document_uploaded' AS activity,
MIN(identity_created_datetime) AS activity_datetime
FROM company_identity_documents
@@ -219,19 +226,20 @@ identity_documents_uploaded_activities AS (
GROUP BY
company_id
) AS unclean_identity_documents_uploaded_activities
) AS unclean_identity_document_uploaded_activities
FULL OUTER JOIN identity_documents_verified_activities
ON (unclean_identity_documents_uploaded_activities.company_id = identity_documents_verified_activities.company_id)
FULL OUTER JOIN identity_document_verified_activities
ON (unclean_identity_document_uploaded_activities.company_id = identity_document_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,
IFNULL( unclean_email_verified_activities.company_id , identity_document_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
2 AS activtity_rank,
IFNULL( unclean_email_verified_activities.activity_datetime , identity_document_uploaded_activities.activity_datetime ) AS activity_datetime
FROM
(
@@ -249,8 +257,8 @@ email_verified_activities AS (
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)
FULL OUTER JOIN identity_document_uploaded_activities
ON (unclean_email_verified_activities.company_id = identity_document_uploaded_activities.company_id)
),
@@ -259,6 +267,7 @@ register_activities AS (
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,
1 AS activtity_rank,
IFNULL( unclean_register_activities.activity_datetime , email_verified_activities.activity_datetime ) AS activity_datetime
FROM
@@ -310,24 +319,30 @@ union_all_activities_flag_migrated_company AS (
--FINAL
sem_exchange__company_funnels AS (
sem_exchange__company_conversion_funnels AS (
SELECT
company_id,
is_data_cleansing_generate_row,
is_migrated_company,
activity,
activtity_rank,
IFF( ROW_NUMBER() OVER (PARTITION BY company_id ORDER BY activtity_rank DESC) = 1,
1,
0) AS latest_activity,
activity_datetime,
{% for activity in funnel_activity %}
{% for activity_type in funnel_activity %}
count(iff(activity = '{{activity}}', company_id, NULL))
OVER (ORDER BY activity_datetime) AS cumulative_{{activity}}_activity,
count(iff(activity = '{{activity_type}}', company_id, NULL))
OVER (ORDER BY activity_datetime) AS cumulative_{{activity_type}}_activity,
{% endfor %}
{% for activity in funnel_activity %}
{% for activity_type 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,
count(iff(activity = '{{activity_type}}' AND is_migrated_company = 0, company_id, NULL))
OVER (ORDER BY activity_datetime) AS exclude_migrated_cumulative_{{activity_type}}_activity,
{% endfor %}
@@ -338,4 +353,4 @@ sem_exchange__company_funnels AS (
ORDER BY activity_datetime
)
SELECT * FROM sem_exchange__company_funnels
SELECT * FROM sem_exchange__company_conversion_funnels