dbt Saas recruitment

Funnel

Funnel model for saas recruitment.

inferred

Blocks

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

select kp.kissmetrics_person_id, e.employer_id, 'registered'::text event_type
  , e.created_time at time zone 'GMT' event_time
  , kp.firstvisit_time
  , e.created_time registration_time
from employer e
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where not istest_flag
UNION
SELECT kp.kissmetrics_person_id, kp.employer_id, 'visited_site'::text event_type
  , firstvisit_time event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM kissmetrics_person kp
LEFT JOIN employer e on e.employer_id = kp.employer_id
WHERE firstvisit_time IS NOT NULL and (NOT e.istest_flag or e.employer_id is null)
UNION
SELECT kp.kissmetrics_person_id, kp.employer_id, 'start_registration'::text event_type
  , firsthitreg_time event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM kissmetrics_person kp
LEFT JOIN employer e on e.employer_id = kp.employer_id
WHERE  firsthitreg_time IS NOT NULL and (NOT e.istest_flag or e.employer_id is null)
UNION
SELECT kp.kissmetrics_person_id, e.employer_id, 'first_choose_bundle'::TEXT event_type
  , firstchoosebundle_time AT TIME ZONE 'GMT' event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM employer e
left join kissmetrics_person kp on e.employer_id = kp.employer_id
WHERE NOT istest_flag AND firstchoosebundle_time IS NOT NULL
UNION
SELECT kp.kissmetrics_person_id, e.employer_id, 'first_confirm_order'::TEXT event_type
  , firstconfirmorder_time AT TIME ZONE 'GMT' event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM employer e
left join kissmetrics_person kp on e.employer_id = kp.employer_id
WHERE NOT istest_flag AND firstconfirmorder_time IS NOT NULL
UNION
select kp.kissmetrics_person_id, e.employer_id, 'created_job'::text event_type, min(j.created_time at time zone 'GMT') event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM job j
join employer e on e.employer_id = j.employer_id and not istest_flag
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where jobtype_text <> 'SampleJob'
and title_text is not null
group by 1,2,5,6
UNION
select kp.kissmetrics_person_id, e.employer_id, 'completed_job'::text event_type, min(j.completed_time at time zone 'GMT') event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM job_reporting j
join employer e on e.employer_id = j.employer_id and not istest_flag
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where jobtype_text <> 'SampleJob'
and j.completed_time is not null
--and j.completed_time < e.created_time + interval '3 days'
--and complete_flag
and title_text is not null
group by 1,2,5,6
UNION
select kp.kissmetrics_person_id, e.employer_id, 'converted'::text event_type, min(close_date) event_time
  , kp.firstvisit_time
  , e.created_time registration_time
from opportunity_reporting o
join salesforce_contact c on c.external_contact_id = o.external_contact_id
join employer e on e.employer_id = c.employer_id
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where stage in ('Closed Won','Refunded')
and (refund_reason not in ('Fraud','Terms of Service Violation') or refund_reason is null)
and not e.istest_flag
group by 1,2,5,6
UNION
select kp.kissmetrics_person_id, e.employer_id, 'first time repeat'::text event_type, close_date event_time
  , kp.firstvisit_time
  , e.created_time registration_time
from opportunity_reporting o
join salesforce_contact c on c.external_contact_id = o.external_contact_id
join employer e on e.employer_id = c.employer_id
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where stage in ('Closed Won','Refunded')
and (refund_reason not in ('Fraud','Terms of Service Violation') or refund_reason is null)
and not e.istest_flag
and opportunity_number = 2
UNION
select kp.kissmetrics_person_id, e.employer_id, 'repeat'::text event_type, close_date event_time
  , kp.firstvisit_time
  , e.created_time registration_time
from opportunity_reporting o
join salesforce_contact c on c.external_contact_id = o.external_contact_id
join employer e on e.employer_id = c.employer_id
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where stage in ('Closed Won','Refunded')
and (refund_reason not in ('Fraud','Terms of Service Violation') or refund_reason is null)
and not e.istest_flag
and opportunity_number = 3

