dbt Ecommerce fashion

Engagement Order Facts

Engagement Order Facts model for ecommerce fashion.

inferred

Blocks

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

SELECT e.id AS engagement_id
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 24 HOUR THEN o.id ELSE NULL END) AS orders_next_24_hours
  , SUM(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 24 HOUR THEN o.item_total ELSE 0 END) AS order_revenue_next_24_hours
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 24 HOUR and o.purchase_number = 0 THEN o.id ELSE NULL END) AS act_next_24_hours
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 24 HOUR and o.purchase_number = 0 THEN o.item_total ELSE NULL END) AS act_rev_24_hours
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 30 DAY THEN o.id ELSE NULL END) AS orders_next_30_days
  , SUM(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 30 DAY THEN o.item_total ELSE 0 END) AS order_revenue_next_30_days
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 30 DAY and o.purchase_number = 0 THEN o.id ELSE NULL END) AS act_next_30_days
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 DAY THEN o.id ELSE NULL END) AS orders_next_1_year
  , SUM(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 DAY THEN o.item_total ELSE 0 END) AS order_revenue_next_1_year
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 DAY and o.purchase_number = 0 THEN o.id ELSE NULL END) AS act_next_1_year
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 day and o.purchase_number = 0 THEN o.item_total ELSE NULL END) AS act_rev_1_year
FROM engagements e
INNER JOIN orders o ON o.user_id = e.user_id AND (o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 DAY)
GROUP BY 1

# models/schema.yml
version: 2

models:
  - name: engagement_order_facts
    columns:
      - name: engagement_id
        tests:
          - unique
          - not_null
      - name: orders_next_24_hours
      - name: order_revenue_next_24_hours
      - name: orders_next_30_days
      - name: order_revenue_next_30_days
      - name: orders_next_1_year
      - name: order_revenue_next_1_year
      - name: act_next_1_year
      - name: act_next_30_days
      - name: act_next_24_hours

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.
engagement_order_facts.sql · 15 lines
source-preserved validation: parses
SELECT e.id AS engagement_id
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 24 HOUR THEN o.id ELSE NULL END) AS orders_next_24_hours
  , SUM(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 24 HOUR THEN o.item_total ELSE 0 END) AS order_revenue_next_24_hours
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 24 HOUR and o.purchase_number = 0 THEN o.id ELSE NULL END) AS act_next_24_hours
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 24 HOUR and o.purchase_number = 0 THEN o.item_total ELSE NULL END) AS act_rev_24_hours
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 30 DAY THEN o.id ELSE NULL END) AS orders_next_30_days
  , SUM(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 30 DAY THEN o.item_total ELSE 0 END) AS order_revenue_next_30_days
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 30 DAY and o.purchase_number = 0 THEN o.id ELSE NULL END) AS act_next_30_days
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 DAY THEN o.id ELSE NULL END) AS orders_next_1_year
  , SUM(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 DAY THEN o.item_total ELSE 0 END) AS order_revenue_next_1_year
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 DAY and o.purchase_number = 0 THEN o.id ELSE NULL END) AS act_next_1_year
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 day and o.purchase_number = 0 THEN o.item_total ELSE NULL END) AS act_rev_1_year
FROM engagements e
INNER JOIN orders o ON o.user_id = e.user_id AND (o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 DAY)
GROUP BY 1
engagement_order_facts.view.lkml · 116 lines
inferred
view: engagement_order_facts {
  derived_table: {
    sql: SELECT e.id AS engagement_id
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 24 HOUR THEN o.id ELSE NULL END) AS orders_next_24_hours
  , SUM(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 24 HOUR THEN o.item_total ELSE 0 END) AS order_revenue_next_24_hours
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 24 HOUR and o.purchase_number = 0 THEN o.id ELSE NULL END) AS act_next_24_hours
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 24 HOUR and o.purchase_number = 0 THEN o.item_total ELSE NULL END) AS act_rev_24_hours
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 30 DAY THEN o.id ELSE NULL END) AS orders_next_30_days
  , SUM(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 30 DAY THEN o.item_total ELSE 0 END) AS order_revenue_next_30_days
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 30 DAY and o.purchase_number = 0 THEN o.id ELSE NULL END) AS act_next_30_days
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 DAY THEN o.id ELSE NULL END) AS orders_next_1_year
  , SUM(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 DAY THEN o.item_total ELSE 0 END) AS order_revenue_next_1_year
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 DAY and o.purchase_number = 0 THEN o.id ELSE NULL END) AS act_next_1_year
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 day and o.purchase_number = 0 THEN o.item_total ELSE NULL END) AS act_rev_1_year
FROM engagements e
INNER JOIN orders o ON o.user_id = e.user_id AND (o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 DAY)
GROUP BY 1 ;;
  }

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

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

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

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

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

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

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

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

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

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

  measure: total_act_next_24_hours {
    type: sum
    sql: ${act_next_24_hours} ;;
  }

  measure: total_orders_next_24_hours {
    type: sum
    sql: ${orders_next_24_hours} ;;
  }

  measure: total_order_revenue_next_24_hours {
    type: sum
    sql: ${order_revenue_next_24_hours} ;;
  }

  measure: total_act_next_30_days {
    type: sum
    sql: ${act_next_30_days} ;;
  }

  measure: total_orders_next_30_days {
    type: sum
    sql: ${orders_next_30_days} ;;
  }

  measure: total_order_revenue_next_30_days {
    type: sum
    sql: ${order_revenue_next_30_days} ;;
  }

  measure: total_orders_next_1_year {
    type: sum
    sql: ${orders_next_1_year} ;;
  }

  measure: total_order_revenue_next_1_year {
    type: sum
    sql: ${order_revenue_next_1_year} ;;
  }

  measure: total_act_next_1_year {
    type: sum
    sql: ${act_next_1_year} ;;
  }
}
engagement_order_facts.view.lookml · 77 lines
source-preserved
- view: engagement_order_facts
  derived_table:
    sql: SELECT e.id AS engagement_id
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 24 HOUR THEN o.id ELSE NULL END) AS orders_next_24_hours
  , SUM(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 24 HOUR THEN o.item_total ELSE 0 END) AS order_revenue_next_24_hours
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 24 HOUR and o.purchase_number = 0 THEN o.id ELSE NULL END) AS act_next_24_hours
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 24 HOUR and o.purchase_number = 0 THEN o.item_total ELSE NULL END) AS act_rev_24_hours
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 30 DAY THEN o.id ELSE NULL END) AS orders_next_30_days
  , SUM(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 30 DAY THEN o.item_total ELSE 0 END) AS order_revenue_next_30_days
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 30 DAY and o.purchase_number = 0 THEN o.id ELSE NULL END) AS act_next_30_days
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 DAY THEN o.id ELSE NULL END) AS orders_next_1_year
  , SUM(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 DAY THEN o.item_total ELSE 0 END) AS order_revenue_next_1_year
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 DAY and o.purchase_number = 0 THEN o.id ELSE NULL END) AS act_next_1_year
  , COUNT(DISTINCT CASE WHEN o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 day and o.purchase_number = 0 THEN o.item_total ELSE NULL END) AS act_rev_1_year
