SQL Advertising

Impressions Clicks Conversions

Impressions Clicks Conversions model for advertising.

source-preserved

Blocks

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

SELECT 'impression' AS type
  , partner_id
  , campaign_id
  , DATE(impression_gmt_timestamp) AS event
  , SUM(bidder_total_spend)::FLOAT AS bidder_spend
  , COUNT(*) AS occurrences
FROM impressions_30d
GROUP BY 1,2,3,4

UNION ALL

SELECT 'click' AS type
  , partner_id
  , campaign_id
  , DATE(click_gmt_timestamp) AS event
  , NULL AS bidder_spend
  , COUNT(*) AS occurrences
FROM clicks
GROUP BY 1,2,3,4

UNION ALL

SELECT 'conversion' AS type
  , partner_id
  , campaign_id
  , DATE(conversion_gmt_timestamp) AS event
  , NULL AS bidder_spend
  , COUNT(*) AS occurrences
FROM attributed_merit
GROUP BY 1,2,3,4

# models/schema.yml
version: 2

models:
  - name: impressions_clicks_conversions
    columns:
      - name: type
      - name: partner_id
      - name: campaign_id
      - name: bidder_spend
      - name: occurrences

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.
impressions_clicks_conversions.sql · 30 lines
source-preserved validation: parses
SELECT 'impression' AS type
  , partner_id
  , campaign_id
  , DATE(impression_gmt_timestamp) AS event
  , SUM(bidder_total_spend)::FLOAT AS bidder_spend
  , COUNT(*) AS occurrences
FROM impressions_30d
GROUP BY 1,2,3,4

UNION ALL

SELECT 'click' AS type
  , partner_id
  , campaign_id
  , DATE(click_gmt_timestamp) AS event
  , NULL AS bidder_spend
  , COUNT(*) AS occurrences
FROM clicks
GROUP BY 1,2,3,4

UNION ALL

SELECT 'conversion' AS type
  , partner_id
  , campaign_id
  , DATE(conversion_gmt_timestamp) AS event
  , NULL AS bidder_spend
  , COUNT(*) AS occurrences
FROM attributed_merit
GROUP BY 1,2,3,4
impressions_clicks_conversions.view.lkml · 111 lines
inferred
view: impressions_clicks_conversions {
  derived_table: {
    sql: SELECT 'impression' AS type
  , partner_id
  , campaign_id
  , DATE(impression_gmt_timestamp) AS event
  , SUM(bidder_total_spend)::FLOAT AS bidder_spend
  , COUNT(*) AS occurrences
FROM impressions_30d
GROUP BY 1,2,3,4

UNION ALL

SELECT 'click' AS type
  , partner_id
  , campaign_id
  , DATE(click_gmt_timestamp) AS event
  , NULL AS bidder_spend
  , COUNT(*) AS occurrences
FROM clicks
GROUP BY 1,2,3,4

UNION ALL

SELECT 'conversion' AS type
  , partner_id
  , campaign_id
  , DATE(conversion_gmt_timestamp) AS event
  , NULL AS bidder_spend
  , COUNT(*) AS occurrences
FROM attributed_merit
GROUP BY 1,2,3,4 ;;
  }

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

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

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

  dimension: bidder_spend {
    type: number
    sql: ${TABLE}.bidder_spend ;;
  }

  dimension: occurrences {
    type: number
    hidden: yes
    sql: ${TABLE}.occurrences ;;
  }

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

  measure: total_impressions {
    type: sum
    filters: [type: "impression"]
    drill_fields: [detail*]
    sql: ${occurrences} ;;
  }

  measure: total_clicks {
    type: sum
    filters: [type: "click"]
    drill_fields: [detail*]
    sql: ${occurrences} ;;
  }

  measure: total_conversions {
    type: sum
    filters: [type: "conversion"]
    drill_fields: [detail*]
    sql: ${occurrences} ;;
  }

  measure: total_bidder_spend {
    type: sum
    sql: ${bidder_spend} ;;
  }

  measure: cpm {
    label: "Impressions Clicks Conversions CPM"
    type: number
    sql: ${total_bidder_spend} / NULLIF(${total_impressions}, 0) ;;
  }

  measure: cpc {
    label: "Impressions Clicks Conversions CPC"
    type: number
    sql: ${total_bidder_spend} / NULLIF((${total_clicks} * 1000), 0) ;;
  }

  measure: cpa {
    label: "Impressions Clicks Conversions CPA"
    type: number
    sql: ${total_bidder_spend} / NULLIF((${total_conversions} * 1000), 0) ;;
  }
}
impressions_clicks_conversions.view.lookml · 92 lines
source-preserved
- view: impressions_clicks_conversions
  derived_table:
    sql: SELECT 'impression' AS type
  , partner_id
  , campaign_id
  , DATE(impression_gmt_timestamp) AS event
  , SUM(bidder_total_spend)::FLOAT AS bidder_spend
  , COUNT(*) AS occurrences
FROM impressions_30d
GROUP BY 1,2,3,4

UNION ALL

SELECT 'click' AS type
  , partner_id
  , campaign_id
  , DATE(click_gmt_timestamp) AS event
  , NULL AS bidder_spend
  , COUNT(*) AS occurrences
FROM clicks
GROUP BY 1,2,3,4

UNION ALL

SELECT 'conversion' AS type
  , partner_id
  , campaign_id
  , DATE(conversion_gmt_timestamp) AS event
  , NULL AS bidder_spend
  , COUNT(*) AS occurrences
FROM attributed_merit
GROUP BY 1,2,3,4
  fields:
  - dimension: type
    sql: ${TABLE}.type
  - dimension: partner_id
    type: int
    hidden: true
    sql: ${TABLE}.partner_id
  - dimension: campaign_id
    type: int
    hidden: true
    sql: ${TABLE}.campaign_id
  - dimension: bidder_spend
    type: number
    sql: ${TABLE}.bidder_spend
  - dimension: occurrences
    type: number
    hidden: true
    sql: ${TABLE}.occurrences
  - dimension_group: event
    type: time
    timeframes:
    - date
    - week
    sql: ${TABLE}.event
  - measure: total_impressions
    type: sum
    drill_fields:
    - detail*
    filters:
    - type: impression
    sql: ${occurrences}
  - measure: total_clicks
    type: sum
    drill_fields:
    - detail*
    filters:
    - type: click
    sql: ${occurrences}
  - measure: total_conversions
    type: sum
    drill_fields:
    - detail*
    filters:
    - type: conversion
    sql: ${occurrences}
  - measure: total_bidder_spend
    type: sum
    sql: ${bidder_spend}
  - measure: cpm
    type: number
    label: Impressions Clicks Conversions CPM
    sql: ${total_bidder_spend} / NULLIF(${total_impressions}, 0)
  - measure: cpc
    type: number
    label: Impressions Clicks Conversions CPC
    sql: ${total_bidder_spend} / NULLIF((${total_clicks} * 1000), 0)
  - measure: cpa
    type: number
    label: Impressions Clicks Conversions CPA
    sql: ${total_bidder_spend} / NULLIF((${total_conversions} * 1000), 0)

Contents

  • impressions_clicks_conversions.sql
  • impressions_clicks_conversions.sql
  • impressions_clicks_conversions.view.lkml
  • impressions_clicks_conversions.view.lookml