Merged PR 3137: Growth score to reporting

# Description

Copies intermediate to reporting for growth score by deal. Schema is copy-paste from intermediate changing the model's name.

# 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: #22635
This commit is contained in:
Oriol Roqué Paniagua 2024-10-14 12:26:01 +00:00
parent a6191eba46
commit eb213acb9e
4 changed files with 792 additions and 65 deletions

View file

@ -74,6 +74,7 @@ with
-- Dates - For Information Purposes
given_month.first_day_month as given_month_first_day_month,
previous_1_month.first_day_month as previous_1_month_first_day_month,
previous_2_month.first_day_month as previous_2_month_first_day_month,
previous_12_month.first_day_month as previous_12_month_first_day_month,
previous_13_month.first_day_month as previous_13_month_first_day_month,
aggregated_revenue.from_first_day_month
@ -84,6 +85,7 @@ with
-- Revenue --
given_month.revenue_in_gbp as given_month_revenue_in_gbp,
previous_1_month.revenue_in_gbp as previous_1_month_revenue_in_gbp,
previous_2_month.revenue_in_gbp as previous_2_month_revenue_in_gbp,
previous_12_month.revenue_in_gbp as previous_12_month_revenue_in_gbp,
previous_13_month.revenue_in_gbp as previous_13_month_revenue_in_gbp,
-- In these YoY and MoM computations, if negative revenue is found,
@ -92,6 +94,9 @@ with
nullif(greatest(given_month.revenue_in_gbp, 0), 0)
/ nullif(greatest(previous_1_month.revenue_in_gbp, 0), 0)
- 1 as mom_revenue_growth,
nullif(greatest(previous_1_month.revenue_in_gbp, 0), 0)
/ nullif(greatest(previous_2_month.revenue_in_gbp, 0), 0)
- 1 as mom_1_month_shift_revenue_growth,
nullif(greatest(given_month.revenue_in_gbp, 0), 0)
/ nullif(greatest(previous_12_month.revenue_in_gbp, 0), 0)
- 1 as yoy_revenue_growth,
@ -146,6 +151,12 @@ with
on previous_1_month.first_day_month + interval '1 months'
= given_month.first_day_month
and previous_1_month.id_deal = given_month.id_deal
-- Retrieve monthly data from same deal and 2 months ago
left join
deal_history_from_previous_months as previous_2_month
on previous_2_month.first_day_month + interval '2 months'
= given_month.first_day_month
and previous_2_month.id_deal = given_month.id_deal
-- Retrieve monthly data from same deal and the equivalent
-- month from last year
left join
@ -154,8 +165,7 @@ with
= given_month.first_day_month
and previous_12_month.id_deal = given_month.id_deal
-- Retrieve monthly data from same deal and the equivalent
-- month from last
-- year and 1 month before
-- month from last year and 1 month before
left join
deal_history_from_previous_months as previous_13_month
on previous_13_month.first_day_month + interval '13 months'
@ -166,62 +176,124 @@ with
revenue_12_months_window_aggregation_per_deal aggregated_revenue
on aggregated_revenue.id_deal = given_month.id_deal
and aggregated_revenue.first_day_month = given_month.first_day_month
),
growth_score_computation as (
select
m.date,
m.id_deal,
m.main_deal_name,
m.main_billing_country_iso_3_per_deal,
m.deal_lifecycle_state,
m.given_month_first_day_month,
m.previous_1_month_first_day_month,
m.previous_2_month_first_day_month,
m.previous_12_month_first_day_month,
m.previous_13_month_first_day_month,
m.aggregated_revenue_from_first_day_month,
m.aggregated_revenue_to_first_day_month,
m.given_month_revenue_in_gbp,
m.previous_1_month_revenue_in_gbp,
m.previous_2_month_revenue_in_gbp,
m.previous_12_month_revenue_in_gbp,
m.previous_13_month_revenue_in_gbp,
cast(m.mom_revenue_growth as numeric(19, 6)) as mom_revenue_growth,
cast(
m.mom_1_month_shift_revenue_growth as numeric(19, 6)
) as mom_1_month_shift_revenue_growth,
cast(m.yoy_revenue_growth as numeric(19, 6)) as yoy_revenue_growth,
cast(
m.yoy_1_month_shift_revenue_growth as numeric(19, 6)
) as yoy_1_month_shift_revenue_growth,
m.given_month_created_bookings,
m.previous_1_month_created_bookings,
m.previous_12_month_created_bookings,
cast(
m.mom_created_bookings_growth as numeric(19, 6)
) as mom_created_bookings_growth,
cast(
m.yoy_created_bookings_growth as numeric(19, 6)
) as yoy_created_bookings_growth,
m.given_month_listings_booked_in_month,
m.previous_1_month_listings_booked_in_month,
m.previous_12_month_listings_booked_in_month,
cast(
m.mom_listings_booked_in_month_growth as numeric(19, 6)
) as mom_listings_booked_in_month_growth,
cast(
m.yoy_listings_booked_in_month_growth as numeric(19, 6)
) as yoy_listings_booked_in_month_growth,
m.deal_revenue_12_months_window,
m.effective_deal_revenue_12_months_window,
m.effective_global_revenue_12_months_window,
m.deal_contribution_share_to_global_revenue,
m.deal_contribution_rank_to_global_revenue,
cast(
(
coalesce(m.mom_created_bookings_growth, 0)
+ coalesce(m.mom_listings_booked_in_month_growth, 0)
+ coalesce(m.mom_1_month_shift_revenue_growth, 0)
)
/ 3 as numeric(19, 6)
) as avg_mom_growth_score,
cast(
(
coalesce(m.yoy_created_bookings_growth, 0)
+ coalesce(m.yoy_listings_booked_in_month_growth, 0)
+ coalesce(m.yoy_1_month_shift_revenue_growth, 0)
)
/ 3 as numeric(19, 6)
) as avg_yoy_growth_score,
cast(
(
coalesce(m.yoy_created_bookings_growth, 0)
+ coalesce(m.yoy_listings_booked_in_month_growth, 0)
+ coalesce(m.yoy_1_month_shift_revenue_growth, 0)
+ coalesce(m.mom_created_bookings_growth, 0)
+ coalesce(m.mom_listings_booked_in_month_growth, 0)
+ coalesce(m.mom_1_month_shift_revenue_growth, 0)
)
/ 6 as numeric(19, 6)
) as avg_growth_score,
cast(
(
(
coalesce(m.yoy_created_bookings_growth, 0)
+ coalesce(m.yoy_listings_booked_in_month_growth, 0)
+ coalesce(m.yoy_1_month_shift_revenue_growth, 0)
+ coalesce(m.mom_created_bookings_growth, 0)
+ coalesce(m.mom_listings_booked_in_month_growth, 0)
+ coalesce(m.mom_1_month_shift_revenue_growth, 0)
)
/ 6
)
* deal_contribution_share_to_global_revenue as numeric(19, 6)
) as weighted_avg_growth_score
from metrics_attribution_to_given_month_per_deal m
)
select
m.date,
m.id_deal,
m.main_deal_name,
m.main_billing_country_iso_3_per_deal,
m.deal_lifecycle_state,
m.given_month_first_day_month,
m.previous_1_month_first_day_month,
m.previous_12_month_first_day_month,
m.previous_13_month_first_day_month,
m.aggregated_revenue_from_first_day_month,
m.aggregated_revenue_to_first_day_month,
m.given_month_revenue_in_gbp,
m.previous_1_month_revenue_in_gbp,
m.previous_12_month_revenue_in_gbp,
m.previous_13_month_revenue_in_gbp,
m.mom_revenue_growth,
m.yoy_revenue_growth,
m.yoy_1_month_shift_revenue_growth,
m.given_month_created_bookings,
m.previous_1_month_created_bookings,
m.previous_12_month_created_bookings,
m.mom_created_bookings_growth,
m.yoy_created_bookings_growth,
m.given_month_listings_booked_in_month,
m.previous_1_month_listings_booked_in_month,
m.previous_12_month_listings_booked_in_month,
m.mom_listings_booked_in_month_growth,
m.yoy_listings_booked_in_month_growth,
m.deal_revenue_12_months_window,
m.effective_deal_revenue_12_months_window,
m.effective_global_revenue_12_months_window,
m.deal_contribution_share_to_global_revenue,
m.deal_contribution_rank_to_global_revenue,
(
coalesce(m.yoy_created_bookings_growth, 0)
+ coalesce(m.yoy_listings_booked_in_month_growth, 0)
+ coalesce(m.yoy_1_month_shift_revenue_growth, 0)
)
/ 3 as avg_growth_score,
(
(
coalesce(m.yoy_created_bookings_growth, 0)
+ coalesce(m.yoy_listings_booked_in_month_growth, 0)
+ coalesce(m.yoy_1_month_shift_revenue_growth, 0)
)
/ 3
)
* deal_contribution_share_to_global_revenue as weighted_avg_growth_score
from metrics_attribution_to_given_month_per_deal m
*,
-- Applies a categorisation based on the score value. These scores thresholds are
-- opinionated
case
when weighted_avg_growth_score <= -0.001
then 'TOP LOSER'
when weighted_avg_growth_score > -0.001 and weighted_avg_growth_score < 0
then 'LOSER'
when weighted_avg_growth_score = 0
then 'FLAT'
when weighted_avg_growth_score > 0 and weighted_avg_growth_score < 0.001
then 'WINNER'
when weighted_avg_growth_score >= 0.001
then 'TOP WINNER'
else 'UNSET'
end as categorisation_weighted_avg_growth_score
from growth_score_computation

