Skip to content

added monthly content forecast#1399

Merged
jaredsnyder merged 2 commits intomainfrom
forecast_content_monthly
Feb 27, 2026
Merged

added monthly content forecast#1399
jaredsnyder merged 2 commits intomainfrom
forecast_content_monthly

Conversation

@jaredsnyder
Copy link
Contributor

@jaredsnyder jaredsnyder commented Feb 27, 2026

Some of the field names are changing so they it is clearer what actual and forecast values should be compared and where they come from:
forecast_sponsored_impressions ->forecast_native_glean_sponsored_impressions_sum
actual_native_glean_sponsored_content_impressions -> actual_native_glean_sponsored_impressions_sum

@github-actions
Copy link

Integration report for "this commit"

lookml.diff

Click to expand!
Only in /tmp/workspace/generated-lookml/ads/datagroups: forecast_content_monthly_last_updated.datagroup.lkml
Only in /tmp/workspace/generated-lookml/ads/views: forecast_content_monthly.view.lkml
Only in /tmp/workspace/looker-hub/firefox_ios: dashboards
Only in /tmp/workspace/looker-hub/marketing: datagroups
Only in /tmp/workspace/looker-hub/search_private/datagroups: search_term_data_validation_reports_last_updated.datagroup.lkml
Only in /tmp/workspace/looker-hub/search_private/datagroups: search_term_sanitization_job_metadata_daily_last_updated.datagroup.lkml
Only in /tmp/workspace/looker-hub/: user_journey
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/ads/datagroups/forecast_content_monthly_last_updated.datagroup.lkml /tmp/workspace/generated-lookml/ads/datagroups/forecast_content_monthly_last_updated.datagroup.lkml
--- /tmp/workspace/looker-hub/ads/datagroups/forecast_content_monthly_last_updated.datagroup.lkml	1970-01-01 00:00:00.000000000 +0000
+++ /tmp/workspace/generated-lookml/ads/datagroups/forecast_content_monthly_last_updated.datagroup.lkml	2026-02-27 15:20:43.147103272 +0000
@@ -0,0 +1,20 @@
+# *Do not manually modify this file*
+
+# This file has been generated via https://github.com/mozilla/lookml-generator
+
+# Using a datagroup in an Explore: https://cloud.google.com/looker/docs/reference/param-explore-persist-with
+# Using a datagroup in a derived table: https://cloud.google.com/looker/docs/reference/param-view-datagroup-trigger
+
+datagroup: forecast_content_monthly_last_updated {
+  label: "forecast_content_monthly Last Updated"
+  sql_trigger: SELECT MAX(storage_last_modified_time)
+    FROM (
+        
+    SELECT MAX(storage_last_modified_time) AS storage_last_modified_time
+    FROM `mozdata`.`region-us`.INFORMATION_SCHEMA.TABLE_STORAGE
+    WHERE (table_schema = 'ads' AND table_name = 'forecast_content_monthly')
+
+    ) ;;
+  description: "Updates for forecast_content_monthly when referenced tables are modified."
+  max_cache_age: "24 hours"
+}
\ No newline at end of file
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/ads/views/forecast_content_monthly.view.lkml /tmp/workspace/generated-lookml/ads/views/forecast_content_monthly.view.lkml
--- /tmp/workspace/looker-hub/ads/views/forecast_content_monthly.view.lkml	1970-01-01 00:00:00.000000000 +0000
+++ /tmp/workspace/generated-lookml/ads/views/forecast_content_monthly.view.lkml	2026-02-27 15:20:43.148103289 +0000
@@ -0,0 +1,147 @@
+
+# *Do not manually modify this file*
+#
+# This file has been generated via https://github.com/mozilla/lookml-generator
+# You can extend this view in the looker-spoke-default project (https://github.com/mozilla/looker-spoke-default)
+
+view: forecast_content_monthly {
+  dimension: actual_native_glean_inventory {
+    sql: ${TABLE}.actual_native_glean_inventory ;;
+    type: number
+    suggest_persist_for: "24 hours"
+  }
+
+  dimension: actual_native_glean_sponsored_content_impressions {
+    sql: ${TABLE}.actual_native_glean_sponsored_content_impressions ;;
+    type: number
+    suggest_persist_for: "24 hours"
+  }
+
+  dimension: actual_uapi_impressions {
+    sql: ${TABLE}.actual_uapi_impressions ;;
+    type: number
+    suggest_persist_for: "24 hours"
+  }
+
+  dimension: actual_uapi_impressions_excluding_house {
+    sql: ${TABLE}.actual_uapi_impressions_excluding_house ;;
+    type: number
+    suggest_persist_for: "24 hours"
+  }
+
+  dimension: country_code {
+    sql: ${TABLE}.country_code ;;
+    type: string
+    suggest_persist_for: "24 hours"
+  }
+
+  dimension: forecast_native_glean_inventory {
+    sql: ${TABLE}.forecast_native_glean_inventory ;;
+    type: number
+    suggest_persist_for: "24 hours"
+  }
+
+  dimension: forecast_native_inventory {
+    sql: ${TABLE}.forecast_native_inventory ;;
+    type: number
+    suggest_persist_for: "24 hours"
+  }
+
+  dimension: forecast_sponsored_impressions {
+    sql: ${TABLE}.forecast_sponsored_impressions ;;
+    type: number
+    suggest_persist_for: "24 hours"
+  }
+
+  dimension_group: forecast_month {
+    sql: ${TABLE}.forecast_month ;;
+    type: time
+    timeframes: [
+      raw,
+      date,
+      week,
+      month,
+      quarter,
+      year,
+    ]
+    convert_tz: no
+    datatype: date
+  }
+
+  dimension_group: submission_month {
+    sql: ${TABLE}.submission_month ;;
+    type: time
+    timeframes: [
+      raw,
+      date,
+      week,
+      month,
+      quarter,
+      year,
+    ]
+    convert_tz: no
+    datatype: date
+  }
+
+  measure: actual_ecpm_avg {
+    sql: SAFE_DIVIDE(${actual_revenue_sum},${actual_uapi_impressions_excluding_house_ads})*1000 ;;
+    type: number
+  }
+
+  measure: actual_native_glean_inventory_sum {
+    sql: ${actual_native_glean_inventory} ;;
+    type: sum
+  }
+
+  measure: actual_native_glean_sponsored_impressions_sum {
+    sql: ${actual_native_glean_sponsored_content_impressions} ;;
+    type: sum
+  }
+
+  measure: actual_revenue_sum {
+    sql: ${actual_revenue} ;;
+    type: sum
+  }
+
+  measure: actual_uapi_impressions_excluding_house_ads_sum {
+    sql: ${actual_uapi_impressions_excluding_house_ads} ;;
+    type: sum
+  }
+
+  measure: fill_rate {
+    sql: SAFE_DIVIDE(${actual_uapi_impressions_excluding_house_ads},${forecast_native_inventory}) ;;
+    type: number
+  }
+
+  measure: forecast_ecpm_avg {
+    sql: SAFE_DIVIDE(${forecast_revenue_sum},${forecast_uapi_impressions_excluding_house_ads})*1000 ;;
+    type: number
+  }
+
+  measure: forecast_native_glean_inventory_sum {
+    sql: ${forecast_native_glean_inventory} ;;
+    type: sum
+  }
+
+  measure: forecast_native_glean_sponsored_impressions_sum {
+    sql: ${forecast_sponsored_impressions} ;;
+    type: sum
+  }
+
+  measure: forecast_native_inventory_sum {
+    sql: ${forecast_native_inventory} ;;
+    type: sum
+  }
+
+  measure: forecast_revenue_sum {
+    sql: ${forecast_revenue} ;;
+    type: sum
+  }
+
+  measure: forecast_uapi_impressions_excluding_house_ads_sum {
+    sql: ${forecast_uapi_impressions_excluding_house_ads} ;;
+    type: sum
+  }
+
+  sql_table_name: `mozdata.ads.forecast_content_monthly` ;;
+}
\ No newline at end of file
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/marketing/datagroups/firefox_for_families_forecasted_expectations_last_updated.datagroup.lkml /tmp/workspace/generated-lookml/marketing/datagroups/firefox_for_families_forecasted_expectations_last_updated.datagroup.lkml
--- /tmp/workspace/looker-hub/marketing/datagroups/firefox_for_families_forecasted_expectations_last_updated.datagroup.lkml	2026-02-27 15:20:48.327035117 +0000
+++ /tmp/workspace/generated-lookml/marketing/datagroups/firefox_for_families_forecasted_expectations_last_updated.datagroup.lkml	1970-01-01 00:00:00.000000000 +0000
@@ -1,20 +0,0 @@
-# *Do not manually modify this file*
-
-# This file has been generated via https://github.com/mozilla/lookml-generator
-
-# Using a datagroup in an Explore: https://cloud.google.com/looker/docs/reference/param-explore-persist-with
-# Using a datagroup in a derived table: https://cloud.google.com/looker/docs/reference/param-view-datagroup-trigger
-
-datagroup: firefox_for_families_forecasted_expectations_last_updated {
-  label: "firefox_for_families_forecasted_expectations Last Updated"
-  sql_trigger: SELECT MAX(storage_last_modified_time)
-    FROM (
-        
-    SELECT MAX(storage_last_modified_time) AS storage_last_modified_time
-    FROM `mozdata`.`region-us`.INFORMATION_SCHEMA.TABLE_STORAGE
-    WHERE (table_schema = 'analysis' AND table_name = 'marketing_firefox_for_families_forecasted_expectations')
-
-    ) ;;
-  description: "Updates for firefox_for_families_forecasted_expectations when referenced tables are modified."
-  max_cache_age: "24 hours"
-}
\ No newline at end of file
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/namespaces.yaml /tmp/workspace/generated-lookml/namespaces.yaml
--- /tmp/workspace/looker-hub/namespaces.yaml	2026-02-27 15:20:49.156812544 +0000
+++ /tmp/workspace/generated-lookml/namespaces.yaml	2026-02-27 15:20:49.084811330 +0000
@@ -354,6 +354,47 @@
       tables:
         - table: moz-fx-data-shared-prod.ads.equativ_line_item_delivery
       type: table_view
