SQL
Delivery app
Invites Facts
Invites Facts model for delivery app.
source-preserved
Blocks
invites_facts.sql · 53 lines
inferred
-- models/invites_facts.sql
{{ config(materialized='table') }}
select
d.date
,d.prev_date
,(
select sum(e.value) from analytics_events e
where 1=1
and e.eventable_type='User'
and e.event_type='User invitations granted'
and e.date::date+interval '1 day' < d.date
and e.date::date+interval '1 day' >=d.prev_date
) as invites_issued
,(
select count(*) from analytics_invites i
where 1=1
and i.created_at::date+interval '1 day' < d.date
and i.created_at::date+interval '1 day' >=d.prev_date
) as invites_sent
,ic.invites_claimed
from (
select date(d.date) as date
,lag(d.date) over( order by d.date)::date as prev_date
from analytics_deliveries d
where 1=1
and d.date<(current_date + interval '7 days')
) d
left join (
select count(*)invites_claimed, d.date
from analytics_coupon_uses cu
join analytics_user_coupons uc on uc.id=cu.user_coupon_id
join analytics_coupons c on c.id=uc.coupon_id
join analytics_invites i on i.coupon_id=c.id
join analytics_orders o on o.id=cu.order_id
join analytics_delivery_windows dw on dw.id=o.delivery_window_id
join analytics_deliveries d on d.id=dw.delivery_id
where 1=1
and (o.is_paid or o.status='Scheduled')
group by d.date
) ic on d.prev_date=ic.date
# models/schema.yml
version: 2
models:
- name: invites_facts
columns:
- name: invite
- name: dummy_pivot
- name: invites_issued_dimension
- name: invites_sent_dimension
- name: invites_claimed_dimension
Assumptions
- 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.
invites_facts.sql · 38 lines
source-preserved
validation: parses
select
d.date
,d.prev_date
,(
select sum(e.value) from analytics_events e
where 1=1
and e.eventable_type='User'
and e.event_type='User invitations granted'
and e.date::date+interval '1 day' < d.date
and e.date::date+interval '1 day' >=d.prev_date
) as invites_issued
,(
select count(*) from analytics_invites i
where 1=1
and i.created_at::date+interval '1 day' < d.date
and i.created_at::date+interval '1 day' >=d.prev_date
) as invites_sent
,ic.invites_claimed
from (
select date(d.date) as date
,lag(d.date) over( order by d.date)::date as prev_date
from analytics_deliveries d
where 1=1
and d.date<(current_date + interval '7 days')
) d
left join (
select count(*)invites_claimed, d.date
from analytics_coupon_uses cu
join analytics_user_coupons uc on uc.id=cu.user_coupon_id
join analytics_coupons c on c.id=uc.coupon_id
join analytics_invites i on i.coupon_id=c.id
join analytics_orders o on o.id=cu.order_id
join analytics_delivery_windows dw on dw.id=o.delivery_window_id
join analytics_deliveries d on d.id=dw.delivery_id
where 1=1
and (o.is_paid or o.status='Scheduled')
group by d.date
) ic on d.prev_date=ic.date
invites_facts.view.lkml · 86 lines
inferred
view: invites_facts {
derived_table: {
sql: select
d.date
,d.prev_date
,(
select sum(e.value) from analytics_events e
where 1=1
and e.eventable_type='User'
and e.event_type='User invitations granted'
and e.date::date+interval '1 day' < d.date
and e.date::date+interval '1 day' >=d.prev_date
) as invites_issued
,(
select count(*) from analytics_invites i
where 1=1
and i.created_at::date+interval '1 day' < d.date
and i.created_at::date+interval '1 day' >=d.prev_date
) as invites_sent
,ic.invites_claimed
from (
select date(d.date) as date
,lag(d.date) over( order by d.date)::date as prev_date
from analytics_deliveries d
where 1=1
and d.date<(current_date + interval '7 days')
) d
left join (
select count(*)invites_claimed, d.date
from analytics_coupon_uses cu
join analytics_user_coupons uc on uc.id=cu.user_coupon_id
join analytics_coupons c on c.id=uc.coupon_id
join analytics_invites i on i.coupon_id=c.id
join analytics_orders o on o.id=cu.order_id
join analytics_delivery_windows dw on dw.id=o.delivery_window_id
join analytics_deliveries d on d.id=dw.delivery_id
where 1=1
and (o.is_paid or o.status='Scheduled')
group by d.date
) ic on d.prev_date=ic.date ;;
persist_for: "12 hours"
}
dimension: invite {
type: time
sql: ${TABLE}.prev_date ;;
}
dimension: dummy_pivot {
label: "x"
sql: case when 1=1 then null end ;;
}
dimension: invites_issued_dimension {
type: number
hidden: yes
sql: ${TABLE}.invites_issued ;;
}
dimension: invites_sent_dimension {
type: number
hidden: yes
sql: ${TABLE}.invites_sent ;;
}
dimension: invites_claimed_dimension {
type: number
hidden: yes
sql: ${TABLE}.invites_claimed ;;
}
measure: invites_issued {
type: max
sql: ${invites_issued_dimension} ;;
}
measure: invites_sent {
type: max
sql: ${invites_sent_dimension} ;;
}
measure: invites_claimed {
type: max
sql: ${invites_claimed_dimension} ;;
}
}
invites_facts.view.lookml · 69 lines
source-preserved
- view: invites_facts
derived_table:
sql: select
d.date
,d.prev_date
,(
select sum(e.value) from analytics_events e
where 1=1
and e.eventable_type='User'
and e.event_type='User invitations granted'
and e.date::date+interval '1 day' < d.date
and e.date::date+interval '1 day' >=d.prev_date
) as invites_issued
,(
select count(*) from analytics_invites i
where 1=1
and i.created_at::date+interval '1 day' < d.date
and i.created_at::date+interval '1 day' >=d.prev_date
) as invites_sent
,ic.invites_claimed
from (
select date(d.date) as date
,lag(d.date) over( order by d.date)::date as prev_date
from analytics_deliveries d
where 1=1
and d.date<(current_date + interval '7 days')
) d
left join (
select count(*)invites_claimed, d.date
from analytics_coupon_uses cu
join analytics_user_coupons uc on uc.id=cu.user_coupon_id
join analytics_coupons c on c.id=uc.coupon_id
join analytics_invites i on i.coupon_id=c.id
join analytics_orders o on o.id=cu.order_id
join analytics_delivery_windows dw on dw.id=o.delivery_window_id
join analytics_deliveries d on d.id=dw.delivery_id
where 1=1
and (o.is_paid or o.status='Scheduled')
group by d.date
) ic on d.prev_date=ic.date
persist_for: 12 hours
fields:
- dimension: invite
type: time
sql: ${TABLE}.prev_date
- dimension: dummy_pivot
label: x
sql: case when 1=1 then null end
- dimension: invites_issued_dimension
type: number
hidden: true
sql: ${TABLE}.invites_issued
- dimension: invites_sent_dimension
type: number
hidden: true
sql: ${TABLE}.invites_sent
- dimension: invites_claimed_dimension
type: number
hidden: true
sql: ${TABLE}.invites_claimed
- measure: invites_issued
type: max
sql: ${invites_issued_dimension}
- measure: invites_sent
type: max
sql: ${invites_sent_dimension}
- measure: invites_claimed
type: max
sql: ${invites_claimed_dimension}
Contents
- invites_facts.sql
- invites_facts.sql
- invites_facts.view.lkml
- invites_facts.view.lookml