SQL
Financial services
Event Facts
Event Facts model for financial services.
source-preserved
Blocks
event_facts.sql · 42 lines
inferred
-- models/event_facts.sql
{{ config(materialized='view') }}
select t.anonymous_id
, t.sent_at
, t.event_id
, t.event
, t.event_source
, t.source_id
, s.session_id
, t.looker_visitor_id as looker_visitor_id
, t.referrer as referrer
, row_number() over(partition by s.session_id order by t.sent_at) as track_sequence_number
, row_number() over(partition by s.session_id, t.event_source order by t.sent_at) as source_sequence_number
, first_value(t.referrer ignore nulls) over (partition by s.session_id order by t.sent_at rows between unbounded preceding and unbounded following) as first_referrer
from {{ ref('mapped_events') }} as t
inner join {{ ref('sessions_pg_trk') }} as s
on t.looker_visitor_id = s.looker_visitor_id
and t.sent_at >= s.session_start_at
and (t.sent_at < s.next_session_start_at or s.next_session_start_at is null)
# models/schema.yml
version: 2
models:
- name: event_facts
columns:
- name: event_id
tests:
- unique
- not_null
- name: sent_at
- name: anonymous_id
- name: event
- name: session_id
- name: source_id
- name: first_referrer
- name: first_referrer_domain
- name: first_referrer_domain_mapped
- name: looker_visitor_id
- name: sequence_number
- name: source_sequence_number
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.
event_facts.sql · 17 lines
source-preserved
validation: not checked
select t.anonymous_id
, t.sent_at
, t.event_id
, t.event
, t.event_source
, t.source_id
, s.session_id
, t.looker_visitor_id as looker_visitor_id
, t.referrer as referrer
, row_number() over(partition by s.session_id order by t.sent_at) as track_sequence_number
, row_number() over(partition by s.session_id, t.event_source order by t.sent_at) as source_sequence_number
, first_value(t.referrer ignore nulls) over (partition by s.session_id order by t.sent_at rows between unbounded preceding and unbounded following) as first_referrer
from ${mapped_events.SQL_TABLE_NAME} as t
inner join ${sessions_pg_trk.SQL_TABLE_NAME} as s
on t.looker_visitor_id = s.looker_visitor_id
and t.sent_at >= s.session_start_at
and (t.sent_at < s.next_session_start_at or s.next_session_start_at is null)
event_facts.view.lkml · 81 lines
inferred
view: event_facts {
derived_table: {
sql: select t.anonymous_id
, t.sent_at
, t.event_id
, t.event
, t.event_source
, t.source_id
, s.session_id
, t.looker_visitor_id as looker_visitor_id
, t.referrer as referrer
, row_number() over(partition by s.session_id order by t.sent_at) as track_sequence_number
, row_number() over(partition by s.session_id, t.event_source order by t.sent_at) as source_sequence_number
, first_value(t.referrer ignore nulls) over (partition by s.session_id order by t.sent_at rows between unbounded preceding and unbounded following) as first_referrer
from ${mapped_events.SQL_TABLE_NAME} as t
inner join ${sessions_pg_trk.SQL_TABLE_NAME} as s
on t.looker_visitor_id = s.looker_visitor_id
and t.sent_at >= s.session_start_at
and (t.sent_at < s.next_session_start_at or s.next_session_start_at is null) ;;
}
dimension: event_id {
primary_key: yes
hidden: yes
sql: ${TABLE}.event_id ;;
}
dimension: sent_at {
hidden: yes
}
dimension: anonymous_id {
hidden: yes
sql: ${TABLE}.anonymous_id ;;
}
dimension: event {
sql: ${TABLE}.event ;;
}
dimension: session_id {
sql: ${TABLE}.session_id ;;
}
dimension: source_id {
hidden: yes
sql: ${TABLE}.source_id ;;
}
dimension: first_referrer {
sql: ${TABLE}.first_referrer ;;
}
dimension: first_referrer_domain {
sql: split_part(${first_referrer},'/',3) ;;
}
dimension: first_referrer_domain_mapped {
sql: CASE WHEN ${first_referrer_domain} like '%facebook%' THEN 'facebook' WHEN ${first_referrer_domain} like '%google%' THEN 'google' ELSE ${first_referrer_domain} END ;;
}
dimension: looker_visitor_id {
type: int
sql: ${TABLE}.looker_visitor_id ;;
}
dimension: sequence_number {
type: number
sql: ${TABLE}.track_sequence_number ;;
}
dimension: source_sequence_number {
type: number
sql: ${TABLE}.source_sequence_number ;;
}
measure: count_visitors {
type: count_distinct
sql: ${looker_visitor_id} ;;
}
}
event_facts.view.lookml · 54 lines
source-preserved
- view: event_facts
derived_table:
sql: select t.anonymous_id
, t.sent_at
, t.event_id
, t.event
, t.event_source
, t.source_id
, s.session_id
, t.looker_visitor_id as looker_visitor_id
, t.referrer as referrer
, row_number() over(partition by s.session_id order by t.sent_at) as track_sequence_number
, row_number() over(partition by s.session_id, t.event_source order by t.sent_at) as source_sequence_number
, first_value(t.referrer ignore nulls) over (partition by s.session_id order by t.sent_at rows between unbounded preceding and unbounded following) as first_referrer
from ${mapped_events.SQL_TABLE_NAME} as t
inner join ${sessions_pg_trk.SQL_TABLE_NAME} as s
on t.looker_visitor_id = s.looker_visitor_id
and t.sent_at >= s.session_start_at
and (t.sent_at < s.next_session_start_at or s.next_session_start_at is null)
fields:
- dimension: event_id
primary_key: true
hidden: true
sql: ${TABLE}.event_id
- dimension: sent_at
hidden: true
- dimension: anonymous_id
hidden: true
sql: ${TABLE}.anonymous_id
- dimension: event
sql: ${TABLE}.event
- dimension: session_id
sql: ${TABLE}.session_id
- dimension: source_id
hidden: true
sql: ${TABLE}.source_id
- dimension: first_referrer
sql: ${TABLE}.first_referrer
- dimension: first_referrer_domain
sql: split_part(${first_referrer},'/',3)
- dimension: first_referrer_domain_mapped
sql: CASE WHEN ${first_referrer_domain} like '%facebook%' THEN 'facebook' WHEN ${first_referrer_domain} like '%google%' THEN 'google' ELSE ${first_referrer_domain} END
- dimension: looker_visitor_id
type: int
sql: ${TABLE}.looker_visitor_id
- dimension: sequence_number
type: number
sql: ${TABLE}.track_sequence_number
- dimension: source_sequence_number
type: number
sql: ${TABLE}.source_sequence_number
- measure: count_visitors
type: count_distinct
sql: ${looker_visitor_id}
Contents
- event_facts.sql
- event_facts.sql
- event_facts.view.lkml
- event_facts.view.lookml