dbt Financial services

Session Pg Trk Facts

Session Pg Trk Facts model for financial services.

inferred

Blocks

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

select s.session_id
  , s.looker_visitor_id
  , first_referrer
  , least(max(t2s.sent_at) + interval '30 minutes', min(s.next_session_start_at)) as end_at
  , count(case when t2s.event_source = 'tracks' then 1 else null end) as tracks_count
  , count(case when t2s.event = 'viewed_email' then event_id else null end) as cnt_viewed_email
  , count(case when t2s.event = 'viewed_page' then event_id else null end) as cnt_viewed_page
  , count(case when t2s.event = 'viewed_product' then event_id else null end) as cnt_viewed_product
  , count(case when t2s.event = 'completed_order' then event_id else null end) as cnt_completed_order
  from {{ ref('sessions_pg_trk') }} as s
  inner join {{ ref('event_facts') }} as t2s
  using(session_id)
  group by 1,2,3

# models/schema.yml
version: 2

models:
  - name: session_pg_trk_facts
    columns:
      - name: session_id
        tests:
          - unique
          - not_null
      - name: first_referrer
      - name: first_referrer_domain
      - name: first_referrer_domain_mapped
      - name: tracks_count
      - name: referrer
      - name: tracks_count_tier
      - name: is_bounced_session
      - name: session_duration_minutes
      - name: session_duration_minutes_tiered
      - name: viewed_email
      - name: viewed_page
      - name: viewed_product
      - name: completed_order

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_pg_trk_facts.sql · 13 lines
source-preserved validation: not checked
select s.session_id
  , s.looker_visitor_id
  , first_referrer
  , least(max(t2s.sent_at) + interval '30 minutes', min(s.next_session_start_at)) as end_at
  , count(case when t2s.event_source = 'tracks' then 1 else null end) as tracks_count
  , count(case when t2s.event = 'viewed_email' then event_id else null end) as cnt_viewed_email
  , count(case when t2s.event = 'viewed_page' then event_id else null end) as cnt_viewed_page
  , count(case when t2s.event = 'viewed_product' then event_id else null end) as cnt_viewed_product
  , count(case when t2s.event = 'completed_order' then event_id else null end) as cnt_completed_order
  from ${sessions_pg_trk.SQL_TABLE_NAME} as s
  inner join ${event_facts.SQL_TABLE_NAME} as t2s
  using(session_id)
  group by 1,2,3
