dbt
Marketing digital
Event Duration
Event Duration model for marketing digital.
inferred
Blocks
event_duration.sql · 41 lines
inferred
-- models/event_duration.sql
{{ config(materialized='table') }}
SELECT
event_id,
domain_userid || '-' || domain_sessionidx AS visit_id,
page_urlhost,
page_urlpath,
page_urlfragment,
LEAD (dvce_tstamp) OVER (PARTITION BY domain_userid, domain_sessionidx ORDER BY dvce_tstamp ) AS event_endts,
EXTRACT(EPOCH FROM (
(LEAD (dvce_tstamp) OVER (PARTITION BY domain_userid, domain_sessionidx ORDER BY dvce_tstamp)) - dvce_tstamp
)) duration_s
FROM
ATOMIC.events
# models/schema.yml
version: 2
models:
- name: event_duration
columns:
- name: event_id
tests:
- unique
- not_null
- name: visit_id
- name: page_urlhost
- name: page_urlpath
- name: page_urlfragment
- name: event_end
- name: event_duration_seconds
- name: page_type_model
- name: page_type_up
- name: page_type_golf
- name: page_type_polo
- name: page_type_beetle
- name: page_type_jetta
- name: page_type_passat
- name: page_type_touran
- name: page_type_tiguan
Assumptions
- materialized='table' inferred from a LookML persist hint (persist_for / datagroup / sql_trigger_value).
- schema.yml columns come from view dimensions; a primary_key dimension gets unique + not_null tests.
event_duration.sql · 12 lines
source-preserved
validation: parses
SELECT
event_id,
domain_userid || '-' || domain_sessionidx AS visit_id,
page_urlhost,
page_urlpath,
page_urlfragment,
LEAD (dvce_tstamp) OVER (PARTITION BY domain_userid, domain_sessionidx ORDER BY dvce_tstamp ) AS event_endts,
EXTRACT(EPOCH FROM (
(LEAD (dvce_tstamp) OVER (PARTITION BY domain_userid, domain_sessionidx ORDER BY dvce_tstamp)) - dvce_tstamp
)) duration_s
FROM
ATOMIC.events
event_duration.view.lkml · 191 lines
inferred
view: event_duration {
derived_table: {
sql: SELECT
event_id,
domain_userid || '-' || domain_sessionidx AS visit_id,
page_urlhost,
page_urlpath,
page_urlfragment,
LEAD (dvce_tstamp) OVER (PARTITION BY domain_userid, domain_sessionidx ORDER BY dvce_tstamp ) AS event_endts,
EXTRACT(EPOCH FROM (
(LEAD (dvce_tstamp) OVER (PARTITION BY domain_userid, domain_sessionidx ORDER BY dvce_tstamp)) - dvce_tstamp
)) duration_s
FROM
ATOMIC.events ;;
persist_for: "6 hour"
}
dimension: event_id {
primary_key: yes
sql: ${TABLE}.event_id ;;
}
dimension: visit_id {
sql: ${TABLE}.visit_id ;;
}
dimension: page_urlhost {
sql: ${TABLE}.page_urlhost ;;
}
dimension: page_urlpath {
sql: ${TABLE}.page_urlpath ;;
}
dimension: page_urlfragment {
sql: ${TABLE}.page_urlfragment ;;
}
dimension: event_end {
hidden: yes
sql: ${TABLE}.event_endts ;;
}
dimension: event_duration_seconds {
sql: ${TABLE}.duration_s ;;
}
dimension: page_type_model {
type: yesno
sql: ${page_urlpath} LIKE '%models%' ;;
}
dimension: page_type_up {
type: yesno
sql: ${page_urlpath} LIKE '%up-%' ;;
}
dimension: page_type_golf {
type: yesno
sql: ${page_urlpath} LIKE '%golf%' ;;
}
dimension: page_type_polo {
type: yesno
sql: ${page_urlpath} LIKE '%polo%' ;;
}
dimension: page_type_beetle {
type: yesno
sql: ${page_urlpath} LIKE '%beetle%' ;;
}
dimension: page_type_jetta {
type: yesno
sql: ${page_urlpath} LIKE '%jetta%' ;;
}
dimension: page_type_passat {
type: yesno
sql: ${page_urlpath} LIKE '%passat%' ;;
}
dimension: page_type_touran {
type: yesno
sql: ${page_urlpath} LIKE '%touran%' ;;
}
dimension: page_type_tiguan {
type: yesno
sql: ${page_urlpath} LIKE '%tiguan%' ;;
}
measure: visits_count {
type: count_distinct
hidden: yes
sql: ${TABLE}.visit_id ;;
}
measure: total_duration_s {
type: sum
sql: ${event_duration_seconds} ;;
}
measure: seconds_on_model_page {
type: sum
filters: [page_type_model: "True"]
sql: ${event_duration_seconds} ;;
}
measure: seconds_on_vehicle_page_per_visit {
type: number
sql: ${seconds_on_model_page} / NULLIF(${visits_count},0)::REAL ;;
}
measure: seconds_on_golf_page {
type: sum
filters: [page_type_golf: "True"]
sql: ${event_duration_seconds} ;;
}
measure: seconds_on_vehicle_page_per_visit {
type: number
sql: ${seconds_on_golf_page} / NULLIF(${visits_count},0)::REAL ;;
}
measure: seconds_on_up_page {
type: sum
filters: [page_type_up: "True"]
sql: ${event_duration_seconds} ;;
}
measure: seconds_on_vehicle_page_per_visit {
type: number
sql: ${seconds_on_up_page} / NULLIF(${visits_count},0)::REAL ;;
}
measure: seconds_on_polo_page {
type: sum
filters: [page_type_polo: "True"]
sql: ${event_duration_seconds} ;;
}
measure: seconds_on_vehicle_page_per_visit {
type: number
sql: ${seconds_on_polo_page} / NULLIF(${visits_count},0)::REAL ;;
}
measure: seconds_on_beetle_page {
type: sum
filters: [page_type_beetle: "True"]
sql: ${event_duration_seconds} ;;
}
measure: seconds_on_vehicle_page_per_visit {
type: number
sql: ${seconds_on_beetle_page} / NULLIF(${visits_count},0)::REAL ;;
}
measure: seconds_on_jetta_page {
type: sum
filters: [page_type_jetta: "True"]
sql: ${event_duration_seconds} ;;
}
measure: seconds_on_vehicle_page_per_visit {
type: number
sql: ${seconds_on_jetta_page} / NULLIF(${visits_count},0)::REAL ;;
}
measure: seconds_on_passat_page {
type: sum
filters: [page_type_passat: "True"]
sql: ${event_duration_seconds} ;;
}
measure: seconds_on_vehicle_page_per_visit {
type: number
sql: ${seconds_on_passat_page} / NULLIF(${visits_count},0)::REAL ;;
}
measure: seconds_on_touran_page {
type: sum
filters: [page_type_touran: "True"]
sql: ${event_duration_seconds} ;;
}
measure: seconds_on_touran_page_per_visit {
type: sum
sql: ${seconds_on_touran_page} / NULLIF(${visits_count},0)::REAL ;;
}
}
event_duration.view.lookml · 129 lines
source-preserved
- view: event_duration
derived_table:
sql: SELECT
event_id,
domain_userid || '-' || domain_sessionidx AS visit_id,
page_urlhost,
page_urlpath,
page_urlfragment,
LEAD (dvce_tstamp) OVER (PARTITION BY domain_userid, domain_sessionidx ORDER BY dvce_tstamp ) AS event_endts,
EXTRACT(EPOCH FROM (
(LEAD (dvce_tstamp) OVER (PARTITION BY domain_userid, domain_sessionidx ORDER BY dvce_tstamp)) - dvce_tstamp
)) duration_s
FROM
ATOMIC.events
persist_for: 6 hour
fields:
- dimension: event_id
primary_key: true
sql: ${TABLE}.event_id
- dimension: visit_id
sql: ${TABLE}.visit_id
- dimension: page_urlhost
sql: ${TABLE}.page_urlhost
- dimension: page_urlpath
sql: ${TABLE}.page_urlpath
- dimension: page_urlfragment
sql: ${TABLE}.page_urlfragment
- dimension: event_end
hidden: true
sql: ${TABLE}.event_endts
- dimension: event_duration_seconds
sql: ${TABLE}.duration_s
- dimension: page_type_model
type: yesno
sql: ${page_urlpath} LIKE '%models%'
- dimension: page_type_up
type: yesno
sql: ${page_urlpath} LIKE '%up-%'
- dimension: page_type_golf
type: yesno
sql: ${page_urlpath} LIKE '%golf%'
- dimension: page_type_polo
type: yesno
sql: ${page_urlpath} LIKE '%polo%'
- dimension: page_type_beetle
type: yesno
sql: ${page_urlpath} LIKE '%beetle%'
- dimension: page_type_jetta
type: yesno
sql: ${page_urlpath} LIKE '%jetta%'
- dimension: page_type_passat
type: yesno
sql: ${page_urlpath} LIKE '%passat%'
- dimension: page_type_touran
type: yesno
sql: ${page_urlpath} LIKE '%touran%'
- dimension: page_type_tiguan
type: yesno
sql: ${page_urlpath} LIKE '%tiguan%'
- measure: visits_count
type: count_distinct
sql: ${TABLE}.visit_id
- measure: total_duration_s
type: sum
sql: ${event_duration_seconds}
- measure: seconds_on_model_page
type: sum
filters:
- page_type_model: True
sql: ${event_duration_seconds}
- measure: seconds_on_vehicle_page_per_visit
type: number
sql: ${seconds_on_model_page} / NULLIF(${visits_count},0)::REAL
- measure: seconds_on_golf_page
type: sum
filters:
- page_type_golf: True
sql: ${event_duration_seconds}
- measure: seconds_on_vehicle_page_per_visit
type: number
sql: ${seconds_on_golf_page} / NULLIF(${visits_count},0)::REAL
- measure: seconds_on_up_page
type: sum
filters:
- page_type_up: True
sql: ${event_duration_seconds}
- measure: seconds_on_vehicle_page_per_visit
type: number
sql: ${seconds_on_up_page} / NULLIF(${visits_count},0)::REAL
- measure: seconds_on_polo_page
type: sum
filters:
- page_type_polo: True
sql: ${event_duration_seconds}
- measure: seconds_on_vehicle_page_per_visit
type: number
sql: ${seconds_on_polo_page} / NULLIF(${visits_count},0)::REAL
- measure: seconds_on_beetle_page
type: sum
filters:
- page_type_beetle: True
sql: ${event_duration_seconds}
- measure: seconds_on_vehicle_page_per_visit
type: number
sql: ${seconds_on_beetle_page} / NULLIF(${visits_count},0)::REAL
- measure: seconds_on_jetta_page
type: sum
filters:
- page_type_jetta: True
sql: ${event_duration_seconds}
- measure: seconds_on_vehicle_page_per_visit
type: number
sql: ${seconds_on_jetta_page} / NULLIF(${visits_count},0)::REAL
- measure: seconds_on_passat_page
type: sum
filters:
- page_type_passat: True
sql: ${event_duration_seconds}
- measure: seconds_on_vehicle_page_per_visit
type: number
sql: ${seconds_on_passat_page} / NULLIF(${visits_count},0)::REAL
- measure: seconds_on_touran_page
type: sum
filters:
- page_type_touran: True
sql: ${event_duration_seconds}
- measure: seconds_on_touran_page_per_visit
type: sum
sql: ${seconds_on_touran_page} / NULLIF(${visits_count},0)::REAL
Contents
- event_duration.sql
- event_duration.sql
- event_duration.view.lkml
- event_duration.view.lookml