View file

@ -605,11 +605,12 @@ models:
- Total revenue (in gbp)
The main idea is, for each deal, to compare each of these metrics by
checking the latest monthly value vs. the monthly value of the equivalent
month on the previous year - in other words, a year-on-year (YoY) comparison.
checking the latest monthly value vs. 1) the monthly value of the equivalent
month on the previous year and 2) the monthly value of the previous month
- in other words, a year-on-year (YoY) and month-on-month (MoM) comparison.
We do this comparison by doing a relative incremental.
The growth score is computed then by averaging the outcome of the 3 scores.
The growth score is computed then by averaging the outcome of the 6 scores.
Lastly, in order to provide a prioritisation sense, we have a weighted growth
score that results from the multiplication of the growth score per the revenue
weight a specific deal has provided in the previous 12 months.
@ -687,6 +688,15 @@ models:
It can be null if no previous history for that
deal is found.
- name: previous_2_month_first_day_month
data_type: date
description: |
Informative field. It indicates the first day of the
month 2 months before with respect to date.
If date = 2024-09-30, this field will be 2024-07-01.
It can be null if no previous history for that
deal is found.
- name: previous_12_month_first_day_month
data_type: date
description: |
@ -749,12 +759,22 @@ models:
This value can be null, thus indicating that no
history is available.
- name: previous_2_month_revenue_in_gbp
data_type: decimal
description: |
Monthly value representing revenue in GBP
for a specific deal. This value corresponds to
the monthly amount generated 2 months ago
This value can be negative.
This value can be null, thus indicating that no
history is available.
- name: previous_12_month_revenue_in_gbp
data_type: decimal
description: |
Monthly value representing revenue in GBP
for a specific deal. This value corresponds to
monthly amount generated 12 months ago.
the monthly amount generated 12 months ago.
This value can be negative.
This value can be null, thus indicating that no
history is available.
@ -764,7 +784,7 @@ models:
description: |
Monthly value representing revenue in GBP
for a specific deal. This value corresponds to
monthly amount generated 13 months ago.
the monthly amount generated 13 months ago.
This value can be negative.
This value can be null, thus indicating that no
history is available.
@ -782,6 +802,20 @@ models:
min_value: -1
strictly: false
- name: mom_1_month_shift_revenue_growth
data_type: decimal
description: |
Relative increment of the revenue generated in the
previous month with respect to the one generated 2
months ago.
It can be null if any revenue used in the computation
is null or it's negative.
This field is used for the growth score computation.
tests:
- dbt_expectations.expect_column_values_to_be_between:
min_value: -1
strictly: false
- name: yoy_revenue_growth
data_type: decimal
description: |
@ -855,6 +889,7 @@ models:
the previous month.
It can be null if the bookings created in the
previous month are null.
This field is used for the growth score computation.
tests:
- dbt_expectations.expect_column_values_to_be_between:
min_value: -1
@ -920,6 +955,7 @@ models:
the previous month.
It can be null if the listings booked in month in the
previous month are null.
This field is used for the growth score computation.
tests:
- dbt_expectations.expect_column_values_to_be_between:
min_value: -1
@ -1007,7 +1043,18 @@ models:
tests:
- not_null
- name: avg_growth_score
- name: avg_mom_growth_score
data_type: decimal
description: |
Represents the average score of MoM growth of created
bookings, MoM growth of listings booked in month and
MoM shifted by one month of revenue.
It indicates the tendency of growth of the deal without
taking into account its revenue size. It cannot be null.
tests:
- not_null
- name: avg_yoy_growth_score
data_type: decimal
description: |
Represents the average score of YoY growth of created
@ -1018,6 +1065,17 @@ models:
tests:
- not_null
- name: avg_growth_score
data_type: decimal
description: |
Represents the average score of YoY and MoM growth of created
bookings, YoY and MoM growth of listings booked in month and
YoY and MoM shifted by one month of revenue.
It indicates the tendency of growth of the deal without
taking into account its revenue size. It cannot be null.
tests:
- not_null
- name: weighted_avg_growth_score
data_type: decimal
description: |
@ -1029,3 +1087,22 @@ models:
the financial impact this deal tendency can have.
tests:
- not_null
- name: categorisation_weighted_avg_growth_score
data_type: string
description: |
Discrete categorisation of weighted_avg_growth_score.
It helps easily identifying which accounts are top losers,
losers, flat, winners and top winners.
Currently the categorisation is based on the score itself
rather than selecting a top up/down.
tests:
- not_null
- accepted_values:
values:
- TOP LOSER
- LOSER
- FLAT
- WINNER
- TOP WINNER
- UNSET