# models/schema.yml
version: 2

models:
  - name: funnel
    columns:
      - name: kissmetrics_person_id
      - name: employer_id
      - name: event

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.
funnel.sql · 98 lines
source-preserved validation: parses
select kp.kissmetrics_person_id, e.employer_id, 'registered'::text event_type
  , e.created_time at time zone 'GMT' event_time
  , kp.firstvisit_time
  , e.created_time registration_time
from employer e
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where not istest_flag
UNION
SELECT kp.kissmetrics_person_id, kp.employer_id, 'visited_site'::text event_type
  , firstvisit_time event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM kissmetrics_person kp
LEFT JOIN employer e on e.employer_id = kp.employer_id
WHERE firstvisit_time IS NOT NULL and (NOT e.istest_flag or e.employer_id is null)
UNION
SELECT kp.kissmetrics_person_id, kp.employer_id, 'start_registration'::text event_type
  , firsthitreg_time event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM kissmetrics_person kp
LEFT JOIN employer e on e.employer_id = kp.employer_id
WHERE  firsthitreg_time IS NOT NULL and (NOT e.istest_flag or e.employer_id is null)
UNION
SELECT kp.kissmetrics_person_id, e.employer_id, 'first_choose_bundle'::TEXT event_type
  , firstchoosebundle_time AT TIME ZONE 'GMT' event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM employer e
left join kissmetrics_person kp on e.employer_id = kp.employer_id
WHERE NOT istest_flag AND firstchoosebundle_time IS NOT NULL
UNION
SELECT kp.kissmetrics_person_id, e.employer_id, 'first_confirm_order'::TEXT event_type
  , firstconfirmorder_time AT TIME ZONE 'GMT' event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM employer e
left join kissmetrics_person kp on e.employer_id = kp.employer_id
WHERE NOT istest_flag AND firstconfirmorder_time IS NOT NULL
UNION
select kp.kissmetrics_person_id, e.employer_id, 'created_job'::text event_type, min(j.created_time at time zone 'GMT') event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM job j
join employer e on e.employer_id = j.employer_id and not istest_flag
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where jobtype_text <> 'SampleJob'
and title_text is not null
group by 1,2,5,6
UNION
select kp.kissmetrics_person_id, e.employer_id, 'completed_job'::text event_type, min(j.completed_time at time zone 'GMT') event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM job_reporting j
join employer e on e.employer_id = j.employer_id and not istest_flag
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where jobtype_text <> 'SampleJob'
and j.completed_time is not null
--and j.completed_time < e.created_time + interval '3 days'
--and complete_flag
and title_text is not null
group by 1,2,5,6
UNION
select kp.kissmetrics_person_id, e.employer_id, 'converted'::text event_type, min(close_date) event_time
  , kp.firstvisit_time
  , e.created_time registration_time
from opportunity_reporting o
join salesforce_contact c on c.external_contact_id = o.external_contact_id
join employer e on e.employer_id = c.employer_id
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where stage in ('Closed Won','Refunded')
and (refund_reason not in ('Fraud','Terms of Service Violation') or refund_reason is null)
and not e.istest_flag
group by 1,2,5,6
UNION
select kp.kissmetrics_person_id, e.employer_id, 'first time repeat'::text event_type, close_date event_time
  , kp.firstvisit_time
  , e.created_time registration_time
from opportunity_reporting o
join salesforce_contact c on c.external_contact_id = o.external_contact_id
join employer e on e.employer_id = c.employer_id
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where stage in ('Closed Won','Refunded')
and (refund_reason not in ('Fraud','Terms of Service Violation') or refund_reason is null)
and not e.istest_flag
and opportunity_number = 2
UNION
select kp.kissmetrics_person_id, e.employer_id, 'repeat'::text event_type, close_date event_time
  , kp.firstvisit_time
  , e.created_time registration_time
from opportunity_reporting o
join salesforce_contact c on c.external_contact_id = o.external_contact_id
join employer e on e.employer_id = c.employer_id
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where stage in ('Closed Won','Refunded')
and (refund_reason not in ('Fraud','Terms of Service Violation') or refund_reason is null)
and not e.istest_flag
and opportunity_number = 3
funnel.view.lkml · 270 lines
inferred
view: funnel {
  derived_table: {
    sql: select kp.kissmetrics_person_id, e.employer_id, 'registered'::text event_type
  , e.created_time at time zone 'GMT' event_time
  , kp.firstvisit_time
  , e.created_time registration_time
from employer e
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where not istest_flag
UNION
SELECT kp.kissmetrics_person_id, kp.employer_id, 'visited_site'::text event_type
  , firstvisit_time event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM kissmetrics_person kp
LEFT JOIN employer e on e.employer_id = kp.employer_id
WHERE firstvisit_time IS NOT NULL and (NOT e.istest_flag or e.employer_id is null)
UNION
SELECT kp.kissmetrics_person_id, kp.employer_id, 'start_registration'::text event_type
  , firsthitreg_time event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM kissmetrics_person kp
LEFT JOIN employer e on e.employer_id = kp.employer_id
WHERE  firsthitreg_time IS NOT NULL and (NOT e.istest_flag or e.employer_id is null)
UNION
SELECT kp.kissmetrics_person_id, e.employer_id, 'first_choose_bundle'::TEXT event_type
  , firstchoosebundle_time AT TIME ZONE 'GMT' event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM employer e
left join kissmetrics_person kp on e.employer_id = kp.employer_id
WHERE NOT istest_flag AND firstchoosebundle_time IS NOT NULL
UNION
SELECT kp.kissmetrics_person_id, e.employer_id, 'first_confirm_order'::TEXT event_type
  , firstconfirmorder_time AT TIME ZONE 'GMT' event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM employer e
left join kissmetrics_person kp on e.employer_id = kp.employer_id
WHERE NOT istest_flag AND firstconfirmorder_time IS NOT NULL
UNION
select kp.kissmetrics_person_id, e.employer_id, 'created_job'::text event_type, min(j.created_time at time zone 'GMT') event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM job j
join employer e on e.employer_id = j.employer_id and not istest_flag
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where jobtype_text <> 'SampleJob'
and title_text is not null
group by 1,2,5,6
UNION
select kp.kissmetrics_person_id, e.employer_id, 'completed_job'::text event_type, min(j.completed_time at time zone 'GMT') event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM job_reporting j
join employer e on e.employer_id = j.employer_id and not istest_flag
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where jobtype_text <> 'SampleJob'
and j.completed_time is not null
--and j.completed_time < e.created_time + interval '3 days'
--and complete_flag
and title_text is not null
group by 1,2,5,6
UNION
select kp.kissmetrics_person_id, e.employer_id, 'converted'::text event_type, min(close_date) event_time
  , kp.firstvisit_time
  , e.created_time registration_time
from opportunity_reporting o
join salesforce_contact c on c.external_contact_id = o.external_contact_id
join employer e on e.employer_id = c.employer_id
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where stage in ('Closed Won','Refunded')
and (refund_reason not in ('Fraud','Terms of Service Violation') or refund_reason is null)
and not e.istest_flag
group by 1,2,5,6
UNION
select kp.kissmetrics_person_id, e.employer_id, 'first time repeat'::text event_type, close_date event_time
  , kp.firstvisit_time
  , e.created_time registration_time
from opportunity_reporting o
join salesforce_contact c on c.external_contact_id = o.external_contact_id
join employer e on e.employer_id = c.employer_id
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where stage in ('Closed Won','Refunded')
and (refund_reason not in ('Fraud','Terms of Service Violation') or refund_reason is null)
and not e.istest_flag
and opportunity_number = 2
UNION
select kp.kissmetrics_person_id, e.employer_id, 'repeat'::text event_type, close_date event_time
  , kp.firstvisit_time
  , e.created_time registration_time
from opportunity_reporting o
join salesforce_contact c on c.external_contact_id = o.external_contact_id
join employer e on e.employer_id = c.employer_id
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where stage in ('Closed Won','Refunded')
and (refund_reason not in ('Fraud','Terms of Service Violation') or refund_reason is null)
and not e.istest_flag
and opportunity_number = 3 ;;
  }

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

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

  dimension: event {
    sql: ${TABLE}.event_type ;;
  }

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

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

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

  measure: event_count {
    type: count
    hidden: yes
    drill_fields: [drill_fields*]
  }

  measure: registration {
    type: count
    filters: [event: "registered"]
    drill_fields: [drill_fields*]
  }

  measure: start_registration {
    type: count
    filters: [event: "start_registration"]
    drill_fields: [drill_fields*]
  }

  measure: visits {
    type: count
    filters: [event: "visited_site"]
    drill_fields: [drill_fields*]
  }

  measure: created_job {
    type: count
    filters: [event: "created_job"]
    drill_fields: [drill_fields*]
  }

  measure: completed_job {
    type: count
    filters: [event: "completed_job"]
    drill_fields: [drill_fields*]
  }

  measure: conversion {
    type: count
    filters: [event: "converted"]
    drill_fields: [drill_fields*]
  }

  measure: first_time_repeat {
    type: count
    filters: [event: "first_time_repeat"]
    drill_fields: [drill_fields*]
  }

  measure: repeat {
    type: count
    filters: [event: "repeat"]
    drill_fields: [drill_fields*]
  }

  measure: first_choose_bundle {
    type: count
    filters: [event: "first_choose_bundle"]
    drill_fields: [drill_fields*]
  }

  measure: first_confirm_order {
    type: count
    filters: [event: "first_confirm_order"]
    drill_fields: [drill_fields*]
  }

  measure: registration_to_pay {
    type: number
    value_format: "#.00%"
    drill_fields: [main*]
    sql: ${conversion}::float / nullif(${registration}::float,0) ;;
  }

  measure: registration_to_job_created {
    type: number
    value_format: "#.00%"
    drill_fields: [main*]
    sql: ${created_job}::float/ nullif(${registration}::float,0) ;;
  }

  measure: registration_to_job_completed {
    type: number
    value_format: "#.00%"
    drill_fields: [main*]
    sql: ${completed_job}::float / nullif(${registration}::float,0) ;;
  }

  measure: job_completion_rate {
    type: number
    value_format: "#.00%"
    drill_fields: [main*]
    sql: ${completed_job}::float / nullif(${created_job}::float,0) ;;
  }

  measure: job_completion_to_payment {
    type: number
    value_format: "#.00%"
    drill_fields: [main*]
    sql: ${conversion}::float / nullif(${completed_job}::float,0) ;;
  }

  measure: visits_to_start_reg {
    type: number
    value_format: "#.00%"
    drill_fields: [main*]
    sql: ${start_registration}::float / nullif(${visits}::float,0) ;;
  }

  measure: start_reg_to_reg {
    type: number
    value_format: "#.00%"
    drill_fields: [main*]
    sql: ${registration}::float / nullif(${start_registration}::float,0) ;;
  }

  measure: job_completion_to_first_choose_bundle {
    type: number
    value_format: "#.00%"
    drill_fields: [main*]
    sql: ${first_choose_bundle}::float / nullif(${completed_job}::float,0) ;;
  }

  measure: first_choose_bundle_to_first_confirm_order {
    type: number
    value_format: "#.00%"
    drill_fields: [main*]
    sql: ${first_confirm_order}::float / nullif(${first_choose_bundle}::float,0) ;;
  }

  measure: first_confirm_order_to_conversion {
    type: number
    value_format: "#.00%"
    drill_fields: [main*]
    sql: ${conversion}::float / nullif(${first_confirm_order}::float,0) ;;
  }
}
funnel.view.lookml · 257 lines
source-preserved
- view: funnel
  derived_table:
    sql: select kp.kissmetrics_person_id, e.employer_id, 'registered'::text event_type
  , e.created_time at time zone 'GMT' event_time
  , kp.firstvisit_time
  , e.created_time registration_time
from employer e
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where not istest_flag
UNION
SELECT kp.kissmetrics_person_id, kp.employer_id, 'visited_site'::text event_type
  , firstvisit_time event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM kissmetrics_person kp
LEFT JOIN employer e on e.employer_id = kp.employer_id
WHERE firstvisit_time IS NOT NULL and (NOT e.istest_flag or e.employer_id is null)
UNION
SELECT kp.kissmetrics_person_id, kp.employer_id, 'start_registration'::text event_type
  , firsthitreg_time event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM kissmetrics_person kp
LEFT JOIN employer e on e.employer_id = kp.employer_id
WHERE  firsthitreg_time IS NOT NULL and (NOT e.istest_flag or e.employer_id is null)
UNION
SELECT kp.kissmetrics_person_id, e.employer_id, 'first_choose_bundle'::TEXT event_type
  , firstchoosebundle_time AT TIME ZONE 'GMT' event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM employer e
left join kissmetrics_person kp on e.employer_id = kp.employer_id
WHERE NOT istest_flag AND firstchoosebundle_time IS NOT NULL
UNION
SELECT kp.kissmetrics_person_id, e.employer_id, 'first_confirm_order'::TEXT event_type
  , firstconfirmorder_time AT TIME ZONE 'GMT' event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM employer e
left join kissmetrics_person kp on e.employer_id = kp.employer_id
WHERE NOT istest_flag AND firstconfirmorder_time IS NOT NULL
UNION
select kp.kissmetrics_person_id, e.employer_id, 'created_job'::text event_type, min(j.created_time at time zone 'GMT') event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM job j
join employer e on e.employer_id = j.employer_id and not istest_flag
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where jobtype_text <> 'SampleJob'
and title_text is not null
group by 1,2,5,6
UNION
select kp.kissmetrics_person_id, e.employer_id, 'completed_job'::text event_type, min(j.completed_time at time zone 'GMT') event_time
  , kp.firstvisit_time
  , e.created_time registration_time
FROM job_reporting j
join employer e on e.employer_id = j.employer_id and not istest_flag
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where jobtype_text <> 'SampleJob'
and j.completed_time is not null
--and j.completed_time < e.created_time + interval '3 days'
--and complete_flag
and title_text is not null
group by 1,2,5,6
UNION
select kp.kissmetrics_person_id, e.employer_id, 'converted'::text event_type, min(close_date) event_time
  , kp.firstvisit_time
  , e.created_time registration_time
from opportunity_reporting o
join salesforce_contact c on c.external_contact_id = o.external_contact_id
join employer e on e.employer_id = c.employer_id
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where stage in ('Closed Won','Refunded')
and (refund_reason not in ('Fraud','Terms of Service Violation') or refund_reason is null)
and not e.istest_flag
group by 1,2,5,6
UNION
select kp.kissmetrics_person_id, e.employer_id, 'first time repeat'::text event_type, close_date event_time
  , kp.firstvisit_time
  , e.created_time registration_time
from opportunity_reporting o
join salesforce_contact c on c.external_contact_id = o.external_contact_id
join employer e on e.employer_id = c.employer_id
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where stage in ('Closed Won','Refunded')
and (refund_reason not in ('Fraud','Terms of Service Violation') or refund_reason is null)
and not e.istest_flag
and opportunity_number = 2
UNION
select kp.kissmetrics_person_id, e.employer_id, 'repeat'::text event_type, close_date event_time
  , kp.firstvisit_time
  , e.created_time registration_time
from opportunity_reporting o
join salesforce_contact c on c.external_contact_id = o.external_contact_id
join employer e on e.employer_id = c.employer_id
left join kissmetrics_person kp on e.employer_id = kp.employer_id
where stage in ('Closed Won','Refunded')
and (refund_reason not in ('Fraud','Terms of Service Violation') or refund_reason is null)
and not e.istest_flag
and opportunity_number = 3
  fields:
  - dimension: kissmetrics_person_id
    type: number
    sql: ${TABLE}.kissmetrics_person_id
  - dimension: employer_id
    type: number
    sql: ${TABLE}.employer_id
  - dimension: event
    sql: ${TABLE}.event_type
  - dimension_group: event
    type: time
    timeframes:
    - time
    - date
    - week
    - month
    sql: ${TABLE}.event_time
  - dimension_group: registration
    type: time
    timeframes:
    - time
    - date
    - week
    - month
    sql: ${TABLE}.registration_time
  - dimension_group: first_visit
    type: time
    timeframes:
    - time
    - date
    - week
    - month
    sql: ${TABLE}.firstvisit_time
  - measure: event_count
    type: count
    drill_fields:
    - drill_fields*
  - measure: registration
    type: count
    drill_fields:
    - drill_fields*
    filters:
    - event: registered
  - measure: start_registration
    type: count
    drill_fields:
    - drill_fields*
    filters:
    - event: start_registration
  - measure: visits
    type: count
    drill_fields:
    - drill_fields*
    filters:
    - event: visited_site
  - measure: created_job
    type: count
    drill_fields:
    - drill_fields*
    filters:
    - event: created_job
  - measure: completed_job
    type: count
    drill_fields:
    - drill_fields*
    filters:
    - event: completed_job
  - measure: conversion
    type: count
    drill_fields:
    - drill_fields*
    filters:
    - event: converted
  - measure: first_time_repeat
    type: count
    drill_fields:
    - drill_fields*
    filters:
    - event: first_time_repeat
  - measure: repeat
    type: count
    drill_fields:
    - drill_fields*
    filters:
    - event: repeat
  - measure: first_choose_bundle
    type: count
    drill_fields:
    - drill_fields*
    filters:
    - event: first_choose_bundle
  - measure: first_confirm_order
    type: count
    drill_fields:
    - drill_fields*
    filters:
    - event: first_confirm_order
  - measure: registration_to_pay
    type: number
    value_format: '#.00%'
    drill_fields:
    - main*
    sql: ${conversion}::float / nullif(${registration}::float,0)
  - measure: registration_to_job_created
    type: number
    value_format: '#.00%'
    drill_fields:
    - main*
    sql: ${created_job}::float/ nullif(${registration}::float,0)
  - measure: registration_to_job_completed
    type: number
    value_format: '#.00%'
    drill_fields:
    - main*
    sql: ${completed_job}::float / nullif(${registration}::float,0)
  - measure: job_completion_rate
    type: number
    value_format: '#.00%'
    drill_fields:
    - main*
    sql: ${completed_job}::float / nullif(${created_job}::float,0)
  - measure: job_completion_to_payment
    type: number
    value_format: '#.00%'
    drill_fields:
    - main*
    sql: ${conversion}::float / nullif(${completed_job}::float,0)
  - measure: visits_to_start_reg
    type: number
    value_format: '#.00%'
    drill_fields:
    - main*
    sql: ${start_registration}::float / nullif(${visits}::float,0)
  - measure: start_reg_to_reg
    type: number
    value_format: '#.00%'
    drill_fields:
    - main*
    sql: ${registration}::float / nullif(${start_registration}::float,0)
  - measure: job_completion_to_first_choose_bundle
    type: number
    value_format: '#.00%'
    drill_fields:
    - main*
    sql: ${first_choose_bundle}::float / nullif(${completed_job}::float,0)
  - measure: first_choose_bundle_to_first_confirm_order
    type: number
    value_format: '#.00%'
    drill_fields:
    - main*
    sql: ${first_confirm_order}::float / nullif(${first_choose_bundle}::float,0)
  - measure: first_confirm_order_to_conversion
    type: number
    value_format: '#.00%'
    drill_fields:
    - main*
    sql: ${conversion}::float / nullif(${first_confirm_order}::float,0)

Contents

  • funnel.sql
  • funnel.sql
  • funnel.view.lkml
  • funnel.view.lookml