dbt Ecommerce fashion

Order Facts

Order Facts model for ecommerce fashion.

inferred

Blocks

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

SELECT entity_id AS order_id,
        (
          SELECT COUNT(1)
          FROM sales_flat_order a
          WHERE s.customer_id = a.customer_id
          AND a.increment_id <= s.increment_id) AS order_sequence,
          (EXISTS (
                  SELECT 1
                  FROM sales_flat_order a
                  WHERE s.customer_id = a.customer_id
                  AND a.increment_id > s.increment_id
                  )
          ) AS has_next_order
FROM sales_flat_order s
WHERE customer_id IS NOT NULL

# models/schema.yml
version: 2

models:
  - name: order_facts
    columns:
      - name: order_id
        tests:
          - unique
          - not_null
      - name: orders.order_sequence
      - name: orders.has_next_purchase
      - name: orders.is_first_purchase

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.
order_facts.sql · 15 lines
source-preserved validation: parses
SELECT entity_id AS order_id,
        (
          SELECT COUNT(1)
          FROM sales_flat_order a
          WHERE s.customer_id = a.customer_id
          AND a.increment_id <= s.increment_id) AS order_sequence,
          (EXISTS (
                  SELECT 1
                  FROM sales_flat_order a
                  WHERE s.customer_id = a.customer_id
                  AND a.increment_id > s.increment_id
                  )
          ) AS has_next_order
FROM sales_flat_order s
WHERE customer_id IS NOT NULL
order_facts.view.lkml · 58 lines
inferred
view: order_facts {
  derived_table: {
    sql: SELECT entity_id AS order_id,
        (
          SELECT COUNT(1)
          FROM sales_flat_order a
          WHERE s.customer_id = a.customer_id
          AND a.increment_id <= s.increment_id) AS order_sequence,
          (EXISTS (
                  SELECT 1
                  FROM sales_flat_order a
                  WHERE s.customer_id = a.customer_id
                  AND a.increment_id > s.increment_id
                  )
          ) AS has_next_order
FROM sales_flat_order s
WHERE customer_id IS NOT NULL ;;
  }

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

  dimension: orders.order_sequence {
    type: number
    sql: ${TABLE}.order_sequence ;;
  }

  dimension: orders.has_next_purchase {
    type: yesno
    sql: ${TABLE}.has_next_order = 1 ;;
  }

  dimension: orders.is_first_purchase {
    type: yesno
    sql: ${orders.order_sequence} = 1 ;;
  }

  measure: orders.first_purchase_count {
    type: count
    filters: [orders.is_first_purchase: "True"]
    sql: ${order_id} ;;
  }

  measure: orders.has_next_purchase_count {
    type: count
    filters: [orders.has_next_purchase: "True"]
    sql: ${order_id} ;;
  }

  measure: orders.has_next_purchase_percent {
    type: number
    sql: 100.0 * ${orders.has_next_purchase_count}/ ${orders.count} ;;
  }
}
order_facts.view.lookml · 45 lines
source-preserved
- view: order_facts
  derived_table:
    sql: SELECT entity_id AS order_id,
        (
          SELECT COUNT(1)
          FROM sales_flat_order a
          WHERE s.customer_id = a.customer_id
          AND a.increment_id <= s.increment_id) AS order_sequence,
          (EXISTS (
                  SELECT 1
                  FROM sales_flat_order a
                  WHERE s.customer_id = a.customer_id
                  AND a.increment_id > s.increment_id
                  )
          ) AS has_next_order
FROM sales_flat_order s
WHERE customer_id IS NOT NULL
  fields:
  - dimension: order_id
    type: int
    primary_key: true
    hidden: true
    sql: ${TABLE}.order_id
  - dimension: orders.order_sequence
    type: number
    sql: ${TABLE}.order_sequence
  - dimension: orders.has_next_purchase
    type: yesno
    sql: ${TABLE}.has_next_order = 1
  - dimension: orders.is_first_purchase
    type: yesno
    sql: ${orders.order_sequence} = 1
  - measure: orders.first_purchase_count
    type: count
    filters:
    - orders.is_first_purchase: True
    sql: ${order_id}
  - measure: orders.has_next_purchase_count
    type: count
    filters:
    - orders.has_next_purchase: True
    sql: ${order_id}
  - measure: orders.has_next_purchase_percent
    type: number
    sql: 100.0 * ${orders.has_next_purchase_count}/ ${orders.count}

Contents

  • order_facts.sql
  • order_facts.sql
  • order_facts.view.lkml
  • order_facts.view.lookml