dbt Saas legislation

Application User Facts

Application User Facts model for saas legislation.

inferred

Blocks

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

SELECT
  application_sessions.user_id AS user_id,
  --date_trunc('day', application_sessions.session_start_at) sess_start,
  CASE

    WHEN (current_date - date_trunc('day', application_sessions.session_start_at) <= 28) THEN 'L28'
    WHEN (current_date - date_trunc('day', application_sessions.session_start_at) <= 56) THEN 'L56'
    ELSE 'L84'
  END AS LSWITCH,
  count(distinct date_trunc('day', application_sessions.session_start_at))
FROM
  {{ ref('application_sessions') }} AS application_sessions

WHERE
1=1
AND (current_date - date_trunc('day', application_sessions.session_start_at) <= 84)
GROUP BY 1,2
ORDER BY 2 DESC

# models/schema.yml
version: 2

models:
  - name: application_user_facts
    columns:
      - name: user_id
      - name: lswitch
      - name: count_of_days_logged_in

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.
application_user_facts.sql · 18 lines
source-preserved validation: not checked
SELECT
  application_sessions.user_id AS user_id,
  --date_trunc('day', application_sessions.session_start_at) sess_start,
  CASE

    WHEN (current_date - date_trunc('day', application_sessions.session_start_at) <= 28) THEN 'L28'
    WHEN (current_date - date_trunc('day', application_sessions.session_start_at) <= 56) THEN 'L56'
    ELSE 'L84'
  END AS LSWITCH,
  count(distinct date_trunc('day', application_sessions.session_start_at))
FROM
  ${application_sessions.SQL_TABLE_NAME} AS application_sessions

WHERE
1=1
AND (current_date - date_trunc('day', application_sessions.session_start_at) <= 84)
GROUP BY 1,2
ORDER BY 2 DESC
application_user_facts.view.lkml · 43 lines
inferred
view: application_user_facts {
  derived_table: {
    sql: SELECT
  application_sessions.user_id AS user_id,
  --date_trunc('day', application_sessions.session_start_at) sess_start,
  CASE

    WHEN (current_date - date_trunc('day', application_sessions.session_start_at) <= 28) THEN 'L28'
    WHEN (current_date - date_trunc('day', application_sessions.session_start_at) <= 56) THEN 'L56'
    ELSE 'L84'
  END AS LSWITCH,
  count(distinct date_trunc('day', application_sessions.session_start_at))
FROM
  ${application_sessions.SQL_TABLE_NAME} AS application_sessions

WHERE
1=1
AND (current_date - date_trunc('day', application_sessions.session_start_at) <= 84)
GROUP BY 1,2
ORDER BY 2 DESC ;;
  }

  dimension: user_id {
    type: string
    sql: ${TABLE}.user_id ;;
  }

  dimension: lswitch {
    type: string
    sql: ${TABLE}.lswitch ;;
  }

  dimension: count_of_days_logged_in {
    type: int
    sql: ${TABLE}.count ;;
  }

  measure: count_of_users {
    type: count_distinct
    drill_fields: [application_sessions.user_id, application_sessions.session_start_at]
    sql: ${user_id} ;;
  }
}
application_user_facts.view.lookml · 36 lines
source-preserved
- view: application_user_facts
  derived_table:
    sql: SELECT
  application_sessions.user_id AS user_id,
  --date_trunc('day', application_sessions.session_start_at) sess_start,
  CASE

    WHEN (current_date - date_trunc('day', application_sessions.session_start_at) <= 28) THEN 'L28'
    WHEN (current_date - date_trunc('day', application_sessions.session_start_at) <= 56) THEN 'L56'
    ELSE 'L84'
  END AS LSWITCH,
  count(distinct date_trunc('day', application_sessions.session_start_at))
FROM
  ${application_sessions.SQL_TABLE_NAME} AS application_sessions

WHERE
1=1
AND (current_date - date_trunc('day', application_sessions.session_start_at) <= 84)
GROUP BY 1,2
ORDER BY 2 DESC
  fields:
  - dimension: user_id
    type: string
    sql: ${TABLE}.user_id
  - dimension: lswitch
    type: string
    sql: ${TABLE}.lswitch
  - dimension: count_of_days_logged_in
    type: int
    sql: ${TABLE}.count
  - measure: count_of_users
    type: count_distinct
    drill_fields:
    - application_sessions.user_id
    - application_sessions.session_start_at
    sql: ${user_id}

Contents

  • application_user_facts.sql
  • application_user_facts.sql
  • application_user_facts.view.lkml
  • application_user_facts.view.lookml