dbt Saas cloud infrastructure

Funnel Explorer

Funnel Explorer model for saas cloud infrastructure.

inferred

Blocks

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

SELECT sessions.session_id as session_id
  , MIN(
      CASE WHEN
        {% condition event1 %} SUBSTRING(cmd, POSITION('/placeholder_command ' IN cmd), 99999) {% endcondition %}
        THEN dcos_cli.received_at
        ELSE NULL END
      ) as event1_time
  , MIN(
      CASE WHEN
        {% condition event2 %} SUBSTRING(cmd, POSITION('/placeholder_command ' IN cmd), 99999) {% endcondition %}
        THEN dcos_cli.received_at
        ELSE NULL END
      ) as event2_time
  , MIN(
      CASE WHEN
        {% condition event3 %} SUBSTRING(cmd, POSITION('/placeholder_command ' IN cmd), 99999) {% endcondition %}
        THEN dcos_cli.received_at
        ELSE NULL END
      ) as event3_time
FROM dcos.tracks as tracks
LEFT JOIN dcos.dcos_cli as dcos_cli
  ON coalesce(tracks.anonymous_id, tracks.event_id, tracks.user_id) = coalesce(dcos_cli.anonymous_id, dcos_cli.event_id, dcos_cli.user_id)
LEFT JOIN {{ ref('aliases_mapping') }} as aliases_mapping
  ON aliases_mapping.alias = coalesce(tracks.user_id, tracks.anonymous_id)
LEFT JOIN {{ ref('track_facts') }} as tracks_sessions_map
  ON tracks.event_id = tracks_sessions_map.event_id
LEFT JOIN {{ ref('sessions_trk') }} as sessions
  ON tracks_sessions_map.session_id = sessions.session_id
GROUP BY 1

# models/schema.yml
version: 2

models:
  - name: funnel_explorer
    columns:
      - name: session_id
        tests:
          - unique
          - not_null
      - name: event1
      - name: event2
      - name: event3
      - name: event1_before_event2
      - name: event2_before_event3

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.
funnel_explorer.sql · 29 lines
source-preserved validation: not checked
SELECT sessions.session_id as session_id
  , MIN(
      CASE WHEN
        {% condition event1 %} SUBSTRING(cmd, POSITION('/placeholder_command ' IN cmd), 99999) {% endcondition %}
        THEN dcos_cli.received_at
        ELSE NULL END
      ) as event1_time
  , MIN(
      CASE WHEN
        {% condition event2 %} SUBSTRING(cmd, POSITION('/placeholder_command ' IN cmd), 99999) {% endcondition %}
        THEN dcos_cli.received_at
        ELSE NULL END
      ) as event2_time
  , MIN(
      CASE WHEN
        {% condition event3 %} SUBSTRING(cmd, POSITION('/placeholder_command ' IN cmd), 99999) {% endcondition %}
        THEN dcos_cli.received_at
        ELSE NULL END
      ) as event3_time
FROM dcos.tracks as tracks
LEFT JOIN dcos.dcos_cli as dcos_cli
  ON coalesce(tracks.anonymous_id, tracks.event_id, tracks.user_id) = coalesce(dcos_cli.anonymous_id, dcos_cli.event_id, dcos_cli.user_id)
LEFT JOIN ${aliases_mapping.SQL_TABLE_NAME} as aliases_mapping
  ON aliases_mapping.alias = coalesce(tracks.user_id, tracks.anonymous_id)
LEFT JOIN ${track_facts.SQL_TABLE_NAME} as tracks_sessions_map
  ON tracks.event_id = tracks_sessions_map.event_id
LEFT JOIN ${sessions_trk.SQL_TABLE_NAME} as sessions
  ON tracks_sessions_map.session_id = sessions.session_id