+    forecast_content_monthly:
+      measures:
+        actual_ecpm_avg:
+          sql: SAFE_DIVIDE(${actual_revenue_sum},${actual_uapi_impressions_excluding_house_ads})*1000
+          type: number
+        actual_native_glean_inventory_sum:
+          sql: ${actual_native_glean_inventory}
+          type: sum
+        actual_native_glean_sponsored_impressions_sum:
+          sql: ${actual_native_glean_sponsored_content_impressions}
+          type: sum
+        actual_revenue_sum:
+          sql: ${actual_revenue}
+          type: sum
+        actual_uapi_impressions_excluding_house_ads_sum:
+          sql: ${actual_uapi_impressions_excluding_house_ads}
+          type: sum
+        fill_rate:
+          sql: SAFE_DIVIDE(${actual_uapi_impressions_excluding_house_ads},${forecast_native_inventory})
+          type: number
+        forecast_ecpm_avg:
+          sql: SAFE_DIVIDE(${forecast_revenue_sum},${forecast_uapi_impressions_excluding_house_ads})*1000
+          type: number
+        forecast_native_glean_inventory_sum:
+          sql: ${forecast_native_glean_inventory}
+          type: sum
+        forecast_native_glean_sponsored_impressions_sum:
+          sql: ${forecast_sponsored_impressions}
+          type: sum
+        forecast_native_inventory_sum:
+          sql: ${forecast_native_inventory}
+          type: sum
+        forecast_revenue_sum:
+          sql: ${forecast_revenue}
+          type: sum
+        forecast_uapi_impressions_excluding_house_ads_sum:
+          sql: ${forecast_uapi_impressions_excluding_house_ads}
+          type: sum
+      tables:
+        - table: mozdata.ads.forecast_content_monthly
+      type: table_view
     forecast_suggest_monthly:
       tables:
         - table: mozdata.ads.forecast_suggest_monthly
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/search_private/datagroups/search_term_data_validation_reports_last_updated.datagroup.lkml /tmp/workspace/generated-lookml/search_private/datagroups/search_term_data_validation_reports_last_updated.datagroup.lkml
--- /tmp/workspace/looker-hub/search_private/datagroups/search_term_data_validation_reports_last_updated.datagroup.lkml	2026-02-27 15:20:48.380723743 +0000
+++ /tmp/workspace/generated-lookml/search_private/datagroups/search_term_data_validation_reports_last_updated.datagroup.lkml	1970-01-01 00:00:00.000000000 +0000
@@ -1,20 +0,0 @@
-# *Do not manually modify this file*
-
-# This file has been generated via https://github.com/mozilla/lookml-generator
-
-# Using a datagroup in an Explore: https://cloud.google.com/looker/docs/reference/param-explore-persist-with
-# Using a datagroup in a derived table: https://cloud.google.com/looker/docs/reference/param-view-datagroup-trigger
-
-datagroup: search_term_data_validation_reports_last_updated {
-  label: "search_term_data_validation_reports Last Updated"
-  sql_trigger: SELECT MAX(storage_last_modified_time)
-    FROM (
-        
-    SELECT MAX(storage_last_modified_time) AS storage_last_modified_time
-    FROM `moz-fx-data-shared-prod`.`region-us`.INFORMATION_SCHEMA.TABLE_STORAGE
-    WHERE (table_schema = 'search_terms_derived' AND table_name = 'search_term_data_validation_reports_v1')
-
-    ) ;;
-  description: "Updates for search_term_data_validation_reports when referenced tables are modified."
-  max_cache_age: "24 hours"
-}
\ No newline at end of file
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/search_private/datagroups/search_term_sanitization_job_metadata_daily_last_updated.datagroup.lkml /tmp/workspace/generated-lookml/search_private/datagroups/search_term_sanitization_job_metadata_daily_last_updated.datagroup.lkml
--- /tmp/workspace/looker-hub/search_private/datagroups/search_term_sanitization_job_metadata_daily_last_updated.datagroup.lkml	2026-02-27 15:20:48.380754619 +0000
+++ /tmp/workspace/generated-lookml/search_private/datagroups/search_term_sanitization_job_metadata_daily_last_updated.datagroup.lkml	1970-01-01 00:00:00.000000000 +0000
@@ -1,20 +0,0 @@
-# *Do not manually modify this file*
-
-# This file has been generated via https://github.com/mozilla/lookml-generator
-
-# Using a datagroup in an Explore: https://cloud.google.com/looker/docs/reference/param-explore-persist-with
-# Using a datagroup in a derived table: https://cloud.google.com/looker/docs/reference/param-view-datagroup-trigger
-
-datagroup: search_term_sanitization_job_metadata_daily_last_updated {
-  label: "search_term_sanitization_job_metadata_daily Last Updated"
-  sql_trigger: SELECT MAX(storage_last_modified_time)
-    FROM (
-        
-    SELECT MAX(storage_last_modified_time) AS storage_last_modified_time
-    FROM `moz-fx-data-shared-prod`.`region-us`.INFORMATION_SCHEMA.TABLE_STORAGE
-    WHERE (table_schema = 'search_terms_derived' AND table_name = 'sanitization_job_metadata_v2')
-
-    ) ;;
-  description: "Updates for search_term_sanitization_job_metadata_daily when referenced tables are modified."
-  max_cache_age: "24 hours"
-}
\ No newline at end of file
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/user_journey/views/events_daily.view.lkml /tmp/workspace/generated-lookml/user_journey/views/events_daily.view.lkml
--- /tmp/workspace/looker-hub/user_journey/views/events_daily.view.lkml	2026-02-27 15:20:48.385128742 +0000
+++ /tmp/workspace/generated-lookml/user_journey/views/events_daily.view.lkml	1970-01-01 00:00:00.000000000 +0000
@@ -1,71 +0,0 @@
-view: events_daily {
-  sql_table_name: `mozdata.messaging_system.events_daily`
-    ;;
-
-  dimension: addon_version {
-    type: string
-    sql: ${TABLE}.addon_version ;;
-  }
-
-  dimension: app_version {
-    type: string
-    sql: ${TABLE}.app_version ;;
-  }
-
-  dimension: city {
-    type: string
-    sql: ${TABLE}.city ;;
-  }
-
-  dimension: client_id {
-    type: string
-    sql: ${TABLE}.client_id ;;
-  }
-
-  dimension: country {
-    type: string
-    map_layer_name: countries
-    sql: ${TABLE}.country ;;
-  }
-
-  dimension: events {
-    type: string
-    sql: ${TABLE}.events ;;
-    hidden: yes
-  }
-
-  dimension: experiments {
-    hidden: yes
-    sql: ${TABLE}.experiments ;;
-  }
-
-  dimension: locale {
-    type: string
-    sql: ${TABLE}.locale ;;
-  }
-
-  dimension: normalized_channel {
-    type: string
-    sql: ${TABLE}.normalized_channel ;;
-  }
-
-  dimension: os {
-    type: string
-    sql: ${TABLE}.os ;;
-  }
-
-  dimension: sample_id {
-    type: number
-    sql: ${TABLE}.sample_id ;;
-  }
-
-  dimension: subdivision1 {
-    type: string
-    sql: ${TABLE}.subdivision1 ;;
-  }
-
-  dimension: submission_date {
-    type: date
-    sql: CAST(${TABLE}.submission_date AS TIMESTAMP) ;;
-  }
-}

