dbt Saas crm life sciences

Engagement Facts

Engagement Facts model for saas crm life sciences.

inferred

Blocks

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

SELECT *
  , d1.created_date AS action_day
  , (
    SELECT COUNT(*)
    FROM {{ ref('daily_interaction') }} AS d2
    WHERE d1.email = d2.email
      AND d1.created_date >= DATE_ADD(d2.created_date, interval -1 day)
      AND d1.created_date < d2.created_date
    ) AS active_next_day
  , (
    SELECT COUNT(*)
    FROM {{ ref('daily_interaction') }} AS d3
    WHERE d1.email = d3.email
      AND d1.created_date >= DATE_ADD(d3.created_date, interval -3 day)
      AND d1.created_date < d3.created_date
    ) AS days_active_of_following_3
  , (
    SELECT COUNT(*)
    FROM {{ ref('daily_interaction') }} AS d4
    WHERE d1.email = d4.email
      AND d1.created_date >= DATE_ADD(d4.created_date, interval -7 day)
      AND d1.created_date < d4.created_date
    ) AS days_active_of_following_7
  , (
    SELECT COUNT(*)
    FROM {{ ref('daily_interaction') }} AS d5
    WHERE d1.email = d5.email
      AND d1.created_date >= DATE_ADD(d5.created_date, interval -14 day)
      AND d1.created_date < d5.created_date
    ) AS days_active_of_following_14
  , (
    SELECT COUNT(*)
    FROM {{ ref('daily_interaction') }} AS d6
    WHERE d1.email = d6.email
      AND d1.created_date >= DATE_ADD(d6.created_date, interval -30 day)
      AND d1.created_date < d6.created_date
    ) AS days_active_of_following_30
  , (
    SELECT COUNT(*)
    FROM {{ ref('daily_interaction') }} AS d7
    WHERE d1.email = d7.email
      AND d1.created_date < DATE_ADD(d7.created_date, interval 30 day)
      AND d1.created_date >= d7.created_date
    ) AS days_active_of_prev_30
  FROM {{ ref('daily_interaction') }} AS d1
  GROUP BY email, action_day

# models/schema.yml
version: 2

models:
  - name: engagement_facts
    columns:
      - name: email
      - name: action
      - name: days_since_user_signup
      - name: phone_action_total
      - name: user_called
      - name: number_of_events_total
      - name: record_save_total
      - name: email_action_total
      - name: user_emailed
      - name: text_action_total
      - name: user_communication_total
      - name: user_interacted
      - name: active_next_day
      - name: days_active_of_following_3
      - name: active_within_3_days
      - name: days_active_of_following_7
      - name: active_within_7_days
      - name: days_active_of_following_14
      - name: active_within_14_days
      - name: days_active_of_following_30
      - name: active_within_30_days
      - name: days_active_of_prev_30
      - name: days_active_of_prev_30_tier
      - name: active_in_prev_30_days

Assumptions

  • Each ${view.SQL_TABLE_NAME} was mapped to {{ ref('view') }}; confirm a dbt model exists for each referenced view.
  • 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_facts.sql · 46 lines
source-preserved validation: not checked
SELECT *
  , d1.created_date AS action_day
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d2
    WHERE d1.email = d2.email
      AND d1.created_date >= DATE_ADD(d2.created_date, interval -1 day)
      AND d1.created_date < d2.created_date
    ) AS active_next_day
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d3
    WHERE d1.email = d3.email
      AND d1.created_date >= DATE_ADD(d3.created_date, interval -3 day)
      AND d1.created_date < d3.created_date
    ) AS days_active_of_following_3
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d4
    WHERE d1.email = d4.email
      AND d1.created_date >= DATE_ADD(d4.created_date, interval -7 day)
      AND d1.created_date < d4.created_date
    ) AS days_active_of_following_7
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d5
    WHERE d1.email = d5.email
      AND d1.created_date >= DATE_ADD(d5.created_date, interval -14 day)
      AND d1.created_date < d5.created_date
    ) AS days_active_of_following_14
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d6
    WHERE d1.email = d6.email
      AND d1.created_date >= DATE_ADD(d6.created_date, interval -30 day)
      AND d1.created_date < d6.created_date
    ) AS days_active_of_following_30
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d7
    WHERE d1.email = d7.email
      AND d1.created_date < DATE_ADD(d7.created_date, interval 30 day)
      AND d1.created_date >= d7.created_date
    ) AS days_active_of_prev_30
  FROM ${daily_interaction.SQL_TABLE_NAME} AS d1
  GROUP BY email, action_day
