SQL Advertising automotive

Campaigns

Campaigns model for advertising automotive.

source-preserved

Blocks

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

SELECT
s.app_id,
s.domain_userid,
s.domain_sessionidx,
s.session_start_ts,

-- Fetch source fields from paid table if they exist there, otherwise fall back to the organic table
CASE WHEN p.mkt_source IS NOT NULL THEN p.mkt_source WHEN o.refr_medium = 'unknown' THEN 'Other website' ELSE o.refr_source END AS mkt_source,
CASE WHEN p.mkt_source IS NOT NULL THEN p.mkt_medium WHEN o.refr_medium = 'unknown' THEN 'Other website' ELSE o.refr_medium  END AS mkt_medium,
CASE WHEN p.mkt_source IS NOT NULL THEN p.mkt_campaign ELSE o.refr_urlhost END AS mkt_campaign

FROM {{ ref('session_list_calc') }} s
LEFT JOIN {{ ref('paid_campaign_list_calc') }} p
ON s.app_id = p.app_id
AND s.domain_userid = p.domain_userid
AND s.domain_sessionidx = p.domain_sessionidx
LEFT JOIN {{ ref('organic_referer_calc') }} o
ON s.app_id = o.app_id
AND s.domain_userid = o.domain_userid
AND s.domain_sessionidx = o.domain_sessionidx

# models/schema.yml
version: 2

models:
  - name: campaigns
    columns:
      - name: application_id
      - name: user_id
      - name: session_index
      - name: timestamp
      - name: source
      - name: medium
      - name: name
      - name: retargeted

Assumptions

  • Each ${view.SQL_TABLE_NAME} was mapped to {{ ref('view') }}; confirm a dbt model exists for each referenced view.
  • 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.
campaigns.sql · 20 lines
source-preserved validation: not checked
SELECT
s.app_id,
s.domain_userid,
s.domain_sessionidx,
s.session_start_ts,

-- Fetch source fields from paid table if they exist there, otherwise fall back to the organic table
CASE WHEN p.mkt_source IS NOT NULL THEN p.mkt_source WHEN o.refr_medium = 'unknown' THEN 'Other website' ELSE o.refr_source END AS mkt_source,
CASE WHEN p.mkt_source IS NOT NULL THEN p.mkt_medium WHEN o.refr_medium = 'unknown' THEN 'Other website' ELSE o.refr_medium  END AS mkt_medium,
CASE WHEN p.mkt_source IS NOT NULL THEN p.mkt_campaign ELSE o.refr_urlhost END AS mkt_campaign

FROM ${session_list_calc.SQL_TABLE_NAME} s
LEFT JOIN ${paid_campaign_list_calc.SQL_TABLE_NAME} p
ON s.app_id = p.app_id
AND s.domain_userid = p.domain_userid
AND s.domain_sessionidx = p.domain_sessionidx
LEFT JOIN ${organic_referer_calc.SQL_TABLE_NAME} o
ON s.app_id = o.app_id
AND s.domain_userid = o.domain_userid
AND s.domain_sessionidx = o.domain_sessionidx
campaigns.view.lkml · 88 lines
inferred
view: campaigns {
  derived_table: {
    sql: SELECT
s.app_id,
s.domain_userid,
s.domain_sessionidx,
s.session_start_ts,

-- Fetch source fields from paid table if they exist there, otherwise fall back to the organic table
CASE WHEN p.mkt_source IS NOT NULL THEN p.mkt_source WHEN o.refr_medium = 'unknown' THEN 'Other website' ELSE o.refr_source END AS mkt_source,
CASE WHEN p.mkt_source IS NOT NULL THEN p.mkt_medium WHEN o.refr_medium = 'unknown' THEN 'Other website' ELSE o.refr_medium  END AS mkt_medium,
CASE WHEN p.mkt_source IS NOT NULL THEN p.mkt_campaign ELSE o.refr_urlhost END AS mkt_campaign

FROM ${session_list_calc.SQL_TABLE_NAME} s
LEFT JOIN ${paid_campaign_list_calc.SQL_TABLE_NAME} p
ON s.app_id = p.app_id
AND s.domain_userid = p.domain_userid
AND s.domain_sessionidx = p.domain_sessionidx
LEFT JOIN ${organic_referer_calc.SQL_TABLE_NAME} o
ON s.app_id = o.app_id
AND s.domain_userid = o.domain_userid
AND s.domain_sessionidx = o.domain_sessionidx ;;
  }

  dimension: application_id {
    sql: ${TABLE}.app_id ;;
  }

  dimension: user_id {
    sql: ${TABLE}.domain_userid ;;
  }

  dimension: session_index {
    sql: ${TABLE}.domain_sessionidx ;;
  }

  dimension: timestamp {
    sql: ${TABLE}.session_start_ts ;;
  }

  dimension: source {
    sql: ${TABLE}.mkt_source ;;
  }

  dimension: medium {
    sql: ${TABLE}.mkt_medium ;;
  }

  dimension: name {
    sql: ${TABLE}.mkt_campaign ;;
  }

  dimension: retargeted {
    type: yesno
    sql: (${name} LIKE 'basicretargeting') OR (${medium} LIKE 'Dynamic Retargeting') ;;
  }

  dimension_group: timestamp {
    type: time
    timeframes: [date, week, month]
    sql: ${TABLE}.session_start_ts ;;
  }

  measure: visitors_count {
    type: count_distinct
    sql: ${user_id} ;;
  }

  measure: sessions_count {
    type: count_distinct
    sql: ${user_id} || ${session_index} ;;
  }

  measure: sources_count {
    type: count_distinct
    sql: ${source} ;;
  }

  measure: medium_count {
    type: count_distinct
    sql: ${medium} ;;
  }

  measure: name_count {
    type: count_distinct
    sql: ${name} ;;
  }
}
campaigns.view.lookml · 62 lines
source-preserved
- view: campaigns
  derived_table:
    sql: SELECT