GROUP BY 1
funnel_explorer.view.lkml · 89 lines
inferred
view: funnel_explorer {
  derived_table: {
    sql: SELECT sessions.session_id as session_id
  , MIN(
      CASE WHEN
        {% condition event1 %} SUBSTRING(cmd, POSITION('/placeholder_command ' IN cmd), 99999) {% endcondition %}
        THEN dcos_cli.received_at
        ELSE NULL END
      ) as event1_time
  , MIN(
      CASE WHEN
        {% condition event2 %} SUBSTRING(cmd, POSITION('/placeholder_command ' IN cmd), 99999) {% endcondition %}
        THEN dcos_cli.received_at
        ELSE NULL END
      ) as event2_time
  , MIN(
      CASE WHEN
        {% condition event3 %} SUBSTRING(cmd, POSITION('/placeholder_command ' IN cmd), 99999) {% endcondition %}
        THEN dcos_cli.received_at
        ELSE NULL END
      ) as event3_time
FROM dcos.tracks as tracks
LEFT JOIN dcos.dcos_cli as dcos_cli
  ON coalesce(tracks.anonymous_id, tracks.event_id, tracks.user_id) = coalesce(dcos_cli.anonymous_id, dcos_cli.event_id, dcos_cli.user_id)
LEFT JOIN ${aliases_mapping.SQL_TABLE_NAME} as aliases_mapping
  ON aliases_mapping.alias = coalesce(tracks.user_id, tracks.anonymous_id)
LEFT JOIN ${track_facts.SQL_TABLE_NAME} as tracks_sessions_map
  ON tracks.event_id = tracks_sessions_map.event_id
LEFT JOIN ${sessions_trk.SQL_TABLE_NAME} as sessions
  ON tracks_sessions_map.session_id = sessions.session_id
GROUP BY 1 ;;
  }

  dimension: session_id {
    type: string
    primary_key: yes
    sql: ${TABLE}.session_id ;;
  }

  dimension: event1 {
    type: time
    sql: ${TABLE}.event1_time ;;
  }

  dimension: event2 {
    type: time
    sql: ${TABLE}.event2_time ;;
  }

  dimension: event3 {
    type: time
    sql: ${TABLE}.event3_time ;;
  }

  dimension: event1_before_event2 {
    type: yesno
    sql: ${event1_time} < ${event2_time} ;;
  }

  dimension: event2_before_event3 {
    type: yesno
    sql: ${event2_time} < ${event3_time} ;;
  }

  measure: count_sessions {
    type: count
  }

  measure: count_sessions_event1 {
    type: count
    filters: [event1_time: "NOT NULL"]
  }

  measure: count_sessions_event12 {
    type: count
    filters: [event1_time: "NOT NULL"]
    filters: [event2_time: "NOT NULL"]
    filters: [event1_before_event2: "True"]
  }

  measure: count_sessions_event123 {
    type: count
    filters: [event1_time: "NOT NULL"]
    filters: [event2_time: "NOT NULL"]
    filters: [event3_time: "NOT NULL"]
    filters: [event1_before_event2: "True"]
    filters: [event2_before_event3: "True"]
  }
}
funnel_explorer.view.lookml · 71 lines
source-preserved
- view: funnel_explorer
  derived_table:
    sql: SELECT sessions.session_id as session_id
  , MIN(
      CASE WHEN
        {% condition event1 %} SUBSTRING(cmd, POSITION('/placeholder_command ' IN cmd), 99999) {% endcondition %}
        THEN dcos_cli.received_at
        ELSE NULL END
      ) as event1_time
  , MIN(
      CASE WHEN
        {% condition event2 %} SUBSTRING(cmd, POSITION('/placeholder_command ' IN cmd), 99999) {% endcondition %}
        THEN dcos_cli.received_at
        ELSE NULL END
      ) as event2_time
  , MIN(
      CASE WHEN
        {% condition event3 %} SUBSTRING(cmd, POSITION('/placeholder_command ' IN cmd), 99999) {% endcondition %}
        THEN dcos_cli.received_at
        ELSE NULL END
      ) as event3_time
FROM dcos.tracks as tracks
LEFT JOIN dcos.dcos_cli as dcos_cli
  ON coalesce(tracks.anonymous_id, tracks.event_id, tracks.user_id) = coalesce(dcos_cli.anonymous_id, dcos_cli.event_id, dcos_cli.user_id)
LEFT JOIN ${aliases_mapping.SQL_TABLE_NAME} as aliases_mapping
  ON aliases_mapping.alias = coalesce(tracks.user_id, tracks.anonymous_id)
LEFT JOIN ${track_facts.SQL_TABLE_NAME} as tracks_sessions_map
  ON tracks.event_id = tracks_sessions_map.event_id
LEFT JOIN ${sessions_trk.SQL_TABLE_NAME} as sessions
  ON tracks_sessions_map.session_id = sessions.session_id
GROUP BY 1
  fields:
  - dimension: session_id
    type: string
    primary_key: true
    sql: ${TABLE}.session_id
  - dimension: event1
    type: time
    sql: ${TABLE}.event1_time
  - dimension: event2
    type: time
    sql: ${TABLE}.event2_time
  - dimension: event3
    type: time
    sql: ${TABLE}.event3_time
  - dimension: event1_before_event2
    type: yesno
    sql: ${event1_time} < ${event2_time}
  - dimension: event2_before_event3
    type: yesno
    sql: ${event2_time} < ${event3_time}
  - measure: count_sessions
    type: count
  - measure: count_sessions_event1
    type: count
    filters:
    - event1_time: NOT NULL
  - measure: count_sessions_event12
    type: count
    filters:
    - event1_time: NOT NULL
    - event2_time: NOT NULL
    - event1_before_event2: True
  - measure: count_sessions_event123
    type: count
    filters:
    - event1_time: NOT NULL
    - event2_time: NOT NULL
    - event3_time: NOT NULL
    - event1_before_event2: True
    - event2_before_event3: True

Contents

  • funnel_explorer.sql
  • funnel_explorer.sql
  • funnel_explorer.view.lkml
  • funnel_explorer.view.lookml