dbt
Media engagement
Session Facts
Session Facts model for media engagement.
inferred
Blocks
session_facts.sql · 27 lines
inferred
-- models/session_facts.sql
{{ config(materialized='view') }}
SELECT s.session_id
, LEAST(MAX(em.e_tstamp) + INTERVAL '30 minutes', min(s.next_session_start)) AS ended_at
, count(distinct em.event_id) AS num_ems
-- , count(case when em.event = 'view_buy_page' then event_id else null end) as cnt_view_buy_page
-- , count(case when em.event = 'added_item' then event_id else null end) as cnt_added_item
-- , count(case when em.event = 'tapped_shipit' then event_id else null end) as cnt_shipit
-- , count(case when em.event = 'made_purchase' then event_id else null end) as cnt_made_purchase
FROM {{ ref('sessions') }} as s
LEFT JOIN {{ ref('event_session_map') }} as map using(session_id)
LEFT JOIN {{ ref('events_mapped_to_user') }} as em using(event_id)
group by 1
-- limit 10
# models/schema.yml
version: 2
models:
- name: session_facts
columns:
- name: session_id
tests:
- unique
- not_null
- name: number_events
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.
session_facts.sql · 12 lines
source-preserved
validation: not checked
SELECT s.session_id
, LEAST(MAX(em.e_tstamp) + INTERVAL '30 minutes', min(s.next_session_start)) AS ended_at
, count(distinct em.event_id) AS num_ems
-- , count(case when em.event = 'view_buy_page' then event_id else null end) as cnt_view_buy_page
-- , count(case when em.event = 'added_item' then event_id else null end) as cnt_added_item
-- , count(case when em.event = 'tapped_shipit' then event_id else null end) as cnt_shipit
-- , count(case when em.event = 'made_purchase' then event_id else null end) as cnt_made_purchase
FROM ${sessions.SQL_TABLE_NAME} as s
LEFT JOIN ${event_session_map.SQL_TABLE_NAME} as map using(session_id)
LEFT JOIN ${events_mapped_to_user.SQL_TABLE_NAME} as em using(event_id)
group by 1
-- limit 10
session_facts.view.lkml · 38 lines
inferred
view: session_facts {
derived_table: {
sql: SELECT s.session_id
, LEAST(MAX(em.e_tstamp) + INTERVAL '30 minutes', min(s.next_session_start)) AS ended_at
, count(distinct em.event_id) AS num_ems
-- , count(case when em.event = 'view_buy_page' then event_id else null end) as cnt_view_buy_page
-- , count(case when em.event = 'added_item' then event_id else null end) as cnt_added_item
-- , count(case when em.event = 'tapped_shipit' then event_id else null end) as cnt_shipit
-- , count(case when em.event = 'made_purchase' then event_id else null end) as cnt_made_purchase
FROM ${sessions.SQL_TABLE_NAME} as s
LEFT JOIN ${event_session_map.SQL_TABLE_NAME} as map using(session_id)
LEFT JOIN ${events_mapped_to_user.SQL_TABLE_NAME} as em using(event_id)
group by 1
-- limit 10 ;;
}
dimension: session_id {
primary_key: yes
hidden: yes
sql: ${TABLE}.session_id ;;
}
dimension: number_events {
type: number
sql: ${TABLE}.num_ems ;;
}
dimension_group: ended_at {
type: time
timeframes: [time, date, week, month]
sql: ${TABLE}.ended_at ;;
}
measure: count {
type: count
drill_fields: [drill_fields*]
}
}
session_facts.view.lookml · 34 lines
source-preserved
- view: session_facts
derived_table:
sql: SELECT s.session_id
, LEAST(MAX(em.e_tstamp) + INTERVAL '30 minutes', min(s.next_session_start)) AS ended_at
, count(distinct em.event_id) AS num_ems
-- , count(case when em.event = 'view_buy_page' then event_id else null end) as cnt_view_buy_page
-- , count(case when em.event = 'added_item' then event_id else null end) as cnt_added_item
-- , count(case when em.event = 'tapped_shipit' then event_id else null end) as cnt_shipit
-- , count(case when em.event = 'made_purchase' then event_id else null end) as cnt_made_purchase
FROM ${sessions.SQL_TABLE_NAME} as s
LEFT JOIN ${event_session_map.SQL_TABLE_NAME} as map using(session_id)
LEFT JOIN ${events_mapped_to_user.SQL_TABLE_NAME} as em using(event_id)
group by 1
-- limit 10
fields:
- dimension: session_id
primary_key: true
hidden: true
sql: ${TABLE}.session_id
- dimension: number_events
type: number
sql: ${TABLE}.num_ems
- dimension_group: ended_at
type: time
timeframes:
- time
- date
- week
- month
sql: ${TABLE}.ended_at
- measure: count
type: count
drill_fields:
- drill_fields*
Contents
- session_facts.sql
- session_facts.sql
- session_facts.view.lkml
- session_facts.view.lookml