s.app_id,
s.domain_userid,
s.domain_sessionidx,
s.session_start_ts,

-- Fetch source fields from paid table if they exist there, otherwise fall back to the organic table
CASE WHEN p.mkt_source IS NOT NULL THEN p.mkt_source WHEN o.refr_medium = 'unknown' THEN 'Other website' ELSE o.refr_source END AS mkt_source,
CASE WHEN p.mkt_source IS NOT NULL THEN p.mkt_medium WHEN o.refr_medium = 'unknown' THEN 'Other website' ELSE o.refr_medium  END AS mkt_medium,
CASE WHEN p.mkt_source IS NOT NULL THEN p.mkt_campaign ELSE o.refr_urlhost END AS mkt_campaign

FROM ${session_list_calc.SQL_TABLE_NAME} s
LEFT JOIN ${paid_campaign_list_calc.SQL_TABLE_NAME} p
ON s.app_id = p.app_id
AND s.domain_userid = p.domain_userid
AND s.domain_sessionidx = p.domain_sessionidx
LEFT JOIN ${organic_referer_calc.SQL_TABLE_NAME} o
ON s.app_id = o.app_id
AND s.domain_userid = o.domain_userid
AND s.domain_sessionidx = o.domain_sessionidx
  fields:
  - dimension: application_id
    sql: ${TABLE}.app_id
  - dimension: user_id
    sql: ${TABLE}.domain_userid
  - dimension: session_index
    sql: ${TABLE}.domain_sessionidx
  - dimension: timestamp
    sql: ${TABLE}.session_start_ts
  - dimension: source
    sql: ${TABLE}.mkt_source
  - dimension: medium
    sql: ${TABLE}.mkt_medium
  - dimension: name
    sql: ${TABLE}.mkt_campaign
  - dimension: retargeted
    type: yesno
    sql: (${name} LIKE 'basicretargeting') OR (${medium} LIKE 'Dynamic Retargeting')
  - dimension_group: timestamp
    type: time
    timeframes:
    - date
    - week
    - month
    sql: ${TABLE}.session_start_ts
  - measure: visitors_count
    type: count_distinct
    sql: ${user_id}
  - measure: sessions_count
    type: count_distinct
    sql: ${user_id} || ${session_index}
  - measure: sources_count
    type: count_distinct
    sql: ${source}
  - measure: medium_count
    type: count_distinct
    sql: ${medium}
  - measure: name_count
    type: count_distinct
    sql: ${name}

Contents

  • campaigns.sql
  • campaigns.sql
  • campaigns.view.lkml
  • campaigns.view.lookml