dbt Marketing analytics

Visitor Viewed Services

Visitor Viewed Services model for marketing analytics.

inferred

Blocks

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

SELECT
v.domain_userid,
s.visit_first_happened,
s.ts_first_happened,
CASE WHEN s.visited_services_page = 1 THEN 1 ELSE 0 END AS visited_services_page
FROM (
  SELECT
  domain_userid
  FROM {{ this }}.events
  GROUP BY 1
) v LEFT JOIN (
  SELECT
  domain_userid,
  1 AS visited_services_page,
  MIN(domain_sessionidx) AS visit_first_happened,
  MIN(collector_tstamp) AS ts_first_happened
  FROM {{ this }}.events
  WHERE page_urlpath LIKE '%/services%'
  GROUP BY 1 ) s
ON v.domain_userid = s.domain_userid

# models/schema.yml
version: 2

models:
  - name: visitor_viewed_services
    columns:
      - name: domain_user_id
        tests:
          - unique
          - not_null
      - name: visited_services_page
      - name: timestamp
      - name: visit
      - name: first_visit
      - name: first_visit_tiered

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.
visitor_viewed_services.sql · 20 lines
source-preserved validation: not checked
SELECT
v.domain_userid,
s.visit_first_happened,
s.ts_first_happened,
CASE WHEN s.visited_services_page = 1 THEN 1 ELSE 0 END AS visited_services_page
FROM (
  SELECT
  domain_userid
  FROM ${TABLE}.events
  GROUP BY 1
) v LEFT JOIN (
  SELECT
  domain_userid,
  1 AS visited_services_page,
  MIN(domain_sessionidx) AS visit_first_happened,
  MIN(collector_tstamp) AS ts_first_happened
  FROM ${TABLE}.events
  WHERE page_urlpath LIKE '%/services%'
  GROUP BY 1 ) s
ON v.domain_userid = s.domain_userid
visitor_viewed_services.view.lkml · 69 lines
inferred
view: visitor_viewed_services {
  derived_table: {
    sql: SELECT
v.domain_userid,
s.visit_first_happened,
s.ts_first_happened,
CASE WHEN s.visited_services_page = 1 THEN 1 ELSE 0 END AS visited_services_page
FROM (
  SELECT
  domain_userid
  FROM ${TABLE}.events
  GROUP BY 1
) v LEFT JOIN (
  SELECT
  domain_userid,
  1 AS visited_services_page,
  MIN(domain_sessionidx) AS visit_first_happened,
  MIN(collector_tstamp) AS ts_first_happened
  FROM ${TABLE}.events
  WHERE page_urlpath LIKE '%/services%'
  GROUP BY 1 ) s
ON v.domain_userid = s.domain_userid ;;
  }

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

  dimension: visited_services_page {
    type: yesno
    sql: ${TABLE}.visited_services_page = 1 ;;
  }

  dimension: timestamp {
    type: time
    sql: ${TABLE}.first_happened ;;
  }

  dimension: visit {
    sql: ${TABLE}.visit_first_happened ;;
  }

  dimension: first_visit {
    sql: ${TABLE}.visit_first_happened ;;
  }

  dimension: first_visit_tiered {
    type: tier
    sql: ${TABLE}.visit_first_happened ;;
  }

  measure: visitors_count {
    type: count_distinct
    hidden: yes
    sql: ${domain_user_id} ;;
  }

  measure: visitors_viewed_services_count {
    type: count_distinct
    filters: [visited_services_page: "True"]
    sql: ${domain_user_id} ;;
  }

  measure: fraction_visitors_viewed_services {
    type: number
    sql: NULLIF(${visitors_viewed_services_count},0)/NULLIF(${visitors_count},0)::REAL ;;
  }
}
visitor_viewed_services.view.lookml · 50 lines
source-preserved
- view: visitor_viewed_services
  derived_table:
    sql: SELECT
v.domain_userid,
s.visit_first_happened,
s.ts_first_happened,
CASE WHEN s.visited_services_page = 1 THEN 1 ELSE 0 END AS visited_services_page
FROM (
  SELECT
  domain_userid
  FROM ${TABLE}.events
  GROUP BY 1
) v LEFT JOIN (
  SELECT
  domain_userid,
  1 AS visited_services_page,
  MIN(domain_sessionidx) AS visit_first_happened,
  MIN(collector_tstamp) AS ts_first_happened
  FROM ${TABLE}.events
  WHERE page_urlpath LIKE '%/services%'
  GROUP BY 1 ) s
ON v.domain_userid = s.domain_userid
  fields:
  - dimension: domain_user_id
    primary_key: true
    sql: ${TABLE}.domain_userid
  - dimension: visited_services_page
    type: yesno
    sql: ${TABLE}.visited_services_page = 1
  - dimension: timestamp
    type: time
    sql: ${TABLE}.first_happened
  - dimension: visit
    sql: ${TABLE}.visit_first_happened
  - dimension: first_visit
    sql: ${TABLE}.visit_first_happened
  - dimension: first_visit_tiered
    type: tier
    sql: ${TABLE}.visit_first_happened
  - measure: visitors_count
    type: count_distinct
    sql: ${domain_user_id}
  - measure: visitors_viewed_services_count
    type: count_distinct
    filters:
    - visited_services_page: True
    sql: ${domain_user_id}
  - measure: fraction_visitors_viewed_services
    type: number
    sql: NULLIF(${visitors_viewed_services_count},0)/NULLIF(${visitors_count},0)::REAL

Contents

  • visitor_viewed_services.sql
  • visitor_viewed_services.sql
  • visitor_viewed_services.view.lkml
  • visitor_viewed_services.view.lookml