dbt
Saas crm life sciences
Users With Sources
Users With Sources model for saas crm life sciences.
inferred
Blocks
users_with_sources.sql · 35 lines
inferred
-- models/users_with_sources.sql
{{ config(materialized='view') }}
SELECT
users.email AS email
, MAX(date(users.signed_up_at)) AS signup
, MAX(CASE WHEN sources.remote_account_type = 'SalesforceRemoteAccount' THEN 1 ELSE 0 END) AS salesforce
, MAX(CASE WHEN sources.remote_account_type = 'ExchangeRemoteAccount' THEN 1 ELSE 0 END) AS exchange
, MAX(CASE WHEN sources.remote_account_type = 'GoogleRemoteAccount' THEN 1 ELSE 0 END) AS google
, MAX(CASE WHEN sources.remote_account_type = 'LinkedinRemoteAccount' THEN 1 ELSE 0 END) AS linkedin
, MAX(CASE WHEN sources.created_at > '2014-04-22' AND sources.remote_account_type = 'SalesforceRemoteAccount' THEN 1 ELSE 0 END) AS received_salesforce_email
, MAX(CASE WHEN sources.remote_account_type = 'SalesforceRemoteAccount' THEN sources.created_at ELSE NULL END) AS sfdc_added_date
FROM users, sources
WHERE users.uuid = sources.user_id
AND users.email NOT LIKE '%onboarding%'
AND users.email NOT LIKE '%tombstoned%'
GROUP BY email
# models/schema.yml
version: 2
models:
- name: users_with_sources
columns:
- name: id
tests:
- unique
- not_null
- name: email
- name: email_connected
- name: exchange
- name: google
- name: linkedin
- name: salesforce
- name: received_salesforce_email
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.
users_with_sources.sql · 14 lines
source-preserved
validation: parses
SELECT
users.email AS email
, MAX(date(users.signed_up_at)) AS signup
, MAX(CASE WHEN sources.remote_account_type = 'SalesforceRemoteAccount' THEN 1 ELSE 0 END) AS salesforce
, MAX(CASE WHEN sources.remote_account_type = 'ExchangeRemoteAccount' THEN 1 ELSE 0 END) AS exchange
, MAX(CASE WHEN sources.remote_account_type = 'GoogleRemoteAccount' THEN 1 ELSE 0 END) AS google
, MAX(CASE WHEN sources.remote_account_type = 'LinkedinRemoteAccount' THEN 1 ELSE 0 END) AS linkedin
, MAX(CASE WHEN sources.created_at > '2014-04-22' AND sources.remote_account_type = 'SalesforceRemoteAccount' THEN 1 ELSE 0 END) AS received_salesforce_email
, MAX(CASE WHEN sources.remote_account_type = 'SalesforceRemoteAccount' THEN sources.created_at ELSE NULL END) AS sfdc_added_date
FROM users, sources
WHERE users.uuid = sources.user_id
AND users.email NOT LIKE '%onboarding%'
AND users.email NOT LIKE '%tombstoned%'
GROUP BY email
users_with_sources.view.lkml · 119 lines
inferred
view: users_with_sources {
derived_table: {
sql: SELECT
users.email AS email
, MAX(date(users.signed_up_at)) AS signup
, MAX(CASE WHEN sources.remote_account_type = 'SalesforceRemoteAccount' THEN 1 ELSE 0 END) AS salesforce
, MAX(CASE WHEN sources.remote_account_type = 'ExchangeRemoteAccount' THEN 1 ELSE 0 END) AS exchange
, MAX(CASE WHEN sources.remote_account_type = 'GoogleRemoteAccount' THEN 1 ELSE 0 END) AS google
, MAX(CASE WHEN sources.remote_account_type = 'LinkedinRemoteAccount' THEN 1 ELSE 0 END) AS linkedin
, MAX(CASE WHEN sources.created_at > '2014-04-22' AND sources.remote_account_type = 'SalesforceRemoteAccount' THEN 1 ELSE 0 END) AS received_salesforce_email
, MAX(CASE WHEN sources.remote_account_type = 'SalesforceRemoteAccount' THEN sources.created_at ELSE NULL END) AS sfdc_added_date
FROM users, sources
WHERE users.uuid = sources.user_id
AND users.email NOT LIKE '%onboarding%'
AND users.email NOT LIKE '%tombstoned%'
GROUP BY email ;;
}
dimension: id {
type: int
primary_key: yes
sql: ${TABLE}.id ;;
}
dimension: email {
sql: ${TABLE}.email ;;
}
dimension: email_connected {
type: yesno
sql: (${exchange} OR ${google}) ;;
}
dimension: exchange {
type: yesno
sql: ${TABLE}.exchange ;;
}
dimension: google {
type: yesno
sql: ${TABLE}.google ;;
}
dimension: linkedin {
type: yesno
sql: ${TABLE}.linkedin ;;
}
dimension: salesforce {
type: yesno
sql: ${TABLE}.salesforce = 1 ;;
}
dimension: received_salesforce_email {
type: yesno
sql: ${TABLE}.received_salesforce_email = 1 ;;
}
dimension_group: signup {
type: time
timeframes: [date, week, month]
sql: ${TABLE}.signup ;;
}
dimension_group: sfdc_added {
type: time
timeframes: [date, week, month]
sql: ${TABLE}.sfdc_added_date ;;
}
measure: exchange_connected_count {
type: count_distinct
filters: [exchange: "True"]
sql: ${TABLE}.email ;;
}
measure: percent_users_with_exchange {
type: number
sql: 100.0 * ${exchange_connected_count}/${count} ;;
}
measure: google_connected_count {
type: count_distinct
filters: [google: "True"]
sql: ${TABLE}.email ;;
}
measure: percent_users_with_google {
type: number
sql: 100.0 * ${google_connected_count}/${count} ;;
}
measure: linkedin_connected_count {
type: count_distinct
filters: [linkedin: "True"]
sql: ${TABLE}.email ;;
}
measure: percent_users_with_linkedin {
type: number
sql: 100.0 * ${linkedin_connected_count}/${count} ;;
}
measure: salesforce_connected_count {
type: count_distinct
filters: [salesforce: "True"]
sql: ${TABLE}.email ;;
}
measure: percent_users_with_salesforce {
type: number
sql: 100.0 * ${salesforce_connected_count}/${count} ;;
}
measure: count {
type: count
drill_fields: [detail*]
}
}
users_with_sources.view.lookml · 91 lines
source-preserved
- view: users_with_sources
derived_table:
sql: SELECT
users.email AS email
, MAX(date(users.signed_up_at)) AS signup
, MAX(CASE WHEN sources.remote_account_type = 'SalesforceRemoteAccount' THEN 1 ELSE 0 END) AS salesforce
, MAX(CASE WHEN sources.remote_account_type = 'ExchangeRemoteAccount' THEN 1 ELSE 0 END) AS exchange
, MAX(CASE WHEN sources.remote_account_type = 'GoogleRemoteAccount' THEN 1 ELSE 0 END) AS google
, MAX(CASE WHEN sources.remote_account_type = 'LinkedinRemoteAccount' THEN 1 ELSE 0 END) AS linkedin
, MAX(CASE WHEN sources.created_at > '2014-04-22' AND sources.remote_account_type = 'SalesforceRemoteAccount' THEN 1 ELSE 0 END) AS received_salesforce_email
, MAX(CASE WHEN sources.remote_account_type = 'SalesforceRemoteAccount' THEN sources.created_at ELSE NULL END) AS sfdc_added_date
FROM users, sources
WHERE users.uuid = sources.user_id
AND users.email NOT LIKE '%onboarding%'
AND users.email NOT LIKE '%tombstoned%'
GROUP BY email
fields:
- dimension: id
type: int
primary_key: true
sql: ${TABLE}.id
- dimension: email
sql: ${TABLE}.email
- dimension: email_connected
type: yesno
sql: (${exchange} OR ${google})
- dimension: exchange
type: yesno
sql: ${TABLE}.exchange
- dimension: google
type: yesno
sql: ${TABLE}.google
- dimension: linkedin
type: yesno
sql: ${TABLE}.linkedin
- dimension: salesforce
type: yesno
sql: ${TABLE}.salesforce = 1
- dimension: received_salesforce_email
type: yesno
sql: ${TABLE}.received_salesforce_email = 1
- dimension_group: signup
type: time
timeframes:
- date
- week
- month
sql: ${TABLE}.signup
- dimension_group: sfdc_added
type: time
timeframes:
- date
- week
- month
sql: ${TABLE}.sfdc_added_date
- measure: exchange_connected_count
type: count_distinct
filters:
- exchange: True
sql: ${TABLE}.email
- measure: percent_users_with_exchange
type: number
sql: 100.0 * ${exchange_connected_count}/${count}
- measure: google_connected_count
type: count_distinct
filters:
- google: True
sql: ${TABLE}.email
- measure: percent_users_with_google
type: number
sql: 100.0 * ${google_connected_count}/${count}
- measure: linkedin_connected_count
type: count_distinct
filters:
- linkedin: True
sql: ${TABLE}.email
- measure: percent_users_with_linkedin
type: number
sql: 100.0 * ${linkedin_connected_count}/${count}
- measure: salesforce_connected_count
type: count_distinct
filters:
- salesforce: True
sql: ${TABLE}.email
- measure: percent_users_with_salesforce
type: number
sql: 100.0 * ${salesforce_connected_count}/${count}
- measure: count
type: count
drill_fields:
- detail*
Contents
- users_with_sources.sql
- users_with_sources.sql
- users_with_sources.view.lkml
- users_with_sources.view.lookml