SQL Marketing analytics

Landing Page

Landing Page model for marketing analytics.

source-preserved

Blocks

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

SELECT
 domain_userid,
 domain_sessionidx,
 max(page_title) as page_title,
 domain_userid || domain_sessionidx AS visit_id,
 MAX(page_urlhost) AS page_urlhost, -- Remove duplicates (v. occasional case where two page views have exactly the same dvce_tstamp)
 MAX(page_urlpath) AS page_urlpath  -- Remove duplicates (v. occasional case where two page views have exactly the same dvce_tstamp)
 FROM (
   SELECT
   domain_userid,
   domain_sessionidx,
   page_urlhost,
   page_urlpath,
   page_title,
   RANK() OVER (PARTITION BY domain_userid, domain_sessionidx ORDER BY dvce_tstamp) AS "rank_asc"
   FROM {{ this }}.events
   WHERE event = 'page_view') AS a
 WHERE rank_asc = 1                -- Filter so only return landing pages
 GROUP BY 1,2,4                    -- Remove duplicates (v. occasional case where two page views have exactly the same dvce_tstamp)

# models/schema.yml
version: 2

models:
  - name: landing_page
    columns:
      - name: visit_id
        tests:
          - unique
          - not_null
      - name: domain_user_id
      - name: domain_session_index
      - name: page_title
      - name: page_url_host
      - name: page_url_path
      - name: landing_page

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.
landing_page.sql · 19 lines
source-preserved validation: not checked
SELECT
 domain_userid,
 domain_sessionidx,
 max(page_title) as page_title,
 domain_userid || domain_sessionidx AS visit_id,
 MAX(page_urlhost) AS page_urlhost, -- Remove duplicates (v. occasional case where two page views have exactly the same dvce_tstamp)
 MAX(page_urlpath) AS page_urlpath  -- Remove duplicates (v. occasional case where two page views have exactly the same dvce_tstamp)
 FROM (
   SELECT
   domain_userid,
   domain_sessionidx,
   page_urlhost,
   page_urlpath,
   page_title,
   RANK() OVER (PARTITION BY domain_userid, domain_sessionidx ORDER BY dvce_tstamp) AS "rank_asc"
   FROM ${TABLE}.events
   WHERE event = 'page_view') AS a
 WHERE rank_asc = 1                -- Filter so only return landing pages
 GROUP BY 1,2,4                    -- Remove duplicates (v. occasional case where two page views have exactly the same dvce_tstamp)
landing_page.view.lkml · 60 lines
inferred
view: landing_page {
  derived_table: {
    sql: SELECT
 domain_userid,
 domain_sessionidx,
 max(page_title) as page_title,
 domain_userid || domain_sessionidx AS visit_id,
 MAX(page_urlhost) AS page_urlhost, -- Remove duplicates (v. occasional case where two page views have exactly the same dvce_tstamp)
 MAX(page_urlpath) AS page_urlpath  -- Remove duplicates (v. occasional case where two page views have exactly the same dvce_tstamp)
 FROM (
   SELECT
   domain_userid,
   domain_sessionidx,
   page_urlhost,
   page_urlpath,
   page_title,
   RANK() OVER (PARTITION BY domain_userid, domain_sessionidx ORDER BY dvce_tstamp) AS "rank_asc"
   FROM ${TABLE}.events
   WHERE event = 'page_view') AS a
 WHERE rank_asc = 1                -- Filter so only return landing pages
 GROUP BY 1,2,4                    -- Remove duplicates (v. occasional case where two page views have exactly the same dvce_tstamp) ;;
  }

  dimension: visit_id {
    primary_key: yes
    sql: ${TABLE}.visit_id ;;
  }

  dimension: domain_user_id {
    hidden: yes
    sql: ${TABLE}.domain_userid ;;
  }

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

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

  dimension: page_url_host {
    sql: ${TABLE}.page_urlhost ;;
  }

  dimension: page_url_path {
    sql: ${TABLE}.page_urlpath ;;
  }

  dimension: landing_page {
    sql: ${TABLE}.page_urlhost || ${TABLE}.page_urlpath ;;
  }

  measure: landing_page_count {
    type: count_distinct
    sql: ${landing_page} ;;
  }
}
landing_page.view.lookml · 43 lines
source-preserved
- view: landing_page
  derived_table:
    sql: SELECT
 domain_userid,
 domain_sessionidx,
 max(page_title) as page_title,
 domain_userid || domain_sessionidx AS visit_id,
 MAX(page_urlhost) AS page_urlhost, -- Remove duplicates (v. occasional case where two page views have exactly the same dvce_tstamp)
 MAX(page_urlpath) AS page_urlpath  -- Remove duplicates (v. occasional case where two page views have exactly the same dvce_tstamp)
 FROM (
   SELECT
   domain_userid,
   domain_sessionidx,
   page_urlhost,
   page_urlpath,
   page_title,
   RANK() OVER (PARTITION BY domain_userid, domain_sessionidx ORDER BY dvce_tstamp) AS "rank_asc"
   FROM ${TABLE}.events
   WHERE event = 'page_view') AS a
 WHERE rank_asc = 1                -- Filter so only return landing pages
 GROUP BY 1,2,4                    -- Remove duplicates (v. occasional case where two page views have exactly the same dvce_tstamp)
  fields:
  - dimension: visit_id
    primary_key: true
    sql: ${TABLE}.visit_id
  - dimension: domain_user_id
    hidden: true
    sql: ${TABLE}.domain_userid
  - dimension: domain_session_index
    type: int
    hidden: true
    sql: ${TABLE}.domain_sessionidx
  - dimension: page_title
    sql: ${TABLE}.page_title
  - dimension: page_url_host
    sql: ${TABLE}.page_urlhost
  - dimension: page_url_path
    sql: ${TABLE}.page_urlpath
  - dimension: landing_page
    sql: ${TABLE}.page_urlhost || ${TABLE}.page_urlpath
  - measure: landing_page_count
    type: count_distinct
    sql: ${landing_page}

Contents

  • landing_page.sql
  • landing_page.sql
  • landing_page.view.lkml
  • landing_page.view.lookml