dbt Electronics kids

User Order Facts

User Order Facts model for electronics kids.

inferred

Blocks

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

select
user_id
,count(*) as lifetime_orders
,min(completed_at) as first_order
,max(completed_at) as last_order
,sum(total) as lifetime_order_value
,avg(total) as average_order_value


from spree_orders
where locked_at > 0
and user_id > 0
group by user_id

# models/schema.yml
version: 2

models:
  - name: user_order_facts
    columns:
      - name: user_id
        tests:
          - unique
          - not_null
      - name: lifetime_orders
      - name: completed_qtr
      - name: user_lifetime_order_value
      - name: user_average_order_value

Assumptions

  • 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.
user_order_facts.sql · 13 lines
source-preserved validation: parses
select
user_id
,count(*) as lifetime_orders
,min(completed_at) as first_order
,max(completed_at) as last_order
,sum(total) as lifetime_order_value
,avg(total) as average_order_value


from spree_orders
where locked_at > 0
and user_id > 0
group by user_id
user_order_facts.view.lkml · 59 lines
inferred
view: user_order_facts {
  derived_table: {
    sql: select
user_id
,count(*) as lifetime_orders
,min(completed_at) as first_order
,max(completed_at) as last_order
,sum(total) as lifetime_order_value
,avg(total) as average_order_value


from spree_orders
where locked_at > 0
and user_id > 0
group by user_id ;;
  }

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

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

  dimension: completed_qtr {
    sql: CONCAT(${first_order_year},' ','Q',FLOOR(MONTH(${first_order_date})/4)+1) ;;
  }

  dimension: user_lifetime_order_value {
    type: number
    sql: ${TABLE}.lifetime_order_value ;;
  }

  dimension: user_average_order_value {
    type: number
    sql: ${TABLE}.average_order_value ;;
  }

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

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

  measure: count {
    type: count
    drill_fields: [detail*]
  }
}
user_order_facts.view.lookml · 53 lines
source-preserved
- view: user_order_facts
  derived_table:
    sql: select
user_id
,count(*) as lifetime_orders
,min(completed_at) as first_order
,max(completed_at) as last_order
,sum(total) as lifetime_order_value
,avg(total) as average_order_value


from spree_orders
where locked_at > 0
and user_id > 0
group by user_id
  fields:
  - dimension: user_id
    type: number
    primary_key: true
    sql: ${TABLE}.user_id
  - dimension: lifetime_orders
    type: number
    sql: ${TABLE}.lifetime_orders
  - dimension: completed_qtr
    sql: CONCAT(${first_order_year},' ','Q',FLOOR(MONTH(${first_order_date})/4)+1)
  - dimension: user_lifetime_order_value
    type: number
    sql: ${TABLE}.lifetime_order_value
  - dimension: user_average_order_value
    type: number
    sql: ${TABLE}.average_order_value
  - dimension_group: first_order
    type: time
    timeframes:
    - time
    - date
    - week
    - month
    - year
    sql: ${TABLE}.first_order
  - dimension_group: last_order
    type: time
    timeframes:
    - time
    - date
    - week
    - month
    - year
    sql: ${TABLE}.last_order
  - measure: count
    type: count
    drill_fields:
    - detail*

Contents

  • user_order_facts.sql
  • user_order_facts.sql
  • user_order_facts.view.lkml
  • user_order_facts.view.lookml