SQL Saas crm

Campaign Stats Rollup

Campaign Stats Rollup model for saas crm.

source-preserved

Blocks

campaign_stats_rollup.sql · 162 lines
inferred
-- models/campaign_stats_rollup.sql
{{ config(materialized='view') }}

SELECT
  b.tenant_id as tenant_id,
  b.user_id,
  MIN(b.start_date) as first_start_date,
  MIN(b.lead_date) as first_lead_date,
  MIN(b.visit100_date) as first_vis100_date,
  MIN(b.first_campaign_date) as campaign_first_date,
  sum(b.visitors) as visitors,
  sum(b.views) as views,
  sum(b.cta_submits) as cta_submits,
  sum(b.unique_cta_submits) as unique_cta_submits,
  sum(b.cta_clicks) as cta_clicks,
  sum(b.leads) as leads,
  sum(b.clicks) as clicks,
  sum(b.total_spend) as total_spend,
  sum(b.impressions) as impressions
  FROM (
    SELECT
    d.tenant_id,
    d.user_id,
    d.start_date,
    MIN(d.start_date) OVER (PARTITION BY tenant_id) as first_campaign_date,
    d.lead_date,
    d.visitors,
    CASE WHEN d.sumvis >=100 AND d.sumvis IS NOT NULL THEN d.start_date
      ELSE NULL
    END
      AS visit100_date,
    d.views,
    d.cta_submits,
    d.unique_cta_submits,
    d.cta_clicks,
    d.leads,
    d.clicks,
    d.total_spend,
    d.impressions
    FROM (
      SELECT
      a.tenant_id,
      a.user_id,
      a.start_date,
      a.lead_date,
      a.visitors,
      sum(a.visitors) OVER (PARTITION BY a.tenant_id,a.user_id ORDER BY a.start_date ROWS UNBOUNDED PRECEDING) as sumvis,
      a.views,
      a.cta_submits,
      a.unique_cta_submits,
      a.cta_clicks,
      a.leads,
      a.clicks,
      a.total_spend,
      a.impressions
      FROM (
      SELECT
        z.engagement_id,
        z.ad_id,
        z.provider_ad_id_all,
        COALESCE(z.engagement_pitch_site_id, p.pitch_site_id) AS pitch_site_id,
        COALESCE(g.tenant_id, z.tenant_id, p.tenant_id) as tenant_id,
        COALESCE(g.user_id, p.user_id) as user_id,
        z.start_date,
        CASE WHEN z.cta_submits > 0 AND z.cta_submits IS NOT NULL THEN z.start_date
          ELSE NULL
        END
          AS lead_date,
        z.visitors,
        z.views,
        z.cta_submits,
        z.unique_cta_submits,
        z.cta_clicks,
        z.leads,
        z.clicks,
        z.total_spend,
        z.impressions
        FROM (
          SELECT
            x.id as engagement_id,
            y.id as ad_id,
            x.pitch_site_id as engagement_pitch_site_id,
            CASE WHEN x.provider_ad_id IS NOT NULL THEN x.provider_ad_id
              ELSE y.provider_ad_id
            END
              AS provider_ad_id_all,
            CASE WHEN x.start_date IS NOT NULL then x.start_date
             ELSE y.start_date
            END
             as start_date,
            y.tenant_id,
            x.visitors,
            x.views,
            x.cta_submits,
            x.unique_cta_submits,
            x.cta_clicks,
            x.leads,
            y.clicks,
            y.total_spend,
            y.impressions
          FROM (
            SELECT
              *
            FROM
              public_schema.provider_engagement_stats
            )  as x
          FULL OUTER JOIN
            public_schema.provider_ad_stats y
          ON
            x.provider_ad_id = y.provider_ad_id AND
            x.start_date = y.start_date
        ) as z
        LEFT OUTER JOIN
          public_schema.pitch_sites g
        ON
          z.engagement_pitch_site_id = g.id
        LEFT OUTER JOIN
          public_schema.provider_ads p
        ON
          z.provider_ad_id_all = p.id
      ) as a
    ) as d
  ) as b
  GROUP BY
    b.tenant_id,user_id

# models/schema.yml
version: 2

models:
  - name: campaign_stats_rollup
    columns:
      - name: tenant_id
      - name: lead_time
      - name: vis100_time
      - name: message_leads
      - name: leads
      - name: visitors
      - name: low_conversion_alert
      - name: low_traction_alert
      - name: salesforce_industry
      - name: company_size
      - name: company_size_range
      - name: days_into_campaign
      - name: conversion_pct
      - name: clicks
      - name: impressions
      - name: click_through_rate
      - name: leads_target
      - name: low_ctr
        description: "Less than .3% CTR"
      - name: visitors_target
      - name: low_visitors
        description: "Less than 10 visitors per day"
      - name: low_leads
        description: "Less than 1 lead every 10 days"
      - name: low_conversion
        description: "Less than .5% conversion rate"
      - name: alert_list
        description: "Low leads, low conversion rate, low visitors or low CTR"
      - name: manager
      - name: operations_lead