Link to full diff

@github-actions
Copy link

Integration report for "this commit"

lookml.diff

Click to expand!
Only in /tmp/workspace/generated-lookml/ads/datagroups: forecast_content_monthly_last_updated.datagroup.lkml
Only in /tmp/workspace/generated-lookml/ads/explores: forecast_content_monthly.explore.lkml
Only in /tmp/workspace/generated-lookml/ads/views: forecast_content_monthly.view.lkml
Only in /tmp/workspace/looker-hub/firefox_ios: dashboards
Only in /tmp/workspace/looker-hub/marketing: datagroups
Only in /tmp/workspace/looker-hub/search_private/datagroups: search_term_data_validation_reports_last_updated.datagroup.lkml
Only in /tmp/workspace/looker-hub/search_private/datagroups: search_term_sanitization_job_metadata_daily_last_updated.datagroup.lkml
Only in /tmp/workspace/looker-hub/: user_journey
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/ads/datagroups/forecast_content_monthly_last_updated.datagroup.lkml /tmp/workspace/generated-lookml/ads/datagroups/forecast_content_monthly_last_updated.datagroup.lkml
--- /tmp/workspace/looker-hub/ads/datagroups/forecast_content_monthly_last_updated.datagroup.lkml	1970-01-01 00:00:00.000000000 +0000
+++ /tmp/workspace/generated-lookml/ads/datagroups/forecast_content_monthly_last_updated.datagroup.lkml	2026-02-27 15:25:01.534401167 +0000
@@ -0,0 +1,20 @@
+# *Do not manually modify this file*
+
+# This file has been generated via https://github.com/mozilla/lookml-generator
+
+# Using a datagroup in an Explore: https://cloud.google.com/looker/docs/reference/param-explore-persist-with
+# Using a datagroup in a derived table: https://cloud.google.com/looker/docs/reference/param-view-datagroup-trigger
+
+datagroup: forecast_content_monthly_last_updated {
+  label: "forecast_content_monthly Last Updated"
+  sql_trigger: SELECT MAX(storage_last_modified_time)
+    FROM (
+        
+    SELECT MAX(storage_last_modified_time) AS storage_last_modified_time
+    FROM `mozdata`.`region-us`.INFORMATION_SCHEMA.TABLE_STORAGE
+    WHERE (table_schema = 'ads' AND table_name = 'forecast_content_monthly')
+
+    ) ;;
+  description: "Updates for forecast_content_monthly when referenced tables are modified."
+  max_cache_age: "24 hours"
+}
\ No newline at end of file
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/ads/explores/forecast_content_monthly.explore.lkml /tmp/workspace/generated-lookml/ads/explores/forecast_content_monthly.explore.lkml
--- /tmp/workspace/looker-hub/ads/explores/forecast_content_monthly.explore.lkml	1970-01-01 00:00:00.000000000 +0000
+++ /tmp/workspace/generated-lookml/ads/explores/forecast_content_monthly.explore.lkml	2026-02-27 15:25:01.535401184 +0000
@@ -0,0 +1,13 @@
+
+# *Do not manually modify this file*
+#
+# This file has been generated via https://github.com/mozilla/lookml-generator
+# You can extend this view in the looker-spoke-default project (https://github.com/mozilla/looker-spoke-default)
+
+include: "/looker-hub/ads/views/forecast_content_monthly.view.lkml"
+include: "/looker-hub/ads/datagroups/forecast_content_monthly_last_updated.datagroup.lkml"
+
+explore: forecast_content_monthly {
+  view_name: forecast_content_monthly
+  persist_with: forecast_content_monthly_last_updated
+}
\ No newline at end of file
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/ads/views/forecast_content_monthly.view.lkml /tmp/workspace/generated-lookml/ads/views/forecast_content_monthly.view.lkml
--- /tmp/workspace/looker-hub/ads/views/forecast_content_monthly.view.lkml	1970-01-01 00:00:00.000000000 +0000
+++ /tmp/workspace/generated-lookml/ads/views/forecast_content_monthly.view.lkml	2026-02-27 15:25:01.535401184 +0000
@@ -0,0 +1,147 @@
+
+# *Do not manually modify this file*
+#
+# This file has been generated via https://github.com/mozilla/lookml-generator
+# You can extend this view in the looker-spoke-default project (https://github.com/mozilla/looker-spoke-default)
+
+view: forecast_content_monthly {
+  dimension: actual_native_glean_inventory {
+    sql: ${TABLE}.actual_native_glean_inventory ;;
+    type: number
+    suggest_persist_for: "24 hours"
+  }
+
+  dimension: actual_native_glean_sponsored_content_impressions {
+    sql: ${TABLE}.actual_native_glean_sponsored_content_impressions ;;
+    type: number
+    suggest_persist_for: "24 hours"
+  }
+
+  dimension: actual_uapi_impressions {
+    sql: ${TABLE}.actual_uapi_impressions ;;
+    type: number
+    suggest_persist_for: "24 hours"
+  }
+
+  dimension: actual_uapi_impressions_excluding_house {
+    sql: ${TABLE}.actual_uapi_impressions_excluding_house ;;
+    type: number
+    suggest_persist_for: "24 hours"
+  }
+
+  dimension: country_code {
+    sql: ${TABLE}.country_code ;;
+    type: string
+    suggest_persist_for: "24 hours"
+  }
+
+  dimension: forecast_native_glean_inventory {
+    sql: ${TABLE}.forecast_native_glean_inventory ;;
+    type: number
+    suggest_persist_for: "24 hours"
+  }
+
+  dimension: forecast_native_inventory {
+    sql: ${TABLE}.forecast_native_inventory ;;
+    type: number
+    suggest_persist_for: "24 hours"
+  }
+
+  dimension: forecast_sponsored_impressions {
+    sql: ${TABLE}.forecast_sponsored_impressions ;;
+    type: number
+    suggest_persist_for: "24 hours"
+  }
+
+  dimension_group: forecast_month {
+    sql: ${TABLE}.forecast_month ;;
+    type: time
+    timeframes: [
+      raw,
+      date,
+      week,
+      month,
+      quarter,
+      year,
+    ]
+    convert_tz: no
+    datatype: date
+  }
+
+  dimension_group: submission_month {
+    sql: ${TABLE}.submission_month ;;
+    type: time
+    timeframes: [
+      raw,
+      date,
+      week,
+      month,
+      quarter,
+      year,
+    ]
+    convert_tz: no
+    datatype: date
+  }
+
+  measure: actual_ecpm_avg {
+    sql: SAFE_DIVIDE(${actual_revenue_sum},${actual_uapi_impressions_excluding_house_ads})*1000 ;;
+    type: number
+  }
+
+  measure: actual_native_glean_inventory_sum {
+    sql: ${actual_native_glean_inventory} ;;
+    type: sum
+  }
+
+  measure: actual_native_glean_sponsored_impressions_sum {
+    sql: ${actual_native_glean_sponsored_content_impressions} ;;
+    type: sum
+  }
+
+  measure: actual_revenue_sum {
+    sql: ${actual_revenue} ;;
+    type: sum
+  }
+
+  measure: actual_uapi_impressions_excluding_house_ads_sum {
+    sql: ${actual_uapi_impressions_excluding_house_ads} ;;
+    type: sum
+  }
+
+  measure: fill_rate {
+    sql: SAFE_DIVIDE(${actual_uapi_impressions_excluding_house_ads},${forecast_native_inventory}) ;;
+    type: number
+  }
+
+  measure: forecast_ecpm_avg {
+    sql: SAFE_DIVIDE(${forecast_revenue_sum},${forecast_uapi_impressions_excluding_house_ads})*1000 ;;
+    type: number
+  }
+
+  measure: forecast_native_glean_inventory_sum {
+    sql: ${forecast_native_glean_inventory} ;;
+    type: sum
+  }
+
+  measure: forecast_native_glean_sponsored_impressions_sum {
+    sql: ${forecast_sponsored_impressions} ;;
+    type: sum
+  }
+
+  measure: forecast_native_inventory_sum {
+    sql: ${forecast_native_inventory} ;;
+    type: sum
+  }
+
+  measure: forecast_revenue_sum {
+    sql: ${forecast_revenue} ;;
+    type: sum
+  }
+
+  measure: forecast_uapi_impressions_excluding_house_ads_sum {
+    sql: ${forecast_uapi_impressions_excluding_house_ads} ;;
+    type: sum
+  }
+
+  sql_table_name: `mozdata.ads.forecast_content_monthly` ;;
+}
\ No newline at end of file
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/fenix/views/first_session.view.lkml /tmp/workspace/generated-lookml/fenix/views/first_session.view.lkml
--- /tmp/workspace/looker-hub/fenix/views/first_session.view.lkml	2026-02-27 15:25:06.898595315 +0000
+++ /tmp/workspace/generated-lookml/fenix/views/first_session.view.lkml	2026-02-27 15:25:01.775405166 +0000
@@ -7,7 +7,7 @@
 view: first_session {
   dimension: metrics__string__first_session_adgroup {
     label: "First Session: Adgroup"
-    hidden: no
+    hidden: yes
     sql: ${TABLE}.metrics.string.first_session_adgroup ;;
     type: string
     group_label: "First Session"
@@ -25,7 +25,7 @@
 
   dimension: metrics__timing_distribution__first_session_adjust_attribution_time__sum {
     label: "First Session: Adjust Attribution Time Sum"
-    hidden: no
+    hidden: yes
     sql: ${TABLE}.metrics.timing_distribution.first_session_adjust_attribution_time.sum ;;
     type: number
     group_label: "First Session"
@@ -61,7 +61,7 @@
 
   dimension: metrics__string__first_session_campaign {
     label: "First Session: Campaign"
-    hidden: no
+    hidden: yes
     sql: ${TABLE}.metrics.string.first_session_campaign ;;
     type: string
     group_label: "First Session"
@@ -79,7 +79,7 @@
 
   dimension: metrics__string__first_session_creative {
     label: "First Session: Creative"
-    hidden: no
+    hidden: yes
     sql: ${TABLE}.metrics.string.first_session_creative ;;
     type: string
     group_label: "First Session"
@@ -135,7 +135,7 @@
 
   dimension: metrics__string__first_session_network {
     label: "First Session: Network"
-    hidden: no
+    hidden: yes
     sql: ${TABLE}.metrics.string.first_session_network ;;
     type: string
     group_label: "First Session"
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/fenix/views/metrics.view.lkml /tmp/workspace/generated-lookml/fenix/views/metrics.view.lkml
--- /tmp/workspace/looker-hub/fenix/views/metrics.view.lkml	2026-02-27 15:25:06.901203606 +0000
+++ /tmp/workspace/generated-lookml/fenix/views/metrics.view.lkml	2026-02-27 15:25:01.807405697 +0000
@@ -850,7 +850,7 @@
 
   dimension: metrics__timing_distribution__first_session_adjust_attribution_time__sum {
     label: "First Session: Adjust Attribution Time Sum"
-    hidden: no
+    hidden: yes
     sql: ${TABLE}.metrics.timing_distribution.first_session_adjust_attribution_time.sum ;;
     type: number
     group_label: "First Session"
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/marketing/datagroups/firefox_for_families_forecasted_expectations_last_updated.datagroup.lkml /tmp/workspace/generated-lookml/marketing/datagroups/firefox_for_families_forecasted_expectations_last_updated.datagroup.lkml
--- /tmp/workspace/looker-hub/marketing/datagroups/firefox_for_families_forecasted_expectations_last_updated.datagroup.lkml	2026-02-27 15:25:06.953544189 +0000
+++ /tmp/workspace/generated-lookml/marketing/datagroups/firefox_for_families_forecasted_expectations_last_updated.datagroup.lkml	1970-01-01 00:00:00.000000000 +0000
@@ -1,20 +0,0 @@
-# *Do not manually modify this file*
-
-# This file has been generated via https://github.com/mozilla/lookml-generator
-
-# Using a datagroup in an Explore: https://cloud.google.com/looker/docs/reference/param-explore-persist-with
-# Using a datagroup in a derived table: https://cloud.google.com/looker/docs/reference/param-view-datagroup-trigger
-
-datagroup: firefox_for_families_forecasted_expectations_last_updated {
-  label: "firefox_for_families_forecasted_expectations Last Updated"
-  sql_trigger: SELECT MAX(storage_last_modified_time)
-    FROM (
-        
-    SELECT MAX(storage_last_modified_time) AS storage_last_modified_time
-    FROM `mozdata`.`region-us`.INFORMATION_SCHEMA.TABLE_STORAGE
-    WHERE (table_schema = 'analysis' AND table_name = 'marketing_firefox_for_families_forecasted_expectations')
-
-    ) ;;
-  description: "Updates for firefox_for_families_forecasted_expectations when referenced tables are modified."
-  max_cache_age: "24 hours"
-}
\ No newline at end of file
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/namespaces.yaml /tmp/workspace/generated-lookml/namespaces.yaml
--- /tmp/workspace/looker-hub/namespaces.yaml	2026-02-27 15:25:07.610215371 +0000
+++ /tmp/workspace/generated-lookml/namespaces.yaml	2026-02-27 15:25:07.542214242 +0000
@@ -218,6 +218,10 @@
       type: table_explore
       views:
         base_view: equativ_line_item_delivery
+    forecast_content_monthly:
+      type: table_explore
+      views:
+        base_view: forecast_content_monthly
     forecast_suggest_monthly:
       type: table_explore
       views:
@@ -354,6 +358,47 @@
       tables:
         - table: moz-fx-data-shared-prod.ads.equativ_line_item_delivery
       type: table_view
+    forecast_content_monthly:
+      measures:
+        actual_ecpm_avg:
+          sql: SAFE_DIVIDE(${actual_revenue_sum},${actual_uapi_impressions_excluding_house_ads})*1000
+          type: number
+        actual_native_glean_inventory_sum:
+          sql: ${actual_native_glean_inventory}
+          type: sum
+        actual_native_glean_sponsored_impressions_sum:
+          sql: ${actual_native_glean_sponsored_content_impressions}
+          type: sum
+        actual_revenue_sum:
+          sql: ${actual_revenue}
+          type: sum
+        actual_uapi_impressions_excluding_house_ads_sum:
+          sql: ${actual_uapi_impressions_excluding_house_ads}
+          type: sum
+        fill_rate:
+          sql: SAFE_DIVIDE(${actual_uapi_impressions_excluding_house_ads},${forecast_native_inventory})
+          type: number
+        forecast_ecpm_avg:
+          sql: SAFE_DIVIDE(${forecast_revenue_sum},${forecast_uapi_impressions_excluding_house_ads})*1000
+          type: number
+        forecast_native_glean_inventory_sum:
+          sql: ${forecast_native_glean_inventory}
+          type: sum
+        forecast_native_glean_sponsored_impressions_sum:
+          sql: ${forecast_sponsored_impressions}
+          type: sum
+        forecast_native_inventory_sum:
+          sql: ${forecast_native_inventory}
+          type: sum
+        forecast_revenue_sum:
+          sql: ${forecast_revenue}
+          type: sum
+        forecast_uapi_impressions_excluding_house_ads_sum:
+          sql: ${forecast_uapi_impressions_excluding_house_ads}
+          type: sum
+      tables:
+        - table: mozdata.ads.forecast_content_monthly
+      type: table_view
     forecast_suggest_monthly:
       tables:
         - table: mozdata.ads.forecast_suggest_monthly
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/search_private/datagroups/search_term_data_validation_reports_last_updated.datagroup.lkml /tmp/workspace/generated-lookml/search_private/datagroups/search_term_data_validation_reports_last_updated.datagroup.lkml
--- /tmp/workspace/looker-hub/search_private/datagroups/search_term_data_validation_reports_last_updated.datagroup.lkml	2026-02-27 15:25:07.007981489 +0000
+++ /tmp/workspace/generated-lookml/search_private/datagroups/search_term_data_validation_reports_last_updated.datagroup.lkml	1970-01-01 00:00:00.000000000 +0000
@@ -1,20 +0,0 @@
-# *Do not manually modify this file*
-
-# This file has been generated via https://github.com/mozilla/lookml-generator
-
-# Using a datagroup in an Explore: https://cloud.google.com/looker/docs/reference/param-explore-persist-with
-# Using a datagroup in a derived table: https://cloud.google.com/looker/docs/reference/param-view-datagroup-trigger
-
-datagroup: search_term_data_validation_reports_last_updated {
-  label: "search_term_data_validation_reports Last Updated"
-  sql_trigger: SELECT MAX(storage_last_modified_time)
-    FROM (
-        
-    SELECT MAX(storage_last_modified_time) AS storage_last_modified_time
-    FROM `moz-fx-data-shared-prod`.`region-us`.INFORMATION_SCHEMA.TABLE_STORAGE
-    WHERE (table_schema = 'search_terms_derived' AND table_name = 'search_term_data_validation_reports_v1')
-
-    ) ;;
-  description: "Updates for search_term_data_validation_reports when referenced tables are modified."
-  max_cache_age: "24 hours"
-}
\ No newline at end of file
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/search_private/datagroups/search_term_sanitization_job_metadata_daily_last_updated.datagroup.lkml /tmp/workspace/generated-lookml/search_private/datagroups/search_term_sanitization_job_metadata_daily_last_updated.datagroup.lkml
--- /tmp/workspace/looker-hub/search_private/datagroups/search_term_sanitization_job_metadata_daily_last_updated.datagroup.lkml	2026-02-27 15:25:07.008031053 +0000
+++ /tmp/workspace/generated-lookml/search_private/datagroups/search_term_sanitization_job_metadata_daily_last_updated.datagroup.lkml	1970-01-01 00:00:00.000000000 +0000
@@ -1,20 +0,0 @@
-# *Do not manually modify this file*
-
-# This file has been generated via https://github.com/mozilla/lookml-generator
-
-# Using a datagroup in an Explore: https://cloud.google.com/looker/docs/reference/param-explore-persist-with
-# Using a datagroup in a derived table: https://cloud.google.com/looker/docs/reference/param-view-datagroup-trigger
-
-datagroup: search_term_sanitization_job_metadata_daily_last_updated {
-  label: "search_term_sanitization_job_metadata_daily Last Updated"
-  sql_trigger: SELECT MAX(storage_last_modified_time)
-    FROM (
-        
-    SELECT MAX(storage_last_modified_time) AS storage_last_modified_time
-    FROM `moz-fx-data-shared-prod`.`region-us`.INFORMATION_SCHEMA.TABLE_STORAGE
-    WHERE (table_schema = 'search_terms_derived' AND table_name = 'sanitization_job_metadata_v2')
-
-    ) ;;
-  description: "Updates for search_term_sanitization_job_metadata_daily when referenced tables are modified."
-  max_cache_age: "24 hours"
-}
\ No newline at end of file
diff -x '.*' -bur --no-dereference --new-file /tmp/workspace/looker-hub/user_journey/views/events_daily.view.lkml /tmp/workspace/generated-lookml/user_journey/views/events_daily.view.lkml
--- /tmp/workspace/looker-hub/user_journey/views/events_daily.view.lkml	2026-02-27 15:25:07.012400581 +0000
+++ /tmp/workspace/generated-lookml/user_journey/views/events_daily.view.lkml	1970-01-01 00:00:00.000000000 +0000
@@ -1,71 +0,0 @@
-view: events_daily {
-  sql_table_name: `mozdata.messaging_system.events_daily`
-    ;;
-
-  dimension: addon_version {
-    type: string
-    sql: ${TABLE}.addon_version ;;
-  }
-
-  dimension: app_version {
-    type: string
-    sql: ${TABLE}.app_version ;;
-  }
-
-  dimension: city {
-    type: string
-    sql: ${TABLE}.city ;;
-  }
-
-  dimension: client_id {
-    type: string
-    sql: ${TABLE}.client_id ;;
-  }
-
-  dimension: country {
-    type: string
-    map_layer_name: countries
-    sql: ${TABLE}.country ;;
-  }
-
-  dimension: events {
-    type: string
-    sql: ${TABLE}.events ;;
-    hidden: yes
-  }
-
-  dimension: experiments {
-    hidden: yes
-    sql: ${TABLE}.experiments ;;
-  }
-
-  dimension: locale {
-    type: string
-    sql: ${TABLE}.locale ;;
-  }
-
-  dimension: normalized_channel {
-    type: string
-    sql: ${TABLE}.normalized_channel ;;
-  }
-
-  dimension: os {
-    type: string
-    sql: ${TABLE}.os ;;
-  }
-
-  dimension: sample_id {
-    type: number
-    sql: ${TABLE}.sample_id ;;
-  }
-
-  dimension: subdivision1 {
-    type: string
-    sql: ${TABLE}.subdivision1 ;;
-  }
-
-  dimension: submission_date {
-    type: date
-    sql: CAST(${TABLE}.submission_date AS TIMESTAMP) ;;
-  }
-}

Link to full diff

Copy link
Contributor

@mozza-wins mozza-wins left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@jaredsnyder jaredsnyder added this pull request to the merge queue Feb 27, 2026
Merged via the queue into main with commit e6dcbf5 Feb 27, 2026
18 checks passed
@jaredsnyder jaredsnyder deleted the forecast_content_monthly branch February 27, 2026 15:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants