dbt Electronics cloud storage

One And Done

One And Done model for electronics cloud storage.

inferred

Blocks

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

select
  -- Query from active/ActivityDropoff.sql
  q2.account_created,
  sum( q2.gone_after_day0 ) as gone_after_day0,
  sum( q2.came_back ) as came_back,
  sum( q2.number_accounts ) as total_number_accounts,
  cast(cast(sum( q2.gone_after_day0 ) as decimal( 10, 2 ))/ sum( q2.number_accounts ) * 100 as decimal( 10,2)) as pct_gone
from (
       select
         account_created,
         case when q.days_since_account_created_to_last_activity = 0 then count(*) else 0 end gone_after_day0,
         case when q.days_since_account_created_to_last_activity > 0 then count(*) else 0 end came_back,
         count(*) as number_accounts,
         days_since_account_created_to_last_activity,
         latest_activity
       from (
              select
                sum( dma.num_activities ) as num_activities,
                max(dma.activity_date) as latest_activity,
                trunc(uam.created) as account_created,
                datediff( day, trunc(uam.created), max( dma.activity_date ) ) as days_since_account_created_to_last_activity,
                dma.mesh_id
              from {{ this }}.daily_activity dma
                join analytics.user_account_map uam on dma.mesh_id = uam.mesh_id
              where true
                    and uam.created >= '2014-05-20'
                    and dma.activity_date <= trunc( getDate() )
              -- and uam.mesh_id = 'EDCD0919-1BB4-44F5-A1CB-15ECB85E96B3'
              group by dma.mesh_id, trunc(uam.created)
            ) q
       where q.days_since_account_created_to_last_activity >= 0
       group by days_since_account_created_to_last_activity, account_created, latest_activity
       order by account_created, days_since_account_created_to_last_activity ) q2
group by q2.account_created
order by q2.account_created

# models/schema.yml
version: 2

models:
  - name: one_and_done
    columns:
      - name: account_created
      - name: created_date_with_mark_date
      - name: gone_after_day0
      - name: came_back
      - name: total_number_accounts
      - name: pct_gone

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.
one_and_done.sql · 35 lines
source-preserved validation: not checked
select
  -- Query from active/ActivityDropoff.sql
  q2.account_created,
  sum( q2.gone_after_day0 ) as gone_after_day0,
  sum( q2.came_back ) as came_back,
  sum( q2.number_accounts ) as total_number_accounts,
  cast(cast(sum( q2.gone_after_day0 ) as decimal( 10, 2 ))/ sum( q2.number_accounts ) * 100 as decimal( 10,2)) as pct_gone
from (
       select
         account_created,
         case when q.days_since_account_created_to_last_activity = 0 then count(*) else 0 end gone_after_day0,
         case when q.days_since_account_created_to_last_activity > 0 then count(*) else 0 end came_back,
         count(*) as number_accounts,
         days_since_account_created_to_last_activity,
         latest_activity
       from (
              select
                sum( dma.num_activities ) as num_activities,
                max(dma.activity_date) as latest_activity,
                trunc(uam.created) as account_created,
                datediff( day, trunc(uam.created), max( dma.activity_date ) ) as days_since_account_created_to_last_activity,
                dma.mesh_id
              from ${TABLE}.daily_activity dma
                join analytics.user_account_map uam on dma.mesh_id = uam.mesh_id
              where true
                    and uam.created >= '2014-05-20'
                    and dma.activity_date <= trunc( getDate() )
              -- and uam.mesh_id = 'EDCD0919-1BB4-44F5-A1CB-15ECB85E96B3'
              group by dma.mesh_id, trunc(uam.created)
            ) q
       where q.days_since_account_created_to_last_activity >= 0
       group by days_since_account_created_to_last_activity, account_created, latest_activity
       order by account_created, days_since_account_created_to_last_activity ) q2
group by q2.account_created
order by q2.account_created
one_and_done.view.lkml · 76 lines
inferred
view: one_and_done {
  derived_table: {
    sql: select
  -- Query from active/ActivityDropoff.sql
  q2.account_created,
  sum( q2.gone_after_day0 ) as gone_after_day0,
  sum( q2.came_back ) as came_back,
  sum( q2.number_accounts ) as total_number_accounts,
  cast(cast(sum( q2.gone_after_day0 ) as decimal( 10, 2 ))/ sum( q2.number_accounts ) * 100 as decimal( 10,2)) as pct_gone
from (
       select
         account_created,
         case when q.days_since_account_created_to_last_activity = 0 then count(*) else 0 end gone_after_day0,
         case when q.days_since_account_created_to_last_activity > 0 then count(*) else 0 end came_back,
         count(*) as number_accounts,
         days_since_account_created_to_last_activity,
         latest_activity
       from (
              select
                sum( dma.num_activities ) as num_activities,
                max(dma.activity_date) as latest_activity,
                trunc(uam.created) as account_created,
                datediff( day, trunc(uam.created), max( dma.activity_date ) ) as days_since_account_created_to_last_activity,
                dma.mesh_id
              from ${TABLE}.daily_activity dma
                join analytics.user_account_map uam on dma.mesh_id = uam.mesh_id
              where true
                    and uam.created >= '2014-05-20'
                    and dma.activity_date <= trunc( getDate() )
              -- and uam.mesh_id = 'EDCD0919-1BB4-44F5-A1CB-15ECB85E96B3'
              group by dma.mesh_id, trunc(uam.created)
            ) q
       where q.days_since_account_created_to_last_activity >= 0
       group by days_since_account_created_to_last_activity, account_created, latest_activity
       order by account_created, days_since_account_created_to_last_activity ) q2
group by q2.account_created
order by q2.account_created ;;
  }

  dimension: account_created {
    sql: ${TABLE}.account_created ;;
  }

  dimension: created_date_with_mark_date {
    sql: CASE
WHEN ${marker_dates.name} IS NULL
THEN to_char(${account_created},'YYYY-MM-DD')
ELSE to_char(${account_created},'YYYY-MM-DD') || ' - ' || ${marker_dates.name}
END ;;
  }

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

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

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

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

  measure: count {
    type: count
    drill_fields: [detail*]
  }
}
one_and_done.view.lookml · 62 lines
source-preserved
- view: one_and_done
  derived_table:
    sql: select
  -- Query from active/ActivityDropoff.sql
  q2.account_created,
  sum( q2.gone_after_day0 ) as gone_after_day0,
  sum( q2.came_back ) as came_back,
  sum( q2.number_accounts ) as total_number_accounts,
  cast(cast(sum( q2.gone_after_day0 ) as decimal( 10, 2 ))/ sum( q2.number_accounts ) * 100 as decimal( 10,2)) as pct_gone
from (
       select
         account_created,
         case when q.days_since_account_created_to_last_activity = 0 then count(*) else 0 end gone_after_day0,
         case when q.days_since_account_created_to_last_activity > 0 then count(*) else 0 end came_back,
         count(*) as number_accounts,
         days_since_account_created_to_last_activity,
         latest_activity
       from (
              select
                sum( dma.num_activities ) as num_activities,
                max(dma.activity_date) as latest_activity,
                trunc(uam.created) as account_created,
                datediff( day, trunc(uam.created), max( dma.activity_date ) ) as days_since_account_created_to_last_activity,
                dma.mesh_id
              from ${TABLE}.daily_activity dma
                join analytics.user_account_map uam on dma.mesh_id = uam.mesh_id
              where true
                    and uam.created >= '2014-05-20'
                    and dma.activity_date <= trunc( getDate() )
              -- and uam.mesh_id = 'EDCD0919-1BB4-44F5-A1CB-15ECB85E96B3'
              group by dma.mesh_id, trunc(uam.created)
            ) q
       where q.days_since_account_created_to_last_activity >= 0
       group by days_since_account_created_to_last_activity, account_created, latest_activity
       order by account_created, days_since_account_created_to_last_activity ) q2
group by q2.account_created
order by q2.account_created
  fields:
  - dimension: account_created
    sql: ${TABLE}.account_created
  - dimension: created_date_with_mark_date
    sql: CASE
WHEN ${marker_dates.name} IS NULL
THEN to_char(${account_created},'YYYY-MM-DD')
ELSE to_char(${account_created},'YYYY-MM-DD') || ' - ' || ${marker_dates.name}
END
  - dimension: gone_after_day0
    type: number
    sql: ${TABLE}.gone_after_day0
  - dimension: came_back
    type: number
    sql: ${TABLE}.came_back
  - dimension: total_number_accounts
    type: number
    sql: ${TABLE}.total_number_accounts
  - dimension: pct_gone
    type: number
    sql: ${TABLE}.pct_gone
  - measure: count
    type: count
    drill_fields:
    - detail*

Contents

  • one_and_done.sql
  • one_and_done.sql
  • one_and_done.view.lkml
  • one_and_done.view.lookml