Assumptions

  • materialized='view' is the default; no persist hint found.
  • schema.yml columns come from view dimensions; a primary_key dimension gets unique + not_null tests.
campaign_stats_rollup.sql · 122 lines
source-preserved validation: parses
SELECT
  b.tenant_id as tenant_id,
  b.user_id,
  MIN(b.start_date) as first_start_date,
  MIN(b.lead_date) as first_lead_date,
  MIN(b.visit100_date) as first_vis100_date,
  MIN(b.first_campaign_date) as campaign_first_date,
  sum(b.visitors) as visitors,
  sum(b.views) as views,
  sum(b.cta_submits) as cta_submits,
  sum(b.unique_cta_submits) as unique_cta_submits,
  sum(b.cta_clicks) as cta_clicks,
  sum(b.leads) as leads,
  sum(b.clicks) as clicks,
  sum(b.total_spend) as total_spend,
  sum(b.impressions) as impressions
  FROM (
    SELECT
    d.tenant_id,
    d.user_id,
    d.start_date,
    MIN(d.start_date) OVER (PARTITION BY tenant_id) as first_campaign_date,
    d.lead_date,
    d.visitors,
    CASE WHEN d.sumvis >=100 AND d.sumvis IS NOT NULL THEN d.start_date
      ELSE NULL
    END
      AS visit100_date,
    d.views,
    d.cta_submits,
    d.unique_cta_submits,
    d.cta_clicks,
    d.leads,
    d.clicks,
    d.total_spend,
    d.impressions
    FROM (
      SELECT
      a.tenant_id,
      a.user_id,
      a.start_date,
      a.lead_date,
      a.visitors,
      sum(a.visitors) OVER (PARTITION BY a.tenant_id,a.user_id ORDER BY a.start_date ROWS UNBOUNDED PRECEDING) as sumvis,
      a.views,
      a.cta_submits,
      a.unique_cta_submits,
      a.cta_clicks,
      a.leads,
      a.clicks,
      a.total_spend,
      a.impressions
      FROM (
      SELECT
        z.engagement_id,
        z.ad_id,
        z.provider_ad_id_all,
        COALESCE(z.engagement_pitch_site_id, p.pitch_site_id) AS pitch_site_id,
        COALESCE(g.tenant_id, z.tenant_id, p.tenant_id) as tenant_id,
        COALESCE(g.user_id, p.user_id) as user_id,
        z.start_date,
        CASE WHEN z.cta_submits > 0 AND z.cta_submits IS NOT NULL THEN z.start_date
          ELSE NULL
        END
          AS lead_date,
        z.visitors,
        z.views,
        z.cta_submits,
        z.unique_cta_submits,
        z.cta_clicks,
        z.leads,
        z.clicks,
        z.total_spend,
        z.impressions
        FROM (
          SELECT
            x.id as engagement_id,
            y.id as ad_id,
            x.pitch_site_id as engagement_pitch_site_id,
            CASE WHEN x.provider_ad_id IS NOT NULL THEN x.provider_ad_id
              ELSE y.provider_ad_id
            END
              AS provider_ad_id_all,
            CASE WHEN x.start_date IS NOT NULL then x.start_date
             ELSE y.start_date
            END
             as start_date,
            y.tenant_id,
            x.visitors,
            x.views,
            x.cta_submits,
            x.unique_cta_submits,
            x.cta_clicks,
            x.leads,
            y.clicks,
            y.total_spend,
            y.impressions
          FROM (
            SELECT
              *
            FROM
              public_schema.provider_engagement_stats
            )  as x
          FULL OUTER JOIN
            public_schema.provider_ad_stats y
          ON
            x.provider_ad_id = y.provider_ad_id AND
            x.start_date = y.start_date
        ) as z
        LEFT OUTER JOIN
          public_schema.pitch_sites g
        ON
          z.engagement_pitch_site_id = g.id
        LEFT OUTER JOIN
          public_schema.provider_ads p
        ON
          z.provider_ad_id_all = p.id
      ) as a
    ) as d
  ) as b
  GROUP BY
    b.tenant_id,user_id