engagement_facts.view.lkml · 436 lines
inferred
view: engagement_facts {
  derived_table: {
    sql: SELECT *
  , d1.created_date AS action_day
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d2
    WHERE d1.email = d2.email
      AND d1.created_date >= DATE_ADD(d2.created_date, interval -1 day)
      AND d1.created_date < d2.created_date
    ) AS active_next_day
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d3
    WHERE d1.email = d3.email
      AND d1.created_date >= DATE_ADD(d3.created_date, interval -3 day)
      AND d1.created_date < d3.created_date
    ) AS days_active_of_following_3
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d4
    WHERE d1.email = d4.email
      AND d1.created_date >= DATE_ADD(d4.created_date, interval -7 day)
      AND d1.created_date < d4.created_date
    ) AS days_active_of_following_7
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d5
    WHERE d1.email = d5.email
      AND d1.created_date >= DATE_ADD(d5.created_date, interval -14 day)
      AND d1.created_date < d5.created_date
    ) AS days_active_of_following_14
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d6
    WHERE d1.email = d6.email
      AND d1.created_date >= DATE_ADD(d6.created_date, interval -30 day)
      AND d1.created_date < d6.created_date
    ) AS days_active_of_following_30
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d7
    WHERE d1.email = d7.email
      AND d1.created_date < DATE_ADD(d7.created_date, interval 30 day)
      AND d1.created_date >= d7.created_date
    ) AS days_active_of_prev_30
  FROM ${daily_interaction.SQL_TABLE_NAME} AS d1
  GROUP BY email, action_day ;;
  }

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

  dimension: action {
    type: time
    sql: ${TABLE}.action_day ;;
  }

  dimension: days_since_user_signup {
    type: number
    hidden: yes
    sql: ${users.days_since_signup} ;;
  }

  dimension: phone_action_total {
    type: number
    hidden: yes
    sql: ${TABLE}.phone_action ;;
  }

  dimension: user_called {
    type: yesno
    sql: ${phone_action_total} > 0 ;;
  }

  dimension: number_of_events_total {
    type: number
    hidden: yes
    sql: ${TABLE}.number_of_events ;;
  }

  dimension: record_save_total {
    type: number
    hidden: yes
    sql: ${TABLE}.record_save ;;
  }

  dimension: email_action_total {
    type: number
    hidden: yes
    sql: ${TABLE}.email_action ;;
  }

  dimension: user_emailed {
    type: yesno
    sql: ${email_action_total} > 0 ;;
  }

  dimension: text_action_total {
    type: number
    hidden: yes
    sql: ${TABLE}.text_action ;;
  }

  dimension: user_communication_total {
    type: number
    hidden: yes
    sql: ${phone_action_total} + ${email_action_total} + ${text_action_total} ;;
  }

  dimension: user_interacted {
    type: yesno
    sql: ${user_communication_total} > 0 ;;
  }

  dimension: active_next_day {
    type: yesno
    sql: ${TABLE}.active_next_day > 0 ;;
  }

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

  dimension: active_within_3_days {
    type: yesno
    sql: ${TABLE}.days_active_of_following_3 > 0 ;;
  }

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

  dimension: active_within_7_days {
    type: yesno
    sql: ${TABLE}.days_active_of_following_7 > 0 ;;
  }

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

  dimension: active_within_14_days {
    type: yesno
    sql: ${TABLE}.days_active_of_following_14 > 0 ;;
  }

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

  dimension: active_within_30_days {
    type: yesno
    sql: ${TABLE}.days_active_of_following_30 > 0 ;;
  }

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

  dimension: days_active_of_prev_30_tier {
    type: tier
    sql: ${days_active_of_prev_30} ;;
  }

  dimension: active_in_prev_30_days {
    type: yesno
    sql: ${days_active_of_prev_30} > 0 ;;
  }

  measure: user_count {
    type: count_distinct
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: phone_action_sum {
    type: sum
    sql: ${TABLE}.phone_action ;;
  }

  measure: users_with_call_count {
    type: count_distinct
    filters: [user_called: "yes"]
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: number_of_events_sum {
    type: sum
    sql: ${number_of_events_total} ;;
  }

  measure: record_save_sum {
    type: sum
    sql: ${TABLE}.record_save ;;
  }

  measure: email_action_sum {
    type: sum
    sql: ${email_action_total} ;;
  }

  measure: user_emailed_count {
    type: count_distinct
    filters: [user_emailed: "yes"]
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: text_action_sum {
    type: sum
    sql: ${text_action_total} ;;
  }

  measure: user_communication_sum {
    type: sum
    sql: ${user_communication_total} ;;
  }

  measure: user_interacted_count {
    type: count_distinct
    filters: [user_interacted: "yes"]
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: users_active_next_day_count {
    type: count_distinct
    hidden: yes
    filters: [active_next_day: "True"]
    sql: ${TABLE}.email ;;
  }

  measure: users_with_call_active_next_day {
    type: count_distinct
    hidden: yes
    filters: [phone_action_total: "1 to"]
    filters: [active_next_day: "True"]
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: users_who_interacted_active_next_day {
    type: count_distinct
    hidden: yes
    filters: [user_interacted: "True"]
    filters: [active_next_day: "True"]
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: users_active_next_day_percent {
    type: number
    sql: 100.0 * ${users_active_next_day_count}/${user_count} ;;
  }

  measure: users_with_call_active_next_day_percent {
    type: number
    sql: 100.0 * ${users_with_call_active_next_day}/${users_with_call_count} ;;
  }

  measure: users_who_interacted_active_next_day_percent {
    type: number
    sql: 100.0 * ${users_who_interacted_active_next_day}/${user_interacted_count} ;;
  }

  measure: users_active_within_3_days_count {
    type: count_distinct
    hidden: yes
    filters: [active_within_3_days: "True"]
    sql: ${TABLE}.email ;;
  }

  measure: users_active_within_3_days_percent {
    type: number
    sql: 100.0 * ${users_active_within_3_days_count}/${user_count} ;;
  }

  measure: users_with_call_active_within_3_days {
    type: count_distinct
    filters: [phone_action_total: "1 to"]
    filters: [active_within_3_days: "True"]
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: users_with_call_active_within_3_days_percent {
    type: number
    sql: 100.0 * ${users_with_call_active_within_3_days}/${users_with_call_count} ;;
  }

  measure: users_who_interacted_active_within_3_days {
    type: count_distinct
    filters: [user_interacted: "True"]
    filters: [active_within_3_days: "True"]
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: users_who_interacted_active_within_3_days_percent {
    type: number
    sql: 100.0 * ${users_who_interacted_active_within_3_days}/${user_interacted_count} ;;
  }

  measure: users_active_within_7_days_count {
    type: count_distinct
    hidden: yes
    filters: [active_within_7_days: "True"]
    sql: ${TABLE}.email ;;
  }

  measure: users_active_within_7_days_percent {
    type: number
    sql: 100.0 * ${users_active_within_7_days_count}/${user_count} ;;
  }

  measure: users_with_call_active_within_7_days {
    type: count_distinct
    filters: [phone_action_total: "1 to"]
    filters: [active_within_7_days: "True"]
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: users_with_call_active_within_7_days_percent {
    type: number
    sql: 100.0 * ${users_with_call_active_within_7_days}/${users_with_call_count} ;;
  }

  measure: users_who_interacted_active_within_7_days {
    type: count_distinct
    filters: [user_interacted: "True"]
    filters: [active_within_7_days: "True"]
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: users_who_interacted_active_within_7_days_percent {
    type: number
    sql: 100.0 * ${users_who_interacted_active_within_7_days}/${user_interacted_count} ;;
  }

  measure: users_with_call_active_within_14_days {
    type: count_distinct
    filters: [phone_action_total: "1 to"]
    filters: [active_within_14_days: "True"]
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: users_with_comm_active_within_14_days {
  }

  measure: active_within_30_days_count {
    type: count_distinct
    filters: [active_within_30_days: "True"]
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: users_active_within_30_days_percent {
    type: number
    sql: 100.0 * ${active_within_30_days_count}/${user_count} ;;
  }

  measure: users_with_call_active_within_30_days {
    type: count_distinct
    filters: [phone_action_total: "1 to"]
    filters: [active_within_30_days: "True"]
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: users_with_call_active_within_30_days_percent {
    type: number
    sql: 100.0 * ${users_with_call_active_within_30_days}/${users_with_call_count} ;;
  }

  measure: users_who_interacted_active_within_30_days {
    type: count_distinct
    filters: [user_interacted: "True"]
    filters: [active_within_30_days: "True"]
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: users_who_interacted_active_within_30_days_percent {
    type: number
    sql: 100.0 * ${users_who_interacted_active_within_30_days}/${user_interacted_count} ;;
  }

  measure: active_in_prev_30_days_count {
    type: count_distinct
    filters: [active_in_prev_30_days: "True"]
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: users_active_in_prev_30_days_percent {
    type: number
    sql: 100.0 * ${active_in_prev_30_days_count}/${user_count} ;;
  }

  measure: users_with_call_active_in_prev_30_days {
    type: count_distinct
    filters: [phone_action_total: "1 to"]
    filters: [active_in_prev_30_days: "True"]
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: users_with_call_active_in_prev_30_days_percent {
    type: number
    sql: 100.0 * ${users_with_call_active_in_prev_30_days}/${users_with_call_count} ;;
  }

  measure: users_who_interacted_active_in_prev_30_days {
    type: count_distinct
    filters: [user_interacted: "True"]
    filters: [active_in_prev_30_days: "True"]
    drill_fields: [detail*]
    sql: ${TABLE}.email ;;
  }

  measure: users_who_interacted_active_in_prev_30_days_percent {
    type: number
    sql: 100.0 * ${users_who_interacted_active_in_prev_30_days}/${user_interacted_count} ;;
  }
}
engagement_facts.view.lookml · 334 lines
source-preserved
- view: engagement_facts
  derived_table:
    sql: SELECT *
  , d1.created_date AS action_day
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d2
    WHERE d1.email = d2.email
      AND d1.created_date >= DATE_ADD(d2.created_date, interval -1 day)
      AND d1.created_date < d2.created_date
    ) AS active_next_day
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d3
    WHERE d1.email = d3.email
      AND d1.created_date >= DATE_ADD(d3.created_date, interval -3 day)
      AND d1.created_date < d3.created_date
    ) AS days_active_of_following_3
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d4
    WHERE d1.email = d4.email
      AND d1.created_date >= DATE_ADD(d4.created_date, interval -7 day)
      AND d1.created_date < d4.created_date
    ) AS days_active_of_following_7
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d5
    WHERE d1.email = d5.email
      AND d1.created_date >= DATE_ADD(d5.created_date, interval -14 day)
      AND d1.created_date < d5.created_date
    ) AS days_active_of_following_14
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d6
    WHERE d1.email = d6.email
      AND d1.created_date >= DATE_ADD(d6.created_date, interval -30 day)
      AND d1.created_date < d6.created_date
    ) AS days_active_of_following_30
  , (
    SELECT COUNT(*)
    FROM ${daily_interaction.SQL_TABLE_NAME} AS d7
    WHERE d1.email = d7.email
      AND d1.created_date < DATE_ADD(d7.created_date, interval 30 day)
      AND d1.created_date >= d7.created_date
    ) AS days_active_of_prev_30
  FROM ${daily_interaction.SQL_TABLE_NAME} AS d1
  GROUP BY email, action_day
  fields:
  - dimension: email
    sql: ${TABLE}.email
  - dimension: action
    type: time
    sql: ${TABLE}.action_day
  - dimension: days_since_user_signup
    type: number
    hidden: true
    sql: ${users.days_since_signup}
  - dimension: phone_action_total
    type: number
    hidden: true
    sql: ${TABLE}.phone_action
  - dimension: user_called
    type: yesno
    sql: ${phone_action_total} > 0
  - dimension: number_of_events_total
    type: number
    hidden: true
    sql: ${TABLE}.number_of_events
  - dimension: record_save_total
    type: number
    hidden: true
    sql: ${TABLE}.record_save
  - dimension: email_action_total
    type: number
    hidden: true
    sql: ${TABLE}.email_action
  - dimension: user_emailed
    type: yesno
    sql: ${email_action_total} > 0
  - dimension: text_action_total
    type: number
    hidden: true
    sql: ${TABLE}.text_action
  - dimension: user_communication_total
    type: number
    hidden: true
    sql: ${phone_action_total} + ${email_action_total} + ${text_action_total}
  - dimension: user_interacted
    type: yesno
    sql: ${user_communication_total} > 0
  - dimension: active_next_day
    type: yesno
    sql: ${TABLE}.active_next_day > 0
  - dimension: days_active_of_following_3
    type: number
    sql: ${TABLE}.days_active_of_following_3
  - dimension: active_within_3_days
    type: yesno
    sql: ${TABLE}.days_active_of_following_3 > 0
  - dimension: days_active_of_following_7
    type: number
    sql: ${TABLE}.days_active_of_following_7
  - dimension: active_within_7_days
    type: yesno
    sql: ${TABLE}.days_active_of_following_7 > 0
  - dimension: days_active_of_following_14
    type: number
    sql: ${TABLE}.days_active_of_following_14
  - dimension: active_within_14_days
    type: yesno
    sql: ${TABLE}.days_active_of_following_14 > 0
  - dimension: days_active_of_following_30
    type: number
    sql: ${TABLE}.days_active_of_following_30
  - dimension: active_within_30_days
    type: yesno
    sql: ${TABLE}.days_active_of_following_30 > 0
  - dimension: days_active_of_prev_30
    type: number
    sql: ${TABLE}.days_active_of_prev_30
  - dimension: days_active_of_prev_30_tier
    type: tier
    sql: ${days_active_of_prev_30}
  - dimension: active_in_prev_30_days
    type: yesno
    sql: ${days_active_of_prev_30} > 0
  - measure: user_count
    type: count_distinct
    drill_fields:
    - detail*
    sql: ${TABLE}.email
  - measure: phone_action_sum
    type: sum
    sql: ${TABLE}.phone_action
  - measure: users_with_call_count
    type: count_distinct
    drill_fields:
    - detail*
    filters:
    - user_called: yes
    sql: ${TABLE}.email
  - measure: number_of_events_sum
    type: sum
    sql: ${number_of_events_total}
  - measure: record_save_sum
    type: sum
    sql: ${TABLE}.record_save
  - measure: email_action_sum
    type: sum
    sql: ${email_action_total}
  - measure: user_emailed_count
    type: count_distinct
    drill_fields:
    - detail*
    filters:
    - user_emailed: yes
    sql: ${TABLE}.email
  - measure: text_action_sum
    type: sum
    sql: ${text_action_total}
  - measure: user_communication_sum
    type: sum
    sql: ${user_communication_total}
  - measure: user_interacted_count
    type: count_distinct
    drill_fields:
    - detail*
    filters:
    - user_interacted: yes
    sql: ${TABLE}.email
  - measure: users_active_next_day_count
    type: count_distinct
    filters:
    - active_next_day: True
    sql: ${TABLE}.email
  - measure: users_with_call_active_next_day
    type: count_distinct
    drill_fields:
    - detail*
    filters:
    - phone_action_total: 1 to
    - active_next_day: True
    sql: ${TABLE}.email
  - measure: users_who_interacted_active_next_day
    type: count_distinct
    drill_fields:
    - detail*
    filters:
    - user_interacted: True
    - active_next_day: True
    sql: ${TABLE}.email
  - measure: users_active_next_day_percent
    type: number
    sql: 100.0 * ${users_active_next_day_count}/${user_count}
  - measure: users_with_call_active_next_day_percent
    type: number
    sql: 100.0 * ${users_with_call_active_next_day}/${users_with_call_count}
  - measure: users_who_interacted_active_next_day_percent
    type: number
    sql: 100.0 * ${users_who_interacted_active_next_day}/${user_interacted_count}
  - measure: users_active_within_3_days_count
    type: count_distinct
    filters:
    - active_within_3_days: True
    sql: ${TABLE}.email
  - measure: users_active_within_3_days_percent
    type: number
    sql: 100.0 * ${users_active_within_3_days_count}/${user_count}
  - measure: users_with_call_active_within_3_days
    type: count_distinct
    drill_fields:
    - detail*
    filters:
    - phone_action_total: 1 to
    - active_within_3_days: True
    sql: ${TABLE}.email
  - measure: users_with_call_active_within_3_days_percent
    type: number
    sql: 100.0 * ${users_with_call_active_within_3_days}/${users_with_call_count}
  - measure: users_who_interacted_active_within_3_days
    type: count_distinct
    drill_fields:
    - detail*
    filters:
    - user_interacted: True
    - active_within_3_days: True
    sql: ${TABLE}.email
  - measure: users_who_interacted_active_within_3_days_percent
    type: number
    sql: 100.0 * ${users_who_interacted_active_within_3_days}/${user_interacted_count}
  - measure: users_active_within_7_days_count
    type: count_distinct
    filters:
    - active_within_7_days: True
    sql: ${TABLE}.email
  - measure: users_active_within_7_days_percent
    type: number
    sql: 100.0 * ${users_active_within_7_days_count}/${user_count}
  - measure: users_with_call_active_within_7_days
    type: count_distinct
    drill_fields:
    - detail*
    filters:
    - phone_action_total: 1 to
    - active_within_7_days: True
    sql: ${TABLE}.email
  - measure: users_with_call_active_within_7_days_percent
    type: number
    sql: 100.0 * ${users_with_call_active_within_7_days}/${users_with_call_count}
  - measure: users_who_interacted_active_within_7_days
    type: count_distinct
    drill_fields:
    - detail*
    filters:
    - user_interacted: True
    - active_within_7_days: True
    sql: ${TABLE}.email
  - measure: users_who_interacted_active_within_7_days_percent
    type: number
    sql: 100.0 * ${users_who_interacted_active_within_7_days}/${user_interacted_count}
  - measure: users_with_call_active_within_14_days
    type: count_distinct
    drill_fields:
    - detail*
    filters:
    - phone_action_total: 1 to
    - active_within_14_days: True
    sql: ${TABLE}.email
  - measure: users_with_comm_active_within_14_days
  - measure: active_within_30_days_count
    type: count_distinct
    drill_fields:
    - detail*
    filters:
    - active_within_30_days: True
    sql: ${TABLE}.email
  - measure: users_active_within_30_days_percent
    type: number
    sql: 100.0 * ${active_within_30_days_count}/${user_count}
  - measure: users_with_call_active_within_30_days
    type: count_distinct
    drill_fields:
    - detail*
    filters:
    - phone_action_total: 1 to
    - active_within_30_days: True
    sql: ${TABLE}.email
  - measure: users_with_call_active_within_30_days_percent
    type: number
    sql: 100.0 * ${users_with_call_active_within_30_days}/${users_with_call_count}
  - measure: users_who_interacted_active_within_30_days
    type: count_distinct
    drill_fields:
    - detail*
    filters:
    - user_interacted: True
    - active_within_30_days: True
    sql: ${TABLE}.email
  - measure: users_who_interacted_active_within_30_days_percent
    type: number
    sql: 100.0 * ${users_who_interacted_active_within_30_days}/${user_interacted_count}
  - measure: active_in_prev_30_days_count
    type: count_distinct
    drill_fields:
    - detail*
    filters:
    - active_in_prev_30_days: True
    sql: ${TABLE}.email
  - measure: users_active_in_prev_30_days_percent
    type: number
    sql: 100.0 * ${active_in_prev_30_days_count}/${user_count}
  - measure: users_with_call_active_in_prev_30_days
    type: count_distinct
    drill_fields:
    - detail*
    filters:
    - phone_action_total: 1 to
    - active_in_prev_30_days: True
    sql: ${TABLE}.email
  - measure: users_with_call_active_in_prev_30_days_percent
    type: number
    sql: 100.0 * ${users_with_call_active_in_prev_30_days}/${users_with_call_count}
  - measure: users_who_interacted_active_in_prev_30_days
    type: count_distinct
    drill_fields:
    - detail*
    filters:
    - user_interacted: True
    - active_in_prev_30_days: True
    sql: ${TABLE}.email
  - measure: users_who_interacted_active_in_prev_30_days_percent
    type: number
    sql: 100.0 * ${users_who_interacted_active_in_prev_30_days}/${user_interacted_count}

Contents

  • engagement_facts.sql
  • engagement_facts.sql
  • engagement_facts.view.lkml
  • engagement_facts.view.lookml