FROM engagements e
INNER JOIN orders o ON o.user_id = e.user_id AND (o.completed_at BETWEEN e.visited_at AND e.visited_at + INTERVAL 365 DAY)
GROUP BY 1
  fields:
  - dimension: engagement_id
    type: number
    primary_key: true
    hidden: true
    sql: ${TABLE}.engagement_id
  - dimension: orders_next_24_hours
    type: number
    sql: ${TABLE}.orders_next_24_hours
  - dimension: order_revenue_next_24_hours
    type: number
    sql: ${TABLE}.order_revenue_next_24_hours
  - dimension: orders_next_30_days
    type: number
    sql: ${TABLE}.orders_next_30_days
  - dimension: order_revenue_next_30_days
    type: number
    sql: ${TABLE}.order_revenue_next_30_days
  - dimension: orders_next_1_year
    type: number
    sql: ${TABLE}.orders_next_1_year
  - dimension: order_revenue_next_1_year
    type: number
    sql: ${TABLE}.order_revenue_next_1_year
  - dimension: act_next_1_year
    type: number
    sql: ${TABLE}.act_next_1_year
  - dimension: act_next_30_days
    type: number
    sql: ${TABLE}.act_next_30_days
  - dimension: act_next_24_hours
    type: number
    sql: ${TABLE}.act_next_24_hours
  - measure: total_act_next_24_hours
    type: sum
    sql: ${act_next_24_hours}
  - measure: total_orders_next_24_hours
    type: sum
    sql: ${orders_next_24_hours}
  - measure: total_order_revenue_next_24_hours
    type: sum
    sql: ${order_revenue_next_24_hours}
  - measure: total_act_next_30_days
    type: sum
    sql: ${act_next_30_days}
  - measure: total_orders_next_30_days
    type: sum
    sql: ${orders_next_30_days}
  - measure: total_order_revenue_next_30_days
    type: sum
    sql: ${order_revenue_next_30_days}
  - measure: total_orders_next_1_year
    type: sum
    sql: ${orders_next_1_year}
  - measure: total_order_revenue_next_1_year
    type: sum
    sql: ${order_revenue_next_1_year}
  - measure: total_act_next_1_year
    type: sum
    sql: ${act_next_1_year}

Contents

  • engagement_order_facts.sql
  • engagement_order_facts.sql
  • engagement_order_facts.view.lkml
  • engagement_order_facts.view.lookml