SQL Delivery alcohol

First Order Ratings

First Order Ratings model for delivery alcohol.

source-preserved

Blocks

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

SELECT
distinct oratings.user_id
, oratings.rating
, MIN(o.created_at) AS created_at_min
, oratings.order_id
          FROM order_ratings AS oratings
          INNER JOIN orders AS o ON o.id = oratings.order_id
          INNER JOIN orders AS so ON oratings.order_id = so.order_id
          WHERE NOT EXISTS
            (SELECT 1 FROM orders AS o
            WHERE o.user_id = oratings.user_id and o.id < oratings.order_id)
          AND EXISTS (SELECT 1 FROM orders so WHERE so.order_id = oratings.id and so.status = 6)
          GROUP BY oratings.user_id

# models/schema.yml
version: 2

models:
  - name: first_order_ratings
    columns:
      - name: total_buyer_pool_test
      - name: user_id
        tests:
          - unique
          - not_null
      - name: rating
      - name: order_id

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.
first_order_ratings.sql · 13 lines
source-preserved validation: parses
SELECT
distinct oratings.user_id
, oratings.rating
, MIN(o.created_at) AS created_at_min
, oratings.order_id
          FROM order_ratings AS oratings
          INNER JOIN orders AS o ON o.id = oratings.order_id
          INNER JOIN orders AS so ON oratings.order_id = so.order_id
          WHERE NOT EXISTS
            (SELECT 1 FROM orders AS o
            WHERE o.user_id = oratings.user_id and o.id < oratings.order_id)
          AND EXISTS (SELECT 1 FROM orders so WHERE so.order_id = oratings.id and so.status = 6)
          GROUP BY oratings.user_id
first_order_ratings.view.lkml · 59 lines
inferred
view: first_order_ratings {
  derived_table: {
    sql: SELECT
distinct oratings.user_id
, oratings.rating
, MIN(o.created_at) AS created_at_min
, oratings.order_id
          FROM order_ratings AS oratings
          INNER JOIN orders AS o ON o.id = oratings.order_id
          INNER JOIN orders AS so ON oratings.order_id = so.order_id
          WHERE NOT EXISTS
            (SELECT 1 FROM orders AS o
            WHERE o.user_id = oratings.user_id and o.id < oratings.order_id)
          AND EXISTS (SELECT 1 FROM orders so WHERE so.order_id = oratings.id and so.status = 6)
          GROUP BY oratings.user_id ;;
  }

  dimension: total_buyer_pool_test {
    type: number
    sql: (
    SELECT {% parameter state_2 %}UNT(DISTINCT o.user_id)
      FROM order_ratings AS oratings
           INNER JOIN orders AS o ON o.id = oratings.order_id
           INNER JOIN orders AS so ON oratings.order_id = so.order_id
           WHERE NOT EXISTS
             (SELECT 1 FROM orders AS o
             WHERE o.user_id = oratings.user_id and o.id < oratings.order_id)
           AND EXISTS (SELECT 1 FROM orders so WHERE so.order_id = oratings.id and so.status = 6)
 ) ;;
  }

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

  dimension: rating {
    label: "First Rating"
    type: number
    sql: ${TABLE}.rating ;;
  }

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

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

  measure: count {
    type: count
    drill_fields: [detail*]
  }
}
first_order_ratings.view.lookml · 51 lines
source-preserved
- view: first_order_ratings
  derived_table:
    sql: SELECT
distinct oratings.user_id
, oratings.rating
, MIN(o.created_at) AS created_at_min
, oratings.order_id
          FROM order_ratings AS oratings
          INNER JOIN orders AS o ON o.id = oratings.order_id
          INNER JOIN orders AS so ON oratings.order_id = so.order_id
          WHERE NOT EXISTS
            (SELECT 1 FROM orders AS o
            WHERE o.user_id = oratings.user_id and o.id < oratings.order_id)
          AND EXISTS (SELECT 1 FROM orders so WHERE so.order_id = oratings.id and so.status = 6)
          GROUP BY oratings.user_id
  fields:
  - dimension: total_buyer_pool_test
    type: number
    sql: (
    SELECT {% parameter state_2 %}UNT(DISTINCT o.user_id)
      FROM order_ratings AS oratings
           INNER JOIN orders AS o ON o.id = oratings.order_id
           INNER JOIN orders AS so ON oratings.order_id = so.order_id
           WHERE NOT EXISTS
             (SELECT 1 FROM orders AS o
             WHERE o.user_id = oratings.user_id and o.id < oratings.order_id)
           AND EXISTS (SELECT 1 FROM orders so WHERE so.order_id = oratings.id and so.status = 6)
 )
  - dimension: user_id
    type: number
    primary_key: true
    sql: ${TABLE}.user_id
  - dimension: rating
    type: number
    label: First Rating
    sql: ${TABLE}.rating
  - dimension: order_id
    type: number
    sql: ${TABLE}.order_id
  - dimension_group: created_at
    type: time
    timeframes:
    - time
    - date
    - week
    - month
    sql: ${TABLE}.created_at_min
  - measure: count
    type: count
    drill_fields:
    - detail*

Contents

  • first_order_ratings.sql
  • first_order_ratings.sql
  • first_order_ratings.view.lkml
  • first_order_ratings.view.lookml