View file

@ -0,0 +1,61 @@
with
int_monthly_growth_score_by_deal as (
select * from {{ ref("int_monthly_growth_score_by_deal") }}
)
select
date as date,
id_deal as id_deal,
main_deal_name as main_deal_name,
main_billing_country_iso_3_per_deal as main_billing_country_iso_3_per_deal,
deal_lifecycle_state as deal_lifecycle_state,
given_month_first_day_month as given_month_first_day_month,
previous_1_month_first_day_month as previous_1_month_first_day_month,
previous_2_month_first_day_month as previous_2_month_first_day_month,
previous_12_month_first_day_month as previous_12_month_first_day_month,
previous_13_month_first_day_month as previous_13_month_first_day_month,
aggregated_revenue_from_first_day_month as aggregated_revenue_from_first_day_month,
aggregated_revenue_to_first_day_month as aggregated_revenue_to_first_day_month,
given_month_revenue_in_gbp as given_month_revenue_in_gbp,
previous_1_month_revenue_in_gbp as previous_1_month_revenue_in_gbp,
previous_2_month_revenue_in_gbp as previous_2_month_revenue_in_gbp,
previous_12_month_revenue_in_gbp as previous_12_month_revenue_in_gbp,
previous_13_month_revenue_in_gbp as previous_13_month_revenue_in_gbp,
mom_revenue_growth as mom_revenue_growth,
mom_1_month_shift_revenue_growth as mom_1_month_shift_revenue_growth,
yoy_revenue_growth as yoy_revenue_growth,
yoy_1_month_shift_revenue_growth as yoy_1_month_shift_revenue_growth,
given_month_created_bookings as given_month_created_bookings,
previous_1_month_created_bookings as previous_1_month_created_bookings,
previous_12_month_created_bookings as previous_12_month_created_bookings,
mom_created_bookings_growth as mom_created_bookings_growth,
yoy_created_bookings_growth as yoy_created_bookings_growth,
given_month_listings_booked_in_month as given_month_listings_booked_in_month,
previous_1_month_listings_booked_in_month
as previous_1_month_listings_booked_in_month,
previous_12_month_listings_booked_in_month
as previous_12_month_listings_booked_in_month,
mom_listings_booked_in_month_growth as mom_listings_booked_in_month_growth,
yoy_listings_booked_in_month_growth as yoy_listings_booked_in_month_growth,
deal_revenue_12_months_window as deal_revenue_12_months_window,
effective_deal_revenue_12_months_window as effective_deal_revenue_12_months_window,
effective_global_revenue_12_months_window
as effective_global_revenue_12_months_window,
deal_contribution_share_to_global_revenue
as deal_contribution_share_to_global_revenue,
deal_contribution_rank_to_global_revenue
as deal_contribution_rank_to_global_revenue,
avg_mom_growth_score as avg_mom_growth_score,
avg_yoy_growth_score as avg_yoy_growth_score,
avg_growth_score as avg_growth_score,
weighted_avg_growth_score as weighted_avg_growth_score,
categorisation_weighted_avg_growth_score as categorisation_weighted_avg_growth_score
from int_monthly_growth_score_by_deal