campaign_stats_rollup.view.lkml · 512 lines
inferred
view: campaign_stats_rollup {
  derived_table: {
    sql: SELECT
  b.tenant_id as tenant_id,
  b.user_id,
  MIN(b.start_date) as first_start_date,
  MIN(b.lead_date) as first_lead_date,
  MIN(b.visit100_date) as first_vis100_date,
  MIN(b.first_campaign_date) as campaign_first_date,
  sum(b.visitors) as visitors,
  sum(b.views) as views,
  sum(b.cta_submits) as cta_submits,
  sum(b.unique_cta_submits) as unique_cta_submits,
  sum(b.cta_clicks) as cta_clicks,
  sum(b.leads) as leads,
  sum(b.clicks) as clicks,
  sum(b.total_spend) as total_spend,
  sum(b.impressions) as impressions
  FROM (
    SELECT
    d.tenant_id,
    d.user_id,
    d.start_date,
    MIN(d.start_date) OVER (PARTITION BY tenant_id) as first_campaign_date,
    d.lead_date,
    d.visitors,
    CASE WHEN d.sumvis >=100 AND d.sumvis IS NOT NULL THEN d.start_date
      ELSE NULL
    END
      AS visit100_date,
    d.views,
    d.cta_submits,
    d.unique_cta_submits,
    d.cta_clicks,
    d.leads,
    d.clicks,
    d.total_spend,
    d.impressions
    FROM (
      SELECT
      a.tenant_id,
      a.user_id,
      a.start_date,
      a.lead_date,
      a.visitors,
      sum(a.visitors) OVER (PARTITION BY a.tenant_id,a.user_id ORDER BY a.start_date ROWS UNBOUNDED PRECEDING) as sumvis,
      a.views,
      a.cta_submits,
      a.unique_cta_submits,
      a.cta_clicks,
      a.leads,
      a.clicks,
      a.total_spend,
      a.impressions
      FROM (
      SELECT
        z.engagement_id,
        z.ad_id,
        z.provider_ad_id_all,
        COALESCE(z.engagement_pitch_site_id, p.pitch_site_id) AS pitch_site_id,
        COALESCE(g.tenant_id, z.tenant_id, p.tenant_id) as tenant_id,
        COALESCE(g.user_id, p.user_id) as user_id,
        z.start_date,
        CASE WHEN z.cta_submits > 0 AND z.cta_submits IS NOT NULL THEN z.start_date
          ELSE NULL
        END
          AS lead_date,
        z.visitors,
        z.views,
        z.cta_submits,
        z.unique_cta_submits,
        z.cta_clicks,
        z.leads,
        z.clicks,
        z.total_spend,
        z.impressions
        FROM (
          SELECT
            x.id as engagement_id,
            y.id as ad_id,
            x.pitch_site_id as engagement_pitch_site_id,
            CASE WHEN x.provider_ad_id IS NOT NULL THEN x.provider_ad_id
              ELSE y.provider_ad_id
            END
              AS provider_ad_id_all,
            CASE WHEN x.start_date IS NOT NULL then x.start_date
             ELSE y.start_date
            END
             as start_date,
            y.tenant_id,
            x.visitors,
            x.views,
            x.cta_submits,
            x.unique_cta_submits,
            x.cta_clicks,
            x.leads,
            y.clicks,
            y.total_spend,
            y.impressions
          FROM (
            SELECT
              *
            FROM
              public_schema.provider_engagement_stats
            )  as x
          FULL OUTER JOIN
            public_schema.provider_ad_stats y
          ON
            x.provider_ad_id = y.provider_ad_id AND
            x.start_date = y.start_date
        ) as z
        LEFT OUTER JOIN
          public_schema.pitch_sites g
        ON
          z.engagement_pitch_site_id = g.id
        LEFT OUTER JOIN
          public_schema.provider_ads p
        ON
          z.provider_ad_id_all = p.id
      ) as a
    ) as d
  ) as b
  GROUP BY
    b.tenant_id,user_id ;;
  }

  dimension: tenant_id {
    type: int
    sql: ${TABLE}.tenant_id ;;
  }

  dimension: lead_time {
    type: number
    hidden: yes
    sql: DATEDIFF(hours, ${TABLE}.first_start_date, ${TABLE}.first_lead_date) ;;
  }

  dimension: vis100_time {
    type: number
    hidden: yes
    sql: DATEDIFF(hours, ${TABLE}.first_start_date, ${TABLE}.first_vis100_date) ;;
  }

  dimension: message_leads {
    type: int
    sql: CASE
  WHEN ${campaign_message_leads.message_leads} IS NULL THEN 0
  ELSE ${campaign_message_leads.message_leads}
END ;;
  }

  dimension: leads {
    type: int
    sql: CASE
  WHEN ${TABLE}.unique_cta_submits IS NULL THEN ${message_leads}
  ELSE ${TABLE}.unique_cta_submits + ${message_leads}
END ;;
  }

  dimension: visitors {
    type: int
    hidden: yes
    sql: ${TABLE}.visitors ;;
  }

  dimension: low_conversion_alert {
    type: int
    sql: CASE
WHEN ${subscription_plans.price}<=500 AND ${leads}=0 AND ${TABLE}.clicks>=100 THEN 1
WHEN ${subscription_plans.price}= 900 AND ${leads}=0 AND ${TABLE}.clicks>=150 THEN 1
WHEN ${subscription_plans.price}= 2000 AND ${leads}=0 AND ${TABLE}.clicks>=200 THEN 1
WHEN ${subscription_plans.price}= 5000 AND ${leads}=0 AND ${TABLE}.clicks>=400 THEN 1
ELSE 0 END ;;
  }

  dimension: low_traction_alert {
    type: int
    hidden: yes
    sql: CASE
WHEN (now()::date - ${campaign_first_date}>3) AND ${TABLE}.visitors<10 THEN 1
ELSE 0 END ;;
  }

  dimension: salesforce_industry {
    sql: ${_account.industry} ;;
  }

  dimension: company_size {
    type: int
    sql: ${_account.number_of_employees} ;;
  }

  dimension: company_size_range {
    type: tier
    sql: ${_account.number_of_employees} ;;
  }

  dimension: days_into_campaign {
    type: int
    hidden: yes
    sql: CURRENT_DATE - ${campaign_first_date} + 1 ;;
  }

  dimension: conversion_pct {
    type: number
    hidden: yes
    value_format: "#.00%"
    sql: 1.00*${leads}/NULLIF(${visitors},0) ;;
  }

  dimension: clicks {
    type: int
    hidden: yes
    sql: ${TABLE}.clicks ;;
  }

  dimension: impressions {
    type: int
    hidden: yes
    sql: ${TABLE}.impressions ;;
  }

  dimension: click_through_rate {
    type: number
    hidden: yes
    value_format: "#.00%"
    sql: 1.00*${clicks}/NULLIF(${impressions},0) ;;
  }

  dimension: leads_target {
    type: int
    sql: FLOOR(${days_into_campaign} * .1) ;;
  }

  dimension: low_ctr {
    description: "Less than .3% CTR"
    type: int
    sql: CASE
WHEN ${subscription_plans.price}<=500 AND ${clicks}>=100 AND ${click_through_rate} < .003 THEN 1
WHEN ${subscription_plans.price}= 900 AND ${clicks}>=150 AND ${click_through_rate} < .003 THEN 1
WHEN ${subscription_plans.price}= 2000 AND ${clicks}>=200 AND ${click_through_rate} < .003 THEN 1
WHEN ${subscription_plans.price}>= 5000 AND ${clicks}>=400 AND ${click_through_rate} < .003 THEN 1
ELSE 0 END ;;
  }

  dimension: visitors_target {
    type: int
    hidden: yes
    sql: ${days_into_campaign} * 10 ;;
  }

  dimension: low_visitors {
    description: "Less than 10 visitors per day"
    type: int
    sql: CASE
WHEN ${visitors} < ${visitors_target} THEN 1
ELSE 0 END ;;
  }

  dimension: low_leads {
    description: "Less than 1 lead every 10 days"
    type: int
    sql: CASE
WHEN ${leads} < ${leads_target} THEN 1
ELSE 0 END ;;
  }

  dimension: low_conversion {
    description: "Less than .5% conversion rate"
    type: int
    sql: CASE
WHEN ${subscription_plans.price}<=500 AND ${visitors}>=100 AND ${conversion_pct} < .005 THEN 1
WHEN ${subscription_plans.price}= 900 AND ${visitors}>=150 AND ${conversion_pct} < .005 THEN 1
WHEN ${subscription_plans.price}= 2000 AND ${visitors}>=200 AND ${conversion_pct} < .005 THEN 1
WHEN ${subscription_plans.price}>= 5000 AND ${visitors}>=400 AND ${conversion_pct} < .005 THEN 1
ELSE 0 END ;;
  }

  dimension: alert_list {
    description: "Low leads, low conversion rate, low visitors or low CTR"
    type: int
    sql: CASE
WHEN ${low_conversion} = 1 THEN 1
WHEN ${low_leads} = 1 THEN 1
WHEN ${low_visitors} = 1 THEN 1
WHEN ${low_ctr} = 1 THEN 1
ELSE 0 END ;;
  }

  dimension: manager {
    sql: COALESCE(${_account.manager}, ${people2.display_name}) ;;
  }

  dimension: operations_lead {
    sql: COALESCE(${_account.operations_lead}, ${people3.display_name}) ;;
  }

  dimension_group: first_start {
    label: "First Ad"
    type: time
    timeframes: [date, week, month]
    convert_tz: no
    sql: ${TABLE}.first_start_date ;;
  }

  dimension_group: campaign_first {
    label: "Campaign First Ad"
    type: time
    timeframes: [date, week, month]
    convert_tz: no
    sql: ${TABLE}.campaign_first_date ;;
  }

  dimension_group: first_lead {
    type: time
    timeframes: [date, week, month]
    convert_tz: no
    sql: ${TABLE}.first_lead_date ;;
  }

  dimension_group: first_vis100 {
    type: time
    timeframes: [date, week, month]
    convert_tz: no
    sql: ${TABLE}.first_vis100_date ;;
  }

  measure: first_lead_days {
    type: average
    drill_fields: [detail*]
    sql: 1.00*${lead_time}/24 ;;
  }

  measure: first_vis100_days {
    type: average
    drill_fields: [detail*]
    sql: 1.00*${vis100_time}/24 ;;
  }

  measure: total_visitors {
    type: sum
    drill_fields: [detail*]
    sql: ${TABLE}.visitors ;;
  }

  measure: total_views {
    type: sum
    drill_fields: [detail*]
    sql: ${TABLE}.views ;;
  }

  measure: total_clicks {
    type: sum
    drill_fields: [detail*]
    sql: ${TABLE}.clicks ;;
  }

  measure: total_impressions {
    type: sum
    drill_fields: [detail*]
    sql: ${TABLE}.impressions ;;
  }

  measure: sum_total_spend {
    label: "Total Spend"
    type: sum
    value_format: "$#,##0.00"
    drill_fields: [detail*]
    sql: (1.00)*${TABLE}.total_spend/100 ;;
  }

  measure: total_non_redirect_leads {
    type: sum
    drill_fields: [detail*]
    sql: ${TABLE}.leads ;;
  }

  measure: total_cta_clicks {
    type: sum
    drill_fields: [detail*]
    sql: ${TABLE}.cta_clicks ;;
  }

  measure: total_leads {
    type: sum
    drill_fields: [detail*]
    sql: ${leads} ;;
  }

  measure: total_message_leads {
    type: sum
    drill_fields: [detail*]
    sql: ${message_leads} ;;
  }

  measure: sum_mrr {
    type: sum
    value_format: "$#,##0.00"
    drill_fields: [detail*]
    sql: ${subscription_plans.price} ;;
  }

  measure: avg_visitors {
    type: average
    drill_fields: [detail*]
    sql: 1.00*${TABLE}.visitors ;;
  }

  measure: avg_views {
    type: average
    drill_fields: [detail*]
    sql: 1.00*${TABLE}.views ;;
  }

  measure: avg_clicks {
    type: average
    drill_fields: [detail*]
    sql: 1.00*${TABLE}.clicks ;;
  }

  measure: avg_impressions {
    type: average
    drill_fields: [detail*]
    sql: 1.00*${TABLE}.impressions ;;
  }

  measure: avg_total_spend {
    type: average
    value_format: "$#,##0.00"
    drill_fields: [detail*]
    sql: (1.00)*${TABLE}.total_spend/100 ;;
  }

  measure: avg_non_redirect_leads {
    type: average
    hidden: yes
    drill_fields: [detail*]
    sql: 1.00*${TABLE}.leads ;;
  }

  measure: avg_cta_clicks {
    type: average
    drill_fields: [detail*]
    sql: 1.00*${TABLE}.cta_clicks ;;
  }

  measure: avg_leads {
    type: average
    drill_fields: [detail*]
    sql: 1.00*${leads} ;;
  }

  measure: avg_message_leads {
    type: average
    drill_fields: [detail*]
    sql: 1.00*${message_leads} ;;
  }

  measure: pct_message_leads {
    type: number
    value_format: "#.00%"
    drill_fields: [detail*]
    sql: 1.00*${total_message_leads}/NULLIF(${total_leads},0) ;;
  }

  measure: ctr {
    type: number
    value_format: "#.00%"
    drill_fields: [detail*]
    sql: 1.00*${campaign_stats_rollup.total_clicks}/NULLIF(${campaign_stats_rollup.total_impressions},0) ;;
  }

  measure: cpc {
    type: number
    value_format: "$#,##0.00"
    drill_fields: [detail*]
    sql: 1.00*${campaign_stats_rollup.sum_total_spend}/NULLIF(${campaign_stats_rollup.total_clicks},0) ;;
  }

  measure: percent_cta_clicks {
    type: number
    value_format: "#.00%"
    drill_fields: [detail*]
    sql: 1.00*${campaign_stats_rollup.total_cta_clicks}/NULLIF(${campaign_stats_rollup.total_views},0) ;;
  }

  measure: percent_submit {
    type: number
    value_format: "#.00%"
    drill_fields: [detail*]
    sql: 1.00*${campaign_stats_rollup.total_leads}/NULLIF(${campaign_stats_rollup.total_cta_clicks},0) ;;
  }

  measure: cpl {
    type: number
    value_format: "$#,##0.00"
    drill_fields: [detail*]
    sql: 1.00*${campaign_stats_rollup.sum_total_spend}/NULLIF(${campaign_stats_rollup.total_leads},0) ;;
  }

  measure: conversion_rate {
    type: number
    value_format: "#.00%"
    drill_fields: [detail*]
    sql: 1.00*${campaign_stats_rollup.total_leads}/NULLIF(${campaign_stats_rollup.total_visitors},0) ;;
  }

  measure: count {
    type: count
    drill_fields: [detail*]
  }
}
campaign_stats_rollup.view.lookml · 433 lines
source-preserved
- view: campaign_stats_rollup
  derived_table:
    sql: SELECT
  b.tenant_id as tenant_id,
  b.user_id,
  MIN(b.start_date) as first_start_date,
  MIN(b.lead_date) as first_lead_date,
  MIN(b.visit100_date) as first_vis100_date,
  MIN(b.first_campaign_date) as campaign_first_date,
  sum(b.visitors) as visitors,
  sum(b.views) as views,
  sum(b.cta_submits) as cta_submits,
  sum(b.unique_cta_submits) as unique_cta_submits,
  sum(b.cta_clicks) as cta_clicks,
  sum(b.leads) as leads,
  sum(b.clicks) as clicks,
  sum(b.total_spend) as total_spend,
  sum(b.impressions) as impressions
  FROM (
    SELECT
    d.tenant_id,
    d.user_id,
    d.start_date,
    MIN(d.start_date) OVER (PARTITION BY tenant_id) as first_campaign_date,
    d.lead_date,
    d.visitors,
    CASE WHEN d.sumvis >=100 AND d.sumvis IS NOT NULL THEN d.start_date
      ELSE NULL
    END
      AS visit100_date,
    d.views,
    d.cta_submits,
    d.unique_cta_submits,
    d.cta_clicks,
    d.leads,
    d.clicks,
    d.total_spend,
    d.impressions
    FROM (
      SELECT
      a.tenant_id,
      a.user_id,
      a.start_date,
      a.lead_date,
      a.visitors,
      sum(a.visitors) OVER (PARTITION BY a.tenant_id,a.user_id ORDER BY a.start_date ROWS UNBOUNDED PRECEDING) as sumvis,
      a.views,
      a.cta_submits,
      a.unique_cta_submits,
      a.cta_clicks,
      a.leads,
      a.clicks,
      a.total_spend,
      a.impressions
      FROM (
      SELECT
        z.engagement_id,
        z.ad_id,
        z.provider_ad_id_all,
        COALESCE(z.engagement_pitch_site_id, p.pitch_site_id) AS pitch_site_id,
        COALESCE(g.tenant_id, z.tenant_id, p.tenant_id) as tenant_id,
        COALESCE(g.user_id, p.user_id) as user_id,
        z.start_date,
        CASE WHEN z.cta_submits > 0 AND z.cta_submits IS NOT NULL THEN z.start_date
          ELSE NULL
        END
          AS lead_date,
        z.visitors,
        z.views,
        z.cta_submits,
        z.unique_cta_submits,
        z.cta_clicks,
        z.leads,
        z.clicks,
        z.total_spend,
        z.impressions
        FROM (
          SELECT
            x.id as engagement_id,
            y.id as ad_id,
            x.pitch_site_id as engagement_pitch_site_id,
            CASE WHEN x.provider_ad_id IS NOT NULL THEN x.provider_ad_id
              ELSE y.provider_ad_id
            END
              AS provider_ad_id_all,
            CASE WHEN x.start_date IS NOT NULL then x.start_date
             ELSE y.start_date
            END
             as start_date,
            y.tenant_id,
            x.visitors,
            x.views,
            x.cta_submits,
            x.unique_cta_submits,
            x.cta_clicks,
            x.leads,
            y.clicks,
            y.total_spend,
            y.impressions
          FROM (
            SELECT
              *
            FROM
              public_schema.provider_engagement_stats
            )  as x
          FULL OUTER JOIN
            public_schema.provider_ad_stats y
          ON
            x.provider_ad_id = y.provider_ad_id AND
            x.start_date = y.start_date
        ) as z
        LEFT OUTER JOIN
          public_schema.pitch_sites g
        ON
          z.engagement_pitch_site_id = g.id
        LEFT OUTER JOIN
          public_schema.provider_ads p
        ON
          z.provider_ad_id_all = p.id
      ) as a
    ) as d
  ) as b
  GROUP BY
    b.tenant_id,user_id
  fields:
  - dimension: tenant_id
    type: int
    sql: ${TABLE}.tenant_id
  - dimension: lead_time
    type: number
    hidden: true
    sql: DATEDIFF(hours, ${TABLE}.first_start_date, ${TABLE}.first_lead_date)
  - dimension: vis100_time
    type: number
    hidden: true
    sql: DATEDIFF(hours, ${TABLE}.first_start_date, ${TABLE}.first_vis100_date)
  - dimension: message_leads
    type: int
    sql: CASE
  WHEN ${campaign_message_leads.message_leads} IS NULL THEN 0
  ELSE ${campaign_message_leads.message_leads}