session_pg_trk_facts.view.lkml · 117 lines
inferred
view: session_pg_trk_facts {
  derived_table: {
    sql: select s.session_id
  , s.looker_visitor_id
  , first_referrer
  , least(max(t2s.sent_at) + interval '30 minutes', min(s.next_session_start_at)) as end_at
  , count(case when t2s.event_source = 'tracks' then 1 else null end) as tracks_count
  , count(case when t2s.event = 'viewed_email' then event_id else null end) as cnt_viewed_email
  , count(case when t2s.event = 'viewed_page' then event_id else null end) as cnt_viewed_page
  , count(case when t2s.event = 'viewed_product' then event_id else null end) as cnt_viewed_product
  , count(case when t2s.event = 'completed_order' then event_id else null end) as cnt_completed_order
  from ${sessions_pg_trk.SQL_TABLE_NAME} as s
  inner join ${event_facts.SQL_TABLE_NAME} as t2s
  using(session_id)
  group by 1,2,3 ;;
  }

  dimension: session_id {
    primary_key: yes
    hidden: yes
    sql: ${TABLE}.session_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} like '%facebook%' THEN 'facebook' WHEN ${first_referrer} like '%google%' THEN 'google' WHEN ${first_referrer} like '%gliq%' THEN 'gliq' WHEN ${first_referrer} like '%moneyandmarkets%' THEN 'money and markets' WHEN ${first_referrer} like '%yahoo%' THEN 'yahoo' WHEN ${first_referrer} like '%press%' THEN 'weiss press' WHEN ${first_referrer} like '%zogbyanalytics%' THEN 'zogbyanalytics' ELSE ${first_referrer} END ;;
  }

  dimension: tracks_count {
    type: number
    sql: ${TABLE}.tracks_count ;;
  }

  dimension: referrer {
    type: number
    sql: ${TABLE}.referrer ;;
  }

  dimension: tracks_count_tier {
    type: tier
    sql: ${tracks_count} ;;
  }

  dimension: is_bounced_session {
    sql: CASE WHEN ${tracks_count} = 1 THEN 'Bounced Session'
ELSE 'Not Bounced Session' END ;;
  }

  dimension: session_duration_minutes {
    type: number
    sql: datediff(minutes, ${sessions_pg_trk.session_start_at_time}::timestamp, ${end_time}::timestamp) ;;
  }

  dimension: session_duration_minutes_tiered {
    type: tier
    sql: ${session_duration_minutes} ;;
  }

  dimension: viewed_email {
    type: yesno
    sql: ${TABLE}.cnt_viewed_email > 0 ;;
  }

  dimension: viewed_page {
    type: yesno
    sql: ${TABLE}.cnt_viewed_page > 0 ;;
  }

  dimension: viewed_product {
    type: yesno
    sql: ${TABLE}.cnt_viewed_product > 0 ;;
  }

  dimension: completed_order {
    type: yesno
    sql: ${TABLE}.cnt_completed_order > 0 ;;
  }

  dimension_group: end {
    type: time
    timeframes: [time, date, week, month]
    sql: ${TABLE}.end_at ;;
  }

  measure: avg_session_duration_minutes {
    type: average
    sql: ${session_duration_minutes}::float ;;
  }

  measure: avg_tracks_per_session {
    type: average
    sql: ${tracks_count}::float ;;
  }

  measure: viewed_email_count {
    type: count
  }

  measure: viewed_page_count {
    type: count
  }

  measure: viewed_product_count {
    type: count
  }

  measure: completed_order_count {
    type: count
  }
}
session_pg_trk_facts.view.lookml · 78 lines
source-preserved
- view: session_pg_trk_facts
  derived_table:
    sql: select s.session_id
  , s.looker_visitor_id
  , first_referrer
  , least(max(t2s.sent_at) + interval '30 minutes', min(s.next_session_start_at)) as end_at
  , count(case when t2s.event_source = 'tracks' then 1 else null end) as tracks_count
  , count(case when t2s.event = 'viewed_email' then event_id else null end) as cnt_viewed_email
  , count(case when t2s.event = 'viewed_page' then event_id else null end) as cnt_viewed_page
  , count(case when t2s.event = 'viewed_product' then event_id else null end) as cnt_viewed_product
  , count(case when t2s.event = 'completed_order' then event_id else null end) as cnt_completed_order
  from ${sessions_pg_trk.SQL_TABLE_NAME} as s
  inner join ${event_facts.SQL_TABLE_NAME} as t2s
  using(session_id)
  group by 1,2,3
  fields:
  - dimension: session_id
    primary_key: true
    hidden: true
    sql: ${TABLE}.session_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} like '%facebook%' THEN 'facebook' WHEN ${first_referrer} like '%google%' THEN 'google' WHEN ${first_referrer} like '%gliq%' THEN 'gliq' WHEN ${first_referrer} like '%moneyandmarkets%' THEN 'money and markets' WHEN ${first_referrer} like '%yahoo%' THEN 'yahoo' WHEN ${first_referrer} like '%press%' THEN 'weiss press' WHEN ${first_referrer} like '%zogbyanalytics%' THEN 'zogbyanalytics' ELSE ${first_referrer} END
  - dimension: tracks_count
    type: number
    sql: ${TABLE}.tracks_count
  - dimension: referrer
    type: number
    sql: ${TABLE}.referrer
  - dimension: tracks_count_tier
    type: tier
    sql: ${tracks_count}
  - dimension: is_bounced_session
    sql: CASE WHEN ${tracks_count} = 1 THEN 'Bounced Session'
ELSE 'Not Bounced Session' END
  - dimension: session_duration_minutes
    type: number
    sql: datediff(minutes, ${sessions_pg_trk.session_start_at_time}::timestamp, ${end_time}::timestamp)
  - dimension: session_duration_minutes_tiered
    type: tier
    sql: ${session_duration_minutes}
  - dimension: viewed_email
    type: yesno
    sql: ${TABLE}.cnt_viewed_email > 0
  - dimension: viewed_page
    type: yesno
    sql: ${TABLE}.cnt_viewed_page > 0
  - dimension: viewed_product
    type: yesno
    sql: ${TABLE}.cnt_viewed_product > 0
  - dimension: completed_order
    type: yesno
    sql: ${TABLE}.cnt_completed_order > 0
  - dimension_group: end
    type: time
    timeframes:
    - time
    - date
    - week
    - month
    sql: ${TABLE}.end_at
  - measure: avg_session_duration_minutes
    type: average
    sql: ${session_duration_minutes}::float
  - measure: avg_tracks_per_session
    type: average
    sql: ${tracks_count}::float
  - measure: viewed_email_count
    type: count
  - measure: viewed_page_count
    type: count
  - measure: viewed_product_count
    type: count
  - measure: completed_order_count
    type: count

Contents

  • session_pg_trk_facts.sql
  • session_pg_trk_facts.sql
  • session_pg_trk_facts.view.lkml
  • session_pg_trk_facts.view.lookml