dbt Insurance vehicle

Customer Lifetime Value

Customer Lifetime Value model for insurance vehicle.

inferred

Blocks

customer_lifetime_value.sql · 29 lines
inferred
-- models/customer_lifetime_value.sql
{{ config(materialized='table') }}

SELECT user_id::integer AS user_id
      ,time_stamp
      ,transaction_type
      ,spend
FROM {{ ref('lifetime_value_bookings') }} AS lifetime_value_bookings

UNION

SELECT user_id::integer AS user_id
      ,time_stamp
      ,transaction_type
      ,spend
FROM {{ ref('lifetime_value_analytics_connection') }} AS lifetime_value_analytics_connection

# models/schema.yml
version: 2

models:
  - name: customer_lifetime_value
    columns:
      - name: user_id
        tests:
          - unique
          - not_null
      - name: transaction_type
      - name: spend

Assumptions

  • Each ${view.SQL_TABLE_NAME} was mapped to {{ ref('view') }}; confirm a dbt model exists for each referenced view.
  • 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.
customer_lifetime_value.sql · 13 lines
source-preserved validation: not checked
SELECT user_id::integer AS user_id
      ,time_stamp
      ,transaction_type
      ,spend
FROM ${lifetime_value_bookings.SQL_TABLE_NAME} AS lifetime_value_bookings

UNION

SELECT user_id::integer AS user_id
      ,time_stamp
      ,transaction_type
      ,spend
FROM ${lifetime_value_analytics_connection.SQL_TABLE_NAME} AS lifetime_value_analytics_connection
customer_lifetime_value.view.lkml · 84 lines
inferred
view: customer_lifetime_value {
  derived_table: {
    sql: SELECT user_id::integer AS user_id
      ,time_stamp
      ,transaction_type
      ,spend
FROM ${lifetime_value_bookings.SQL_TABLE_NAME} AS lifetime_value_bookings

UNION

SELECT user_id::integer AS user_id
      ,time_stamp
      ,transaction_type
      ,spend
FROM ${lifetime_value_analytics_connection.SQL_TABLE_NAME} AS lifetime_value_analytics_connection ;;
    persist_for: "1 hour"
  }

  dimension: user_id {
    type: int
    primary_key: yes
    sql: ${TABLE}.user_id ;;
  }

  dimension: transaction_type {
    sql: ${TABLE}.transaction_type ;;
  }

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

  dimension_group: time_stamp {
    type: time
    timeframes: [time, date]
    sql: ${TABLE}.time_stamp ;;
  }

  dimension_group: first_transaction {
    type: time
    timeframes: [time, date]
    sql: ${first_and_last_transaction.first_transaction_time}::timestamp ;;
  }

  dimension_group: last_transaction {
    type: time
    timeframes: [time, date]
    sql: ${first_and_last_transaction.last_transaction_time}::timestamp ;;
  }

  measure: lifetime_transactions {
    type: count
    drill_fields: [user_id, time_stamp_time, transaction_type, spend]
  }

  measure: insurance_transactions {
    type: count
    drill_fields: [user_id, time_stamp_time, transaction_type, spend]
  }

  measure: rental_transactions {
    type: count
    drill_fields: [user_id, time_stamp_time, transaction_type, spend]
  }

  measure: lifetime_spend {
    type: sum
    drill_fields: [user_id, time_stamp_time, transaction_type, spend]
    sql: ${TABLE}.spend ;;
  }

  measure: insurance_spend {
    type: sum
    drill_fields: [user_id, time_stamp_time, transaction_type, spend]
    sql: ${TABLE}.spend ;;
  }

  measure: rental_spend {
    type: sum
    drill_fields: [user_id, time_stamp_time, transaction_type, spend]
    sql: ${TABLE}.spend ;;
  }
}
customer_lifetime_value.view.lookml · 89 lines
source-preserved
- view: customer_lifetime_value
  derived_table:
    sql: SELECT user_id::integer AS user_id
      ,time_stamp
      ,transaction_type
      ,spend
FROM ${lifetime_value_bookings.SQL_TABLE_NAME} AS lifetime_value_bookings

UNION

SELECT user_id::integer AS user_id
      ,time_stamp
      ,transaction_type
      ,spend
FROM ${lifetime_value_analytics_connection.SQL_TABLE_NAME} AS lifetime_value_analytics_connection
    persist_for: 1 hour
  fields:
  - dimension: user_id
    type: int
    primary_key: true
    sql: ${TABLE}.user_id
  - dimension: transaction_type
    sql: ${TABLE}.transaction_type
  - dimension: spend
    type: number
    sql: ${TABLE}.spend
  - dimension_group: time_stamp
    type: time
    timeframes:
    - time
    - date
    sql: ${TABLE}.time_stamp
  - dimension_group: first_transaction
    type: time
    timeframes:
    - time
    - date
    sql: ${first_and_last_transaction.first_transaction_time}::timestamp
  - dimension_group: last_transaction
    type: time
    timeframes:
    - time
    - date
    sql: ${first_and_last_transaction.last_transaction_time}::timestamp
  - measure: lifetime_transactions
    type: count
    drill_fields:
    - user_id
    - time_stamp_time
    - transaction_type
    - spend
  - measure: insurance_transactions
    type: count
    drill_fields:
    - user_id
    - time_stamp_time
    - transaction_type
    - spend
  - measure: rental_transactions
    type: count
    drill_fields:
    - user_id
    - time_stamp_time
    - transaction_type
    - spend
  - measure: lifetime_spend
    type: sum
    drill_fields:
    - user_id
    - time_stamp_time
    - transaction_type
    - spend
    sql: ${TABLE}.spend
  - measure: insurance_spend
    type: sum
    drill_fields:
    - user_id
    - time_stamp_time
    - transaction_type
    - spend
    sql: ${TABLE}.spend
  - measure: rental_spend
    type: sum
    drill_fields:
    - user_id
    - time_stamp_time
    - transaction_type
    - spend
    sql: ${TABLE}.spend

Contents

  • customer_lifetime_value.sql
  • customer_lifetime_value.sql
  • customer_lifetime_value.view.lkml
  • customer_lifetime_value.view.lookml