View file

@ -514,3 +514,520 @@ models:
description: day monthly number of the given date.
tests:
- not_null
- name: monthly_growth_score_by_deal
description: |
The main goal of this model is to provide a growth score by deal and month.
The idea behind it is that each deal will have some business performance
associated to it over the months, and that comparing how it is currently
performing vs. historical data we can determine whether the tendency is to
grow or to decay. This is specially useful for AMs to focus their effort
towards the clients that have a negative tendency.
The computation of the growth score is based on 3 main indicators:
- Created bookings
- Listings booked in month
- Total revenue (in gbp)
The main idea is, for each deal, to compare each of these metrics by
checking the latest monthly value vs. 1) the monthly value of the equivalent
month on the previous year and 2) the monthly value of the previous month
- in other words, a year-on-year (YoY) and month-on-month (MoM) comparison.
We do this comparison by doing a relative incremental.
The growth score is computed then by averaging the outcome of the 6 scores.
Lastly, in order to provide a prioritisation sense, we have a weighted growth
score that results from the multiplication of the growth score per the revenue
weight a specific deal has provided in the previous 12 months.
However, this is not strictly true for Revenue because 1) we have an invoicing
delay and 2) in some cases, monthly revenue per deal can be negative. In this
specific cases, the YoY comparison is shifted by one month, and an effective
revenue value for the revenue share is computed, that cannot be lower than 0.
In order to keep both a properly set up score and revenue consistency, both
a real revenue value and effective revenue value are present in this model,
while no MoM or YoY value is computed if negative revenue is found.
Lastly, this model provides informative date fields, deal attributes, absolute
metric values and MoM & YoY relative incrementals to enrich reporting.
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- date
- id_deal
columns:
- name: date
data_type: date
description: |
Date corresponding to the last day of the month. Given month
metrics are inclusive to this date. Together with id_deal, it
acts as the primary key of this model.
tests:
- not_null
- name: id_deal
data_type: string
description: |
Unique identifier of a Deal. Together with date, it acts as
the primary key of this model.
tests:
- not_null
- name: main_deal_name
data_type: string
description: |
Main name for a Deal, representing the client.
tests:
- not_null
- name: main_billing_country_iso_3_per_deal
data_type: string
description: |
Main billing country for this client. In some cases
it can be null.
- name: deal_lifecycle_state
data_type: string
description: |
Identifier of the lifecycle state of a given deal
in a given month.
- name: given_month_first_day_month
data_type: date
description: |
Informative field. It indicates the first day of the
month corresponding to date.
If date = 2024-09-30, this field will be 2024-09-01.
tests:
- not_null
- name: previous_1_month_first_day_month
data_type: date
description: |
Informative field. It indicates the first day of the
previous month with respect to date.
If date = 2024-09-30, this field will be 2024-08-01.
It can be null if no previous history for that
deal is found.
- name: previous_2_month_first_day_month
data_type: date
description: |
Informative field. It indicates the first day of the
month 2 months before with respect to date.
If date = 2024-09-30, this field will be 2024-07-01.
It can be null if no previous history for that
deal is found.
- name: previous_12_month_first_day_month
data_type: date
description: |
Informative field. It indicates the first day of the
month with respect to date, but on the previous year.
If date = 2024-09-30, this field will be 2023-09-01.
It can be null if no previous history for that
deal is found.
- name: previous_13_month_first_day_month
data_type: date
description: |
Informative field. It indicates the first day of the
previous month with respect to date, but on the previous year.
If date = 2024-09-30, this field will be 2023-08-01.
It can be null if no previous history for that
deal is found.
- name: aggregated_revenue_from_first_day_month
data_type: date
description: |
Informative field. It indicates the first day of the
month from the lower bound range in which the revenue
aggregation is computed.
The aggregation uses the previous 12 months in which we
know the revenue, thus:
If date = 2024-09-30, this field will be 2023-09-01.
It can be null if no previous history for that
deal is found.
- name: aggregated_revenue_to_first_day_month
data_type: date
description: |
Informative field. It indicates the first day of the
month from the upper bound range in which the revenue
aggregation is computed.
The aggregation uses the previous 12 months in which we
know the revenue, thus:
If date = 2024-09-30, this field will be 2023-08-01.
It can be null if no previous history for that
deal is found.
- name: given_month_revenue_in_gbp
data_type: decimal
description: |
Monthly value representing revenue in GBP
for a specific deal. This value corresponds to
the given month. This value can be negative,
but not null.
tests:
- not_null
- name: previous_1_month_revenue_in_gbp
data_type: decimal
description: |
Monthly value representing revenue in GBP
for a specific deal. This value corresponds to
the previous month.
This value can be negative.
This value can be null, thus indicating that no
history is available.
- name: previous_2_month_revenue_in_gbp
data_type: decimal
description: |
Monthly value representing revenue in GBP
for a specific deal. This value corresponds to
the monthly amount generated 2 months ago
This value can be negative.
This value can be null, thus indicating that no
history is available.
- name: previous_12_month_revenue_in_gbp
data_type: decimal
description: |
Monthly value representing revenue in GBP
for a specific deal. This value corresponds to
the monthly amount generated 12 months ago.
This value can be negative.
This value can be null, thus indicating that no
history is available.
- name: previous_13_month_revenue_in_gbp
data_type: decimal
description: |
Monthly value representing revenue in GBP
for a specific deal. This value corresponds to
the monthly amount generated 13 months ago.
This value can be negative.
This value can be null, thus indicating that no
history is available.
- name: mom_revenue_growth
data_type: decimal
description: |
Relative increment of the revenue generated in the
current month with respect to the one generated in
the previous month.
It can be null if any revenue used in the computation
is null or it's negative.
tests:
- dbt_expectations.expect_column_values_to_be_between:
min_value: -1
strictly: false
- name: mom_1_month_shift_revenue_growth
data_type: decimal
description: |
Relative increment of the revenue generated in the
previous month with respect to the one generated 2
months ago.
It can be null if any revenue used in the computation
is null or it's negative.
This field is used for the growth score computation.
tests:
- dbt_expectations.expect_column_values_to_be_between:
min_value: -1
strictly: false
- name: yoy_revenue_growth
data_type: decimal
description: |
Relative increment of the revenue generated in the
current month with respect to the one generated 12
months ago.
It can be null if any revenue used in the computation
is null or it's negative.
tests:
- dbt_expectations.expect_column_values_to_be_between:
min_value: -1
strictly: false
- name: yoy_1_month_shift_revenue_growth
data_type: decimal
description: |
Relative increment of the revenue generated in the
previous month with respect to the one generated 13
months ago.
It can be null if any revenue used in the computation
is null or it's negative.
This field is used for the growth score computation.
tests:
- dbt_expectations.expect_column_values_to_be_between:
min_value: -1
strictly: false
- name: given_month_created_bookings
data_type: integer
description: |
Monthly value representing created bookings
for a specific deal. This value corresponds to
the given month. This value cannot be null.
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_between:
min_value: 0
strictly: false
- name: previous_1_month_created_bookings
data_type: integer
description: |
Monthly value representing created bookings
for a specific deal. This value corresponds to
the previous month.
This value can be null, thus indicating that no
history is available.
tests:
- dbt_expectations.expect_column_values_to_be_between:
min_value: 0
strictly: false
- name: previous_12_month_created_bookings
data_type: integer
description: |
Monthly value representing created bookings
for a specific deal. This value corresponds to
monthly amount generated 12 months ago.
This value can be null, thus indicating that no
history is available.
tests:
- dbt_expectations.expect_column_values_to_be_between:
min_value: 0
strictly: false
- name: mom_created_bookings_growth
data_type: decimal
description: |
Relative increment of the bookings created in the
current month with respect to the ones created in
the previous month.
It can be null if the bookings created in the
previous month are null.
This field is used for the growth score computation.
tests:
- dbt_expectations.expect_column_values_to_be_between:
min_value: -1
strictly: false
- name: yoy_created_bookings_growth
data_type: decimal
description: |
Relative increment of the bookings created in the
current month with respect to the ones created 12
months ago.
It can be null if the bookings created 12 months
ago are null.
This field is used for the growth score computation.
tests:
- dbt_expectations.expect_column_values_to_be_between:
min_value: -1
strictly: false
- name: given_month_listings_booked_in_month
data_type: integer
description: |
Monthly value representing the listings booked in month
for a specific deal. This value corresponds to
the given month. This value cannot be null.
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_between:
min_value: 0
strictly: false
- name: previous_1_month_listings_booked_in_month
data_type: integer
description: |
Monthly value representing the listings booked in month
for a specific deal. This value corresponds to
the previous month.
This value can be null, thus indicating that no
history is available.
tests:
- dbt_expectations.expect_column_values_to_be_between:
min_value: 0
strictly: false
- name: previous_12_month_listings_booked_in_month
data_type: integer
description: |
Monthly value representing the listings booked in month
for a specific deal. This value corresponds to
monthly amount generated 12 months ago.
This value can be null, thus indicating that no
history is available.
tests:
- dbt_expectations.expect_column_values_to_be_between:
min_value: 0
strictly: false
- name: mom_listings_booked_in_month_growth
data_type: decimal
description: |
Relative increment of the the listings booked in month
in the current month with respect to the ones of
the previous month.
It can be null if the listings booked in month in the
previous month are null.
This field is used for the growth score computation.
tests:
- dbt_expectations.expect_column_values_to_be_between:
min_value: -1
strictly: false
- name: yoy_listings_booked_in_month_growth
data_type: decimal
description: |
Relative increment of the listings booked in month
in the current month with respect to the ones of 12
months ago.
It can be null if the listings booked in month of 12
months ago are null.
This field is used for the growth score computation.
tests:
- dbt_expectations.expect_column_values_to_be_between:
min_value: -1
strictly: false
- name: deal_revenue_12_months_window
data_type: decimal
description: |
Total aggregated revenue in GBP generated by a deal
in the months from the period ranging from the
aggregated_revenue_from_first_day_month to
aggregated_revenue_to_first_day_month.
It can be negative if the sum is negative.
It cannot be null.
tests:
- not_null
- name: effective_deal_revenue_12_months_window
data_type: decimal
description: |
Effective aggregated revenue in GBP generated by a deal
in the months from the period ranging from the
aggregated_revenue_from_first_day_month to
aggregated_revenue_to_first_day_month.
All negative monthly revenue values are settled as 0,
thus this value should not be reported.
It is used for the deal contribution share with respect
to the global revenue. It cannot be null.
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_between:
min_value: 0
strictly: false
- name: effective_global_revenue_12_months_window
data_type: decimal
description: |
Effective aggregated revenue in GBP generated by all deals
in the months from the period ranging from the
aggregated_revenue_from_first_day_month to
aggregated_revenue_to_first_day_month.
All negative monthly revenue values are settled as 0,
thus this value should not be reported.
It is used for the deal contribution share with respect
to the global revenue. It cannot be null.
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_between:
min_value: 0
strictly: false
- name: deal_contribution_share_to_global_revenue
data_type: decimal
description: |
Represents the size of the deal in terms of revenue. In
other words, what's the percentage of the global revenue
that can be attributed to this deal. It cannot be null.
tests:
- not_null
- dbt_expectations.expect_column_values_to_be_between:
min_value: 0
strictly: false
- name: deal_contribution_rank_to_global_revenue
data_type: integer
description: |
Represents the ordered list of deals by descending size
in terms of revenue. It cannot be null. If more than one
deal have the same share, the order is not under control.
It cannot be null.
tests:
- not_null
- name: avg_mom_growth_score
data_type: decimal
description: |
Represents the average score of MoM growth of created
bookings, MoM growth of listings booked in month and
MoM shifted by one month of revenue.
It indicates the tendency of growth of the deal without
taking into account its revenue size. It cannot be null.
tests:
- not_null
- name: avg_yoy_growth_score
data_type: decimal
description: |
Represents the average score of YoY growth of created
bookings, YoY growth of listings booked in month and
YoY shifted by one month of revenue.
It indicates the tendency of growth of the deal without
taking into account its revenue size. It cannot be null.
tests:
- not_null
- name: avg_growth_score
data_type: decimal
description: |
Represents the average score of YoY and MoM growth of created
bookings, YoY and MoM growth of listings booked in month and
YoY and MoM shifted by one month of revenue.
It indicates the tendency of growth of the deal without
taking into account its revenue size. It cannot be null.
tests:
- not_null
- name: weighted_avg_growth_score
data_type: decimal
description: |
It's the weighted version of avg_growth_score that
takes into account the client size by using the revenue
contribution share of that deal to the global amount.
It's the main indicator towards measuring both growth
(if positive) or decay (if negative) while weighting
the financial impact this deal tendency can have.
tests:
- not_null
- name: categorisation_weighted_avg_growth_score
data_type: string
description: |
Discrete categorisation of weighted_avg_growth_score.
It helps easily identifying which accounts are top losers,
losers, flat, winners and top winners.
Currently the categorisation is based on the score itself
rather than selecting a top up/down.
tests:
- not_null
- accepted_values:
values:
- TOP LOSER
- LOSER
- FLAT
- WINNER
- TOP WINNER
- UNSET