From 616b949ba47952438d70f067bd448beb309b4833 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oriol=20Roqu=C3=A9=20Paniagua?= Date: Wed, 4 Dec 2024 09:45:09 +0000 Subject: [PATCH] Merged PR 3769: Adds int_core__ab_test_monitoring_guest_journey # Description Adds a table that contain the main information needed for metric computation at verification request level that is part of an A/B test. # Checklist - [X] The edited models and dependants run properly with production data. - [X] The edited models are sufficiently documented. - [X] The edited models contain PK tests, and I've ran and passed them. - [NA] I have checked for DRY opportunities with other models and docs. - [X] I've picked the right materialization for the affected models. # Other - [ ] Check if a full-refresh is required after this PR is merged. Related work items: #25146 --- ...core__ab_test_monitoring_guest_journey.sql | 110 ++++++++++++++++++ models/intermediate/core/schema.yml | 96 +++++++++++++++ 2 files changed, 206 insertions(+) create mode 100644 models/intermediate/core/int_core__ab_test_monitoring_guest_journey.sql diff --git a/models/intermediate/core/int_core__ab_test_monitoring_guest_journey.sql b/models/intermediate/core/int_core__ab_test_monitoring_guest_journey.sql new file mode 100644 index 0000000..63058d3 --- /dev/null +++ b/models/intermediate/core/int_core__ab_test_monitoring_guest_journey.sql @@ -0,0 +1,110 @@ +{{ + config( + materialized="table", unique_key=["id_verification_request", "ab_test_name"] + ) +}} +{% set deposit_fees_verification_payment_type_items = "('FEE')" %} +{% set waiver_fees_verification_payment_type_items = "('WAIVER')" %} +{% set checkin_cover_fees_verification_payment_type_items = "('CHECKINCOVER')" %} +with + int_core__ab_test_tracking_guest_journey as ( + select * from {{ ref("int_core__ab_test_tracking_guest_journey") }} + ), + int_core__verification_payments as ( + select * from {{ ref("int_core__verification_payments", version=2) }} + ), + int_core__verification_requests as ( + select * from {{ ref("int_core__verification_requests") }} + ), + int_core__guest_satisfaction_responses as ( + select * from {{ ref("int_core__guest_satisfaction_responses") }} + ), + ab_test_tracking as ( + select + id_verification_request, + ab_test_name, + variation, + date(first_appearance_at_utc) as first_appearance_date_utc + from int_core__ab_test_tracking_guest_journey + ), + guest_journey_data as ( + select + abt.ab_test_name, + abt.variation, + abt.id_verification_request, + abt.first_appearance_date_utc, + vr.verification_estimated_started_date_utc as verification_started_date_utc, + vr.verification_estimated_completed_date_utc + as verification_completed_date_utc, + gsr.experience_rating + from ab_test_tracking abt + left join + int_core__verification_requests vr + on abt.id_verification_request = vr.id_verification_request + left join + int_core__guest_satisfaction_responses gsr + on abt.id_verification_request = gsr.id_verification_request + ) +select + gjd.ab_test_name, + gjd.variation, + gjd.id_verification_request, + gjd.first_appearance_date_utc, + gjd.verification_started_date_utc, + gjd.verification_completed_date_utc, + gjd.experience_rating, + max(vp.payment_paid_date_utc) as last_payment_paid_date_utc, + sum( + case + when + upper(vp.verification_payment_type) + in {{ deposit_fees_verification_payment_type_items }} + or upper(vp.verification_payment_type) + in {{ waiver_fees_verification_payment_type_items }} + or upper(vp.verification_payment_type) + in {{ checkin_cover_fees_verification_payment_type_items }} + then amount_without_taxes_in_gbp + else null + end + ) as guest_revenue_without_taxes_in_gbp, + sum( + case + when + upper(vp.verification_payment_type) + in {{ deposit_fees_verification_payment_type_items }} + then amount_without_taxes_in_gbp + else null + end + ) as deposit_fees_without_taxes_in_gbp, + sum( + case + when + upper(vp.verification_payment_type) + in {{ waiver_fees_verification_payment_type_items }} + then amount_without_taxes_in_gbp + else null + end + ) as waiver_fees_without_taxes_in_gbp, + sum( + case + when + upper(vp.verification_payment_type) + in {{ checkin_cover_fees_verification_payment_type_items }} + then amount_without_taxes_in_gbp + else null + end + ) as check_in_cover_fees_without_taxes_in_gbp +from guest_journey_data gjd +left join + int_core__verification_payments vp + on gjd.id_verification_request = vp.id_verification_request + and upper(vp.payment_status) = {{ var("paid_payment_state") }} + and ( + upper(vp.verification_payment_type) + in {{ deposit_fees_verification_payment_type_items }} + or upper(vp.verification_payment_type) + in {{ waiver_fees_verification_payment_type_items }} + or upper(vp.verification_payment_type) + in {{ checkin_cover_fees_verification_payment_type_items }} + ) +group by 1, 2, 3, 4, 5, 6, 7 diff --git a/models/intermediate/core/schema.yml b/models/intermediate/core/schema.yml index 2f8b5f4..ef27609 100644 --- a/models/intermediate/core/schema.yml +++ b/models/intermediate/core/schema.yml @@ -4333,3 +4333,99 @@ models: purposes. Cannot be null. tests: - not_null + + - name: int_core__ab_test_monitoring_guest_journey + description: | + Provides the Guest Journey A/B test key information to build metric monitoring on top. + + The purpose of this table is not to compute the metrics themselves, but rather leave + a bit of open possibilities for whenever we're analysing results later on. This is + already materialised to avoid running long queries in the notebooks. + + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - id_verification_request + - ab_test_name + + columns: + - name: id_verification_request + data_type: integer + description: | + Identifier of the Verification Request. Acts as foreign key to the Verification Request table. + It can be duplicated across different Feature Flags - meaning the same verification request + can be part of none, one, or several A/B tests. + In this table, a Verification Request or Guest Journey can only appear once per A/B test. + Cannot be null. + tests: + - not_null + + - name: ab_test_name + data_type: string + description: | + Name of the Guest Journey A/B test. It corresponds to the Feature Flag Name in the + backend. Cannot be null. + tests: + - not_null + + - name: variation + data_type: string + description: | + Identifier of the variation a given Verification Request is in, within a + given Guest Journey A/B test. Cannot be null. + tests: + - not_null + + - name: first_appearance_date_utc + data_type: date + description: | + Date of the first Verification Request Feature Flag record created + with the same verification request and A/B test name. Mostly for information + purposes. Cannot be null. + tests: + - not_null + + - name: verification_started_date_utc + data_type: date + description: | + Date of when the Guest Journey was started. Can be null. + + - name: verification_completed_date_utc + data_type: date + description: | + Date of when the Guest Journey was completed. Can be null. + + - name: experience_rating + data_type: integer + description: | + CSAT score value for the Guest Journey. Can be null. + + - name: last_payment_paid_date_utc + data_type: date + description: | + Date of when the last paid payment on this Guest Journey + happened. Can be null. + + - name: guest_revenue_without_taxes_in_gbp + data_type: float + description: | + Total guest revenue paid without taxes in GBP, including Deposit + Fees, Waiver Fees and Check-In Cover fees. Can be null. + + - name: deposit_fees_without_taxes_in_gbp + data_type: float + description: | + Deposit fees revenue paid without taxes in GBP. + Can be null. + + - name: waiver_fees_without_taxes_in_gbp + data_type: float + description: | + Waiver fees revenue paid without taxes in GBP. + Can be null. + + - name: check_in_cover_fees_without_taxes_in_gbp + data_type: float + description: | + Check-in Cover fees revenue paid without taxes in GBP. + Can be null.