From b931d338da3e86d38c2bcc3d29ccad8afd503f67 Mon Sep 17 00:00:00 2001 From: Dave Connors Date: Tue, 20 Jan 2026 09:51:20 -0600 Subject: [PATCH] migrate metrics --- .gitignore | 1 + models/ad_reporting_models.yml | 148 ++++++++++++++++-- .../ad_reporting__ad_report_metrics.yml | 68 -------- .../ad_reporting__ad_report.yml | 58 ------- 4 files changed, 135 insertions(+), 140 deletions(-) delete mode 100644 models/metrics/ad_reporting__ad_report_metrics.yml diff --git a/.gitignore b/.gitignore index 03beb094..3450ff57 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ logs/ profiles.yml target/ *.log +dbt_internal_packages/ # IDE files .idea/ diff --git a/models/ad_reporting_models.yml b/models/ad_reporting_models.yml index 5f9c6c30..819e944a 100644 --- a/models/ad_reporting_models.yml +++ b/models/ad_reporting_models.yml @@ -65,43 +65,163 @@ models: description: '{{ doc("conversions_value") }}' - name: ad_reporting__ad_report - description: Each record represents daily metrics by ad, ad group, campaign and account. + description: Each record represents daily metrics by ad, ad group, campaign and account. + semantic_model: + enabled: true + name: ad_report + primary_entity: ad + agg_time_dimension: date_day columns: - name: source_relation description: '{{ doc("source_relation") }}' + - name: date_day description: '{{ doc("date_day") }}' + granularity: day + dimension: + type: time + - name: platform description: '{{ doc("platform") }}' + dimension: + type: categorical + - name: account_id description: '{{ doc("account_id") }}' + dimension: + type: categorical + - name: account_name description: '{{ doc("account_name") }}' + dimension: + type: categorical + - name: campaign_id description: '{{ doc("campaign_id") }}' + dimension: + type: categorical + - name: campaign_name description: '{{ doc("campaign_name") }}' + dimension: + type: categorical + - name: ad_group_id description: '{{ doc("ad_group_id") }}' + dimension: + type: categorical + - name: ad_group_name description: '{{ doc("ad_group_name") }}' + dimension: + type: categorical + - name: ad_id description: '{{ doc("ad_id") }}' tests: - not_null + dimension: + type: categorical + - name: ad_name description: '{{ doc("ad_name") }}' + dimension: + type: categorical + - name: clicks description: '{{ doc("clicks") }}' + - name: impressions description: '{{ doc("impressions") }}' - - name: spend + + - name: spend description: '{{ doc("spend") }}' + dimension: + type: categorical + - name: conversions description: '{{ doc("conversions") }}' + - name: conversions_value description: '{{ doc("conversions_value") }}' + + metrics: + - name: active_ads + description: Count of ads witth spend > 0. + type: simple + filter: | + {{Dimension('ad__spend')}} > 0 + label: 'Active Ads (Fivetran)' + agg: count_distinct + expr: ad_id + + - name: avg_spend_nonzero + description: Average ad spend, ignores zero-spend days. + type: simple + filter: | + {{Dimension('ad__spend')}} > 0 + label: 'Avg Spend Non-Zero (Fivetran)' + agg: average + expr: spend + + - name: avg_spend + description: Average ad spend, does not ignore zero-spend days. + type: simple + label: 'Avg Spend (Fivetran)' + agg: average + expr: spend + + - name: clicks + description: Total clicks + type: simple + label: 'Ad Clicks (Fivetran)' + agg: sum + expr: clicks + + - name: impressions + description: Total impressions + type: simple + label: 'Ad Impressions (Fivetran)' + agg: sum + expr: impressions + + - name: spend + description: Total spend (in currency of individual platforms) + type: simple + label: 'Ad Spend (Fivetran)' + agg: sum + expr: spend + + - name: clickthrough_rate + description: Percentage of impressions that did convert into clicks. + label: 'Ad Clickthrough Rate (Fivetran)' + type: derived + expr: clicks/impressions + input_metrics: + - name: clicks + - name: impressions + + - name: cost_per_click + description: The ratio of spend to clicks + label: 'Average Ad Cost Per Click (Fivetran)' + type: derived + expr: spend/clicks + input_metrics: + - name: clicks + - name: spend + + - name: bounce_rate + description: Percentage of impressions that did not convert into clicks. + label: 'Average Ad Bounce Rate (Fivetran)' + type: derived + expr: impressions - clicks/impressions + input_metrics: + - name: impressions + - name: clicks + + + - name: ad_reporting__campaign_report description: Each record represents daily metrics by campaign and account. columns: @@ -125,7 +245,7 @@ models: description: '{{ doc("clicks") }}' - name: impressions description: '{{ doc("impressions") }}' - - name: spend + - name: spend description: '{{ doc("spend") }}' - name: conversions description: '{{ doc("conversions") }}' @@ -165,7 +285,7 @@ models: description: '{{ doc("clicks") }}' - name: impressions description: '{{ doc("impressions") }}' - - name: spend + - name: spend description: '{{ doc("spend") }}' - name: conversions description: '{{ doc("conversions") }}' @@ -173,7 +293,7 @@ models: description: '{{ doc("conversions_value") }}' - name: ad_reporting__search_report - description: Each record represents daily metrics by search query, ad group, campaign and account. + description: Each record represents daily metrics by search query, ad group, campaign and account. columns: - name: source_relation description: '{{ doc("source_relation") }}' @@ -207,15 +327,15 @@ models: description: '{{ doc("clicks") }}' - name: impressions description: '{{ doc("impressions") }}' - - name: spend - description: '{{ doc("spend") }}' + - name: spend + description: '{{ doc("spend") }}' - name: conversions description: '{{ doc("conversions") }}' - name: conversions_value description: '{{ doc("conversions_value") }}' - name: ad_reporting__url_report - description: Each record represents daily metrics by URL (and if applicable, URL UTM parameters), ad group, campaign and account. + description: Each record represents daily metrics by URL (and if applicable, URL UTM parameters), ad group, campaign and account. columns: - name: source_relation description: '{{ doc("source_relation") }}' @@ -260,8 +380,8 @@ models: description: '{{ doc("clicks") }}' - name: impressions description: '{{ doc("impressions") }}' - - name: spend - description: '{{ doc("spend") }}' + - name: spend + description: '{{ doc("spend") }}' - name: conversions description: '{{ doc("conversions") }}' - name: conversions_value @@ -288,13 +408,13 @@ models: description: '{{ doc("clicks") }}' - name: impressions description: '{{ doc("impressions") }}' - - name: spend + - name: spend description: '{{ doc("spend") }}' - name: conversions description: '{{ doc("conversions") }}' - name: conversions_value description: '{{ doc("conversions_value") }}' - - name: country + - name: country description: Standardized ISO-3166 name of the country where the campaign was served. - name: country_code description: ISO-3166 two-letter code of the country where the campaign was served. @@ -322,11 +442,11 @@ models: description: '{{ doc("clicks") }}' - name: impressions description: '{{ doc("impressions") }}' - - name: spend + - name: spend description: '{{ doc("spend") }}' - name: conversions description: '{{ doc("conversions") }}' - name: conversions_value description: '{{ doc("conversions_value") }}' - - name: region + - name: region description: Region the ad was served in. The formatting may vary across platforms. This may be a state, province, metropolitan area, etc. Snapchat Ads provides this as a two-letter abbreviation. \ No newline at end of file diff --git a/models/metrics/ad_reporting__ad_report_metrics.yml b/models/metrics/ad_reporting__ad_report_metrics.yml deleted file mode 100644 index 90afe206..00000000 --- a/models/metrics/ad_reporting__ad_report_metrics.yml +++ /dev/null @@ -1,68 +0,0 @@ -metrics: - - name: active_ads - description: Count of ads witth spend > 0. - type: simple - type_params: - measure: active_ads - filter: | - {{Dimension('ad__spend')}} > 0 - label: 'Active Ads (Fivetran)' - - name: avg_spend_nonzero - description: Average ad spend, ignores zero-spend days. - type: simple - type_params: - measure: avg_spend_nonzero - filter: | - {{Dimension('ad__spend')}} > 0 - label: 'Avg Spend Non-Zero (Fivetran)' - - name: avg_spend - description: Average ad spend, does not ignore zero-spend days. - type: simple - type_params: - measure: avg_spend - label: 'Avg Spend (Fivetran)' - - name: clicks - description: Total clicks - type: simple - type_params: - measure: clicks - label: 'Ad Clicks (Fivetran)' - - name: impressions - description: Total impressions - type: simple - type_params: - measure: impressions - label: 'Ad Impressions (Fivetran)' - - name: spend - description: Total spend (in currency of individual platforms) - type: simple - type_params: - measure: ad_spend - label: 'Ad Spend (Fivetran)' - - name: clickthrough_rate - description: Percentage of impressions that did convert into clicks. - label: 'Ad Clickthrough Rate (Fivetran)' - type: derived - type_params: - expr: clicks/impressions - metrics: - - clicks - - impressions - - name: cost_per_click - description: The ratio of spend to clicks - label: 'Average Ad Cost Per Click (Fivetran)' - type: derived - type_params: - expr: spend/clicks - metrics: - - clicks - - spend - - name: bounce_rate - description: Percentage of impressions that did not convert into clicks. - label: 'Average Ad Bounce Rate (Fivetran)' - type: derived - type_params: - expr: impressions - clicks/impressions - metrics: - - impressions - - clicks diff --git a/models/semantic_models/ad_reporting__ad_report.yml b/models/semantic_models/ad_reporting__ad_report.yml index 1ec386c8..e55f3cff 100644 --- a/models/semantic_models/ad_reporting__ad_report.yml +++ b/models/semantic_models/ad_reporting__ad_report.yml @@ -6,61 +6,3 @@ models: columns: - name: date_day granularity: day - -semantic_models: - - name: ad_report - description: Each record represents daily metrics by ad, ad group, campaign and - account. - model: ref('ad_reporting__ad_report') - primary_entity: ad - measures: - - name: ad_spend - agg: sum - expr: spend - agg_time_dimension: date_day - - name: impressions - agg: sum - expr: impressions - agg_time_dimension: date_day - - name: avg_spend - agg: average - expr: spend - agg_time_dimension: date_day - - name: clicks - agg: sum - expr: clicks - agg_time_dimension: date_day - - name: active_ads - agg: count_distinct - expr: ad_id - agg_time_dimension: date_day - - name: avg_spend_nonzero - agg: average - expr: spend - agg_time_dimension: date_day - dimensions: - - name: spend - type: categorical - - name: account_name - type: categorical - - name: ad_name - type: categorical - - name: date_day - type: time - type_params: - time_granularity: day - - name: campaign_name - type: categorical - - name: campaign_id - type: categorical - - name: account_id - type: categorical - - name: ad_id - type: categorical - - name: platform - type: categorical - - name: ad_group_id - type: categorical - - name: ad_group_name - type: categorical -