END
  - dimension: leads
    type: int
    sql: CASE
  WHEN ${TABLE}.unique_cta_submits IS NULL THEN ${message_leads}
  ELSE ${TABLE}.unique_cta_submits + ${message_leads}
END
  - dimension: visitors
    type: int
    hidden: true
    sql: ${TABLE}.visitors
  - dimension: low_conversion_alert
    type: int
    sql: CASE
WHEN ${subscription_plans.price}<=500 AND ${leads}=0 AND ${TABLE}.clicks>=100 THEN 1
WHEN ${subscription_plans.price}= 900 AND ${leads}=0 AND ${TABLE}.clicks>=150 THEN 1
WHEN ${subscription_plans.price}= 2000 AND ${leads}=0 AND ${TABLE}.clicks>=200 THEN 1
WHEN ${subscription_plans.price}= 5000 AND ${leads}=0 AND ${TABLE}.clicks>=400 THEN 1
ELSE 0 END
  - dimension: low_traction_alert
    type: int
    hidden: true
    sql: CASE
WHEN (now()::date - ${campaign_first_date}>3) AND ${TABLE}.visitors<10 THEN 1
ELSE 0 END
  - dimension: salesforce_industry
    sql: ${_account.industry}
  - dimension: company_size
    type: int
    sql: ${_account.number_of_employees}
  - dimension: company_size_range
    type: tier
    sql: ${_account.number_of_employees}
  - dimension: days_into_campaign
    type: int
    hidden: true
    sql: CURRENT_DATE - ${campaign_first_date} + 1
  - dimension: conversion_pct
    type: number
    hidden: true
    value_format: '#.00%'
    sql: 1.00*${leads}/NULLIF(${visitors},0)
  - dimension: clicks
    type: int
    hidden: true
    sql: ${TABLE}.clicks
  - dimension: impressions
    type: int
    hidden: true
    sql: ${TABLE}.impressions
  - dimension: click_through_rate
    type: number
    hidden: true
    value_format: '#.00%'
    sql: 1.00*${clicks}/NULLIF(${impressions},0)
  - dimension: leads_target
    type: int
    sql: FLOOR(${days_into_campaign} * .1)
  - dimension: low_ctr
    type: int
    description: 'Less than .3% CTR'
    sql: CASE
