Merged PR 5238: Brings additional sales info from hubspot
# Description Brings additional info from Hubspot Deals regarding onboarding process # 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. - [ ] I have checked for DRY opportunities with other models and docs. - [ ] 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: #30249
This commit is contained in:
parent
ca3fc4add9
commit
43a20a3c22
6 changed files with 114 additions and 1 deletions
|
|
@ -1,7 +1,11 @@
|
||||||
{% set id_deal_pipelines_excluded = "('15380854')" %}
|
{% set id_deal_pipelines_excluded = "('15380854')" %}
|
||||||
|
{% set generic_account_manager_names = "('Host Services')" %}
|
||||||
|
|
||||||
with
|
with
|
||||||
stg_hubspot__deals as (select * from {{ ref("stg_hubspot__deals") }}),
|
stg_hubspot__deals as (select * from {{ ref("stg_hubspot__deals") }}),
|
||||||
|
stg_seed__hubspot_account_owner as (
|
||||||
|
select * from {{ ref("stg_seed__hubspot_account_owner") }}
|
||||||
|
),
|
||||||
stg_hubspot__deal_pipeline_stages as (
|
stg_hubspot__deal_pipeline_stages as (
|
||||||
select * from {{ ref("stg_hubspot__deal_pipeline_stages") }}
|
select * from {{ ref("stg_hubspot__deal_pipeline_stages") }}
|
||||||
),
|
),
|
||||||
|
|
@ -16,6 +20,15 @@ select
|
||||||
d.live_date_utc,
|
d.live_date_utc,
|
||||||
d.cancellation_date_utc,
|
d.cancellation_date_utc,
|
||||||
d.account_manager,
|
d.account_manager,
|
||||||
|
case
|
||||||
|
when d.onboarding_owner is not null
|
||||||
|
then onboarding_owner
|
||||||
|
when
|
||||||
|
d.onboarding_owner is null
|
||||||
|
and d.account_manager in {{ generic_account_manager_names }}
|
||||||
|
then hao.hubspot_account_owner
|
||||||
|
else null
|
||||||
|
end as onboarding_owner,
|
||||||
dp.deal_pipeline_name as deal_pipeline,
|
dp.deal_pipeline_name as deal_pipeline,
|
||||||
dps.stage_name as deal_hubspot_stage,
|
dps.stage_name as deal_hubspot_stage,
|
||||||
d.cancellation_category,
|
d.cancellation_category,
|
||||||
|
|
@ -27,6 +40,7 @@ select
|
||||||
d.dashboard_type,
|
d.dashboard_type,
|
||||||
d.pricing_structure,
|
d.pricing_structure,
|
||||||
d.partnership_services,
|
d.partnership_services,
|
||||||
|
d.expressed_service_interest,
|
||||||
d.created_at_utc,
|
d.created_at_utc,
|
||||||
d.created_date_utc,
|
d.created_date_utc,
|
||||||
d.updated_at_utc,
|
d.updated_at_utc,
|
||||||
|
|
@ -34,5 +48,8 @@ select
|
||||||
from stg_hubspot__deals d
|
from stg_hubspot__deals d
|
||||||
left join stg_hubspot__deal_pipeline_stages dps on d.id_deal_stage = dps.id_stage
|
left join stg_hubspot__deal_pipeline_stages dps on d.id_deal_stage = dps.id_stage
|
||||||
left join stg_hubspot__deal_pipelines dp on dps.id_deal_pipeline = dp.id_deal_pipeline
|
left join stg_hubspot__deal_pipelines dp on dps.id_deal_pipeline = dp.id_deal_pipeline
|
||||||
|
left join
|
||||||
|
stg_seed__hubspot_account_owner hao
|
||||||
|
on d.id_hubspot_account_owner = hao.id_hubspot_account_owner
|
||||||
-- Exclude Guardhog pipelines
|
-- Exclude Guardhog pipelines
|
||||||
where dps.id_deal_pipeline not in {{ id_deal_pipelines_excluded }}
|
where dps.id_deal_pipeline not in {{ id_deal_pipelines_excluded }}
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,12 @@ models:
|
||||||
The name of the account manager that is currently taking care of this
|
The name of the account manager that is currently taking care of this
|
||||||
deal.
|
deal.
|
||||||
|
|
||||||
|
- name: onboarding_owner
|
||||||
|
data_type: text
|
||||||
|
description: |
|
||||||
|
The name of the person who is or has been in charge of onboarding this
|
||||||
|
deal.
|
||||||
|
|
||||||
- name: deal_pipeline
|
- name: deal_pipeline
|
||||||
data_type: text
|
data_type: text
|
||||||
description: |
|
description: |
|
||||||
|
|
@ -111,6 +117,18 @@ models:
|
||||||
for complete accuracy.
|
for complete accuracy.
|
||||||
It can be null.
|
It can be null.
|
||||||
|
|
||||||
|
- name: expressed_service_interest
|
||||||
|
data_type: text
|
||||||
|
description: |
|
||||||
|
The services that captured the interest of the potential client
|
||||||
|
during onboarding calls, for New Dash.
|
||||||
|
This field has been processed by applying a standardized separation
|
||||||
|
"|" and an upper case. Be aware that this is not how data is
|
||||||
|
presented in HubSpot.
|
||||||
|
Not to be confused with the actual services that host has applied.
|
||||||
|
For the later, check backend data.
|
||||||
|
It can be null.
|
||||||
|
|
||||||
- name: created_at_utc
|
- name: created_at_utc
|
||||||
data_type: timestamp with time zone
|
data_type: timestamp with time zone
|
||||||
description: Timestamp of when the record was created in Hubspot
|
description: Timestamp of when the record was created in Hubspot
|
||||||
|
|
|
||||||
|
|
@ -399,7 +399,7 @@ models:
|
||||||
description: |
|
description: |
|
||||||
The pricing structure that the customer has. It can be null.
|
The pricing structure that the customer has. It can be null.
|
||||||
|
|
||||||
- name: partnership_services_raw
|
- name: raw_partnership_services
|
||||||
data_type: text
|
data_type: text
|
||||||
description: |
|
description: |
|
||||||
The partnership type, i.e., the services that the client has
|
The partnership type, i.e., the services that the client has
|
||||||
|
|
@ -424,6 +424,29 @@ models:
|
||||||
for complete accuracy.
|
for complete accuracy.
|
||||||
It can be null.
|
It can be null.
|
||||||
|
|
||||||
|
- name: raw_expressed_service_interest
|
||||||
|
data_type: text
|
||||||
|
description: |
|
||||||
|
The services that captured the interest of the potential client
|
||||||
|
during onboarding calls, for New Dash.
|
||||||
|
This exactly matches the input as is from HubSpot, in the sense
|
||||||
|
that no processing has been applied.
|
||||||
|
Not to be confused with the actual services that host has applied.
|
||||||
|
For the later, check backend data.
|
||||||
|
It can be null.
|
||||||
|
|
||||||
|
- name: expressed_service_interest
|
||||||
|
data_type: text
|
||||||
|
description: |
|
||||||
|
The services that captured the interest of the potential client
|
||||||
|
during onboarding calls, for New Dash.
|
||||||
|
This field has been processed by applying a standardized separation
|
||||||
|
"|" and an upper case. Be aware that this is not how data is
|
||||||
|
presented in HubSpot.
|
||||||
|
Not to be confused with the actual services that host has applied.
|
||||||
|
For the later, check backend data.
|
||||||
|
It can be null.
|
||||||
|
|
||||||
- name: created_at_utc
|
- name: created_at_utc
|
||||||
data_type: timestamp with time zone
|
data_type: timestamp with time zone
|
||||||
description: ""
|
description: ""
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,27 @@ with
|
||||||
'g'
|
'g'
|
||||||
)
|
)
|
||||||
) as partnership_services,
|
) as partnership_services,
|
||||||
|
{{ adapter.quote("properties") }}
|
||||||
|
->> 'services' as raw_expressed_service_interest,
|
||||||
|
-- Services (that are of interest in onboarding/sales time) are stored as
|
||||||
|
-- a string with multiple values separated by ; and these can contain
|
||||||
|
-- leading or trailing spaces.
|
||||||
|
-- In the following field we apply a standardization to the
|
||||||
|
-- values by replacing the separators with | and converting the values
|
||||||
|
-- to uppercase. The regex applied is:
|
||||||
|
-- \s* → Matches any leading or trailing spaces.
|
||||||
|
-- [;] → Matches ; as separator.
|
||||||
|
-- \s* → Again, ensures spaces around the separator are also replaced.
|
||||||
|
-- 'g' → Applies the replacement globally (to all occurrences in the
|
||||||
|
-- string).
|
||||||
|
upper(
|
||||||
|
regexp_replace(
|
||||||
|
{{ adapter.quote("properties") }} ->> 'services',
|
||||||
|
'\s*[;]\s*',
|
||||||
|
'|',
|
||||||
|
'g'
|
||||||
|
)
|
||||||
|
) as expressed_service_interest,
|
||||||
{{ adapter.quote("properties") }} as properties,
|
{{ adapter.quote("properties") }} as properties,
|
||||||
{{ adapter.quote("createdAt") }} as created_at_utc,
|
{{ adapter.quote("createdAt") }} as created_at_utc,
|
||||||
cast({{ adapter.quote("createdAt") }} as date) as created_date_utc,
|
cast({{ adapter.quote("createdAt") }} as date) as created_date_utc,
|
||||||
|
|
|
||||||
|
|
@ -387,3 +387,30 @@ seeds:
|
||||||
achieve by the end of the financial year.
|
achieve by the end of the financial year.
|
||||||
data_tests:
|
data_tests:
|
||||||
- not_null
|
- not_null
|
||||||
|
|
||||||
|
- name: stg_seed__hubspot_account_owner
|
||||||
|
description: |
|
||||||
|
A seed that converts the id_hubspot_account_owner to the
|
||||||
|
person's name for Hubspot onboarding purposes.
|
||||||
|
To be revisited; ideally this is a standalone Hubspot
|
||||||
|
property.
|
||||||
|
config:
|
||||||
|
column_types:
|
||||||
|
id_hubspot_account_owner: varchar
|
||||||
|
|
||||||
|
columns:
|
||||||
|
- name: id_hubspot_account_owner
|
||||||
|
data_type: character varying
|
||||||
|
description: |
|
||||||
|
ID of the hubspot account owner.
|
||||||
|
data_tests:
|
||||||
|
- not_null
|
||||||
|
- unique
|
||||||
|
|
||||||
|
- name: hubspot_account_owner
|
||||||
|
data_type: character varying
|
||||||
|
description: |
|
||||||
|
Name of the hubspot account owner.
|
||||||
|
data_tests:
|
||||||
|
- not_null
|
||||||
|
- unique
|
||||||
|
|
|
||||||
7
seeds/stg_seed__hubspot_account_owner.csv
Normal file
7
seeds/stg_seed__hubspot_account_owner.csv
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
id_hubspot_account_owner,hubspot_account_owner
|
||||||
|
"1732260638",Agustina Gil
|
||||||
|
"679781281",Cali Bowen
|
||||||
|
"203088812",Chloe Fraser
|
||||||
|
"1837277529",Danielle Miller
|
||||||
|
"76054743",María belén Florio
|
||||||
|
"76054690",Paola Zapata
|
||||||
|
Loading…
Add table
Add a link
Reference in a new issue