WHEN ${subscription_plans.price}<=500 AND ${clicks}>=100 AND ${click_through_rate} < .003 THEN 1
WHEN ${subscription_plans.price}= 900 AND ${clicks}>=150 AND ${click_through_rate} < .003 THEN 1
WHEN ${subscription_plans.price}= 2000 AND ${clicks}>=200 AND ${click_through_rate} < .003 THEN 1
WHEN ${subscription_plans.price}>= 5000 AND ${clicks}>=400 AND ${click_through_rate} < .003 THEN 1
ELSE 0 END
  - dimension: visitors_target
    type: int
    hidden: true
    sql: ${days_into_campaign} * 10
  - dimension: low_visitors
    type: int
    description: Less than 10 visitors per day
    sql: CASE
WHEN ${visitors} < ${visitors_target} THEN 1
ELSE 0 END
  - dimension: low_leads
    type: int
    description: Less than 1 lead every 10 days
    sql: CASE
WHEN ${leads} < ${leads_target} THEN 1
ELSE 0 END
  - dimension: low_conversion
    type: int
    description: 'Less than .5% conversion rate'
    sql: CASE
WHEN ${subscription_plans.price}<=500 AND ${visitors}>=100 AND ${conversion_pct} < .005 THEN 1
WHEN ${subscription_plans.price}= 900 AND ${visitors}>=150 AND ${conversion_pct} < .005 THEN 1
WHEN ${subscription_plans.price}= 2000 AND ${visitors}>=200 AND ${conversion_pct} < .005 THEN 1
WHEN ${subscription_plans.price}>= 5000 AND ${visitors}>=400 AND ${conversion_pct} < .005 THEN 1
ELSE 0 END
  - dimension: alert_list
    type: int
    description: Low leads, low conversion rate, low visitors or low CTR
    sql: CASE
WHEN ${low_conversion} = 1 THEN 1
WHEN ${low_leads} = 1 THEN 1
WHEN ${low_visitors} = 1 THEN 1
WHEN ${low_ctr} = 1 THEN 1
ELSE 0 END
  - dimension: manager
    sql: COALESCE(${_account.manager}, ${people2.display_name})
  - dimension: operations_lead
    sql: COALESCE(${_account.operations_lead}, ${people3.display_name})
  - dimension_group: first_start
    type: time
    timeframes:
    - date
    - week
    - month
    convert_tz: false
    sql: ${TABLE}.first_start_date
  - dimension_group: campaign_first
    type: time
    timeframes:
    - date
    - week
    - month
    convert_tz: false
    sql: ${TABLE}.campaign_first_date
  - dimension_group: first_lead
    type: time
    timeframes:
    - date
    - week
    - month
    convert_tz: false
    sql: ${TABLE}.first_lead_date
  - dimension_group: first_vis100
    type: time
    timeframes:
    - date
    - week
    - month
    convert_tz: false
    sql: ${TABLE}.first_vis100_date
  - measure: first_lead_days
    type: average
    drill_fields:
    - detail*
    sql: 1.00*${lead_time}/24
  - measure: first_vis100_days
    type: average
    drill_fields:
    - detail*
    sql: 1.00*${vis100_time}/24
  - measure: total_visitors
    type: sum
    drill_fields:
    - detail*
    sql: ${TABLE}.visitors
  - measure: total_views
    type: sum
    drill_fields:
    - detail*
    sql: ${TABLE}.views
  - measure: total_clicks
    type: sum
    drill_fields:
    - detail*
    sql: ${TABLE}.clicks
  - measure: total_impressions
    type: sum
    drill_fields:
    - detail*
    sql: ${TABLE}.impressions
  - measure: sum_total_spend
    type: sum
    label: Total Spend
    value_format: '$#,##0.00'
    drill_fields:
    - detail*
    sql: (1.00)*${TABLE}.total_spend/100
  - measure: total_non_redirect_leads
    type: sum
    drill_fields:
    - detail*
    sql: ${TABLE}.leads
  - measure: total_cta_clicks
    type: sum
    drill_fields:
    - detail*
    sql: ${TABLE}.cta_clicks
  - measure: total_leads
    type: sum
    drill_fields:
    - detail*
    sql: ${leads}
  - measure: total_message_leads
    type: sum
    drill_fields:
    - detail*
    sql: ${message_leads}
  - measure: sum_mrr
    type: sum
    value_format: '$#,##0.00'
    drill_fields:
    - detail*
    sql: ${subscription_plans.price}
  - measure: avg_visitors
    type: average
    drill_fields:
    - detail*
    sql: 1.00*${TABLE}.visitors
  - measure: avg_views
    type: average
    drill_fields:
    - detail*
    sql: 1.00*${TABLE}.views
  - measure: avg_clicks
    type: average
    drill_fields:
    - detail*
    sql: 1.00*${TABLE}.clicks
  - measure: avg_impressions
    type: average
    drill_fields:
    - detail*
    sql: 1.00*${TABLE}.impressions
  - measure: avg_total_spend
    type: average
    value_format: '$#,##0.00'
    drill_fields:
    - detail*
    sql: (1.00)*${TABLE}.total_spend/100
  - measure: avg_non_redirect_leads
    type: average
    drill_fields:
    - detail*
    sql: 1.00*${TABLE}.leads
  - measure: avg_cta_clicks
    type: average
    drill_fields:
    - detail*
    sql: 1.00*${TABLE}.cta_clicks
  - measure: avg_leads
    type: average
    drill_fields:
    - detail*
    sql: 1.00*${leads}
  - measure: avg_message_leads
    type: average
    drill_fields:
    - detail*
    sql: 1.00*${message_leads}
  - measure: pct_message_leads
    type: number
    value_format: '#.00%'
    drill_fields:
    - detail*
    sql: 1.00*${total_message_leads}/NULLIF(${total_leads},0)
  - measure: ctr
    type: number
    value_format: '#.00%'
    drill_fields:
    - detail*
    sql: 1.00*${campaign_stats_rollup.total_clicks}/NULLIF(${campaign_stats_rollup.total_impressions},0)
  - measure: cpc
    type: number
    value_format: '$#,##0.00'
    drill_fields:
    - detail*
    sql: 1.00*${campaign_stats_rollup.sum_total_spend}/NULLIF(${campaign_stats_rollup.total_clicks},0)
  - measure: percent_cta_clicks
    type: number
    value_format: '#.00%'
    drill_fields:
    - detail*
    sql: 1.00*${campaign_stats_rollup.total_cta_clicks}/NULLIF(${campaign_stats_rollup.total_views},0)
  - measure: percent_submit
    type: number
    value_format: '#.00%'
    drill_fields:
    - detail*
    sql: 1.00*${campaign_stats_rollup.total_leads}/NULLIF(${campaign_stats_rollup.total_cta_clicks},0)
  - measure: cpl
    type: number
    value_format: '$#,##0.00'
    drill_fields:
    - detail*
    sql: 1.00*${campaign_stats_rollup.sum_total_spend}/NULLIF(${campaign_stats_rollup.total_leads},0)
  - measure: conversion_rate
    type: number
    value_format: '#.00%'
    drill_fields:
    - detail*
    sql: 1.00*${campaign_stats_rollup.total_leads}/NULLIF(${campaign_stats_rollup.total_visitors},0)
  - measure: count
    type: count
    drill_fields:
    - detail*

Contents

  • campaign_stats_rollup.sql
  • campaign_stats_rollup.sql
  • campaign_stats_rollup.view.lkml
  • campaign_stats_rollup.view.lookml