SQL Subscription fitness

Spot Management

Spot Management model for subscription fitness.

source-preserved

Blocks

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

SELECT
    cc.venue_id,
    cv.venue_name,
    cv.venue_subtitle,
    cv.partner_id,
    MAX(DATE(uml.created_on)) as week_ending_on,
    COUNT( DISTINCT uml.user_id) as venue_users_making_changes,
    COUNT( DISTINCT cc.venue_id) as venues_making_changes,
    COUNT(uml.id) as number_of_updates,
    SUM(CASE WHEN uml.spots > uml.previous_spots THEN 1 ELSE 0 END) as spot_change,
    COUNT(*) as count,
    SUM(uml.spots) as spots,
    SUM(uml.previous_spots) as previous_spots,
    SUM(uml.spots_this_week) as spots_this_week,
    SUM(uml.previous_spots_this_week) as previous_spots_this_week,
    SUM(uml.spots_next_month) as spots_next_month,
    SUM(uml.previous_spots_month) as previous_spots_month,
    SUM(CASE WHEN uml.spots > uml.previous_spots THEN 1 ELSE 0 END) / COUNT(*) as percent_that_increased,
    SUM( uml.spots - uml.previous_spots ) as net_instance,
    SUM( uml.spots_this_week - uml.previous_spots_this_week ) as net_week,
    SUM( uml.spots_next_month - uml.previous_spots_month ) as net_month,
    COUNT(DISTINCT cc.class_id) as classes_affected,
    COUNT(DISTINCT cct.id) as schedules_affected,
    SUM(CASE WHEN uml.disabled_status = 'instance_enabled' THEN 1 ELSE 0 END) as number_of_instances_enabled,
    SUM(CASE WHEN uml.update_type = 'instance' THEN 1 ELSE 0 END) as number_of_instances_updated,
    SUM(CASE WHEN uml.update_type = 'all_future' THEN 1 ELSE 0 END) as number_of_all_future_classes_updated
FROM user_managespots_log uml
    JOIN activity_classes_timetable cct ON cct.id = uml.schedule_id
    JOIN activity_classes cc ON cc.class_id = cct.class_id
    JOIN activity_venues cv ON cv.venue_id = cc.venue_id
WHERE
cc.venue_id IN
(
    SELECT DISTINCT vpx.venue_id
    FROM vp_user vpu
    JOIN vp_user_venue_xref vpx ON vpx.`venue_user_id` = vpu.user_id
    JOIN user_activityuser u ON u.id = vpu.user_id
    WHERE vpu.is_managespots = 1
)
AND cc.venue_id NOT IN (<% parameter venue_id_placeholder %>)
AND uml.previous_spots IS NOT NULL
GROUP BY WEEK(uml.created_on), cc.venue_id

# models/schema.yml
version: 2

models:
  - name: spot_management
    columns:
      - name: venue_id
      - name: venue_name
      - name: venue_subtitle
      - name: partner_id
      - name: week_ending_on
      - name: venue_users_making_changes
      - name: venues_making_changes
      - name: number_of_updates
      - name: spot_change
      - name: count
      - name: percent_that_increased
      - name: net_instance
      - name: net_week
      - name: net_month
      - name: classes_affected
      - name: schedules_affected
      - name: number_of_instances_enabled
      - name: number_of_instances_updated
      - name: number_of_all_future_classes_updated

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.
spot_management.sql · 42 lines
source-preserved validation: not checked
SELECT
    cc.venue_id,
    cv.venue_name,
    cv.venue_subtitle,
    cv.partner_id,
    MAX(DATE(uml.created_on)) as week_ending_on,
    COUNT( DISTINCT uml.user_id) as venue_users_making_changes,
    COUNT( DISTINCT cc.venue_id) as venues_making_changes,
    COUNT(uml.id) as number_of_updates,
    SUM(CASE WHEN uml.spots > uml.previous_spots THEN 1 ELSE 0 END) as spot_change,
    COUNT(*) as count,
    SUM(uml.spots) as spots,
    SUM(uml.previous_spots) as previous_spots,
    SUM(uml.spots_this_week) as spots_this_week,
    SUM(uml.previous_spots_this_week) as previous_spots_this_week,
    SUM(uml.spots_next_month) as spots_next_month,
    SUM(uml.previous_spots_month) as previous_spots_month,
    SUM(CASE WHEN uml.spots > uml.previous_spots THEN 1 ELSE 0 END) / COUNT(*) as percent_that_increased,
    SUM( uml.spots - uml.previous_spots ) as net_instance,
    SUM( uml.spots_this_week - uml.previous_spots_this_week ) as net_week,
    SUM( uml.spots_next_month - uml.previous_spots_month ) as net_month,
    COUNT(DISTINCT cc.class_id) as classes_affected,
    COUNT(DISTINCT cct.id) as schedules_affected,
    SUM(CASE WHEN uml.disabled_status = 'instance_enabled' THEN 1 ELSE 0 END) as number_of_instances_enabled,
    SUM(CASE WHEN uml.update_type = 'instance' THEN 1 ELSE 0 END) as number_of_instances_updated,
    SUM(CASE WHEN uml.update_type = 'all_future' THEN 1 ELSE 0 END) as number_of_all_future_classes_updated
FROM user_managespots_log uml
    JOIN activity_classes_timetable cct ON cct.id = uml.schedule_id
    JOIN activity_classes cc ON cc.class_id = cct.class_id
    JOIN activity_venues cv ON cv.venue_id = cc.venue_id
WHERE
cc.venue_id IN
(
    SELECT DISTINCT vpx.venue_id
    FROM vp_user vpu
    JOIN vp_user_venue_xref vpx ON vpx.`venue_user_id` = vpu.user_id
    JOIN user_activityuser u ON u.id = vpu.user_id
    WHERE vpu.is_managespots = 1
)
AND cc.venue_id NOT IN (<% parameter venue_id_placeholder %>)
AND uml.previous_spots IS NOT NULL
GROUP BY WEEK(uml.created_on), cc.venue_id
spot_management.view.lkml · 234 lines
inferred
view: spot_management {
  derived_table: {
    sql: SELECT
    cc.venue_id,
    cv.venue_name,
    cv.venue_subtitle,
    cv.partner_id,
    MAX(DATE(uml.created_on)) as week_ending_on,
    COUNT( DISTINCT uml.user_id) as venue_users_making_changes,
    COUNT( DISTINCT cc.venue_id) as venues_making_changes,
    COUNT(uml.id) as number_of_updates,
    SUM(CASE WHEN uml.spots > uml.previous_spots THEN 1 ELSE 0 END) as spot_change,
    COUNT(*) as count,
    SUM(uml.spots) as spots,
    SUM(uml.previous_spots) as previous_spots,
    SUM(uml.spots_this_week) as spots_this_week,
    SUM(uml.previous_spots_this_week) as previous_spots_this_week,
    SUM(uml.spots_next_month) as spots_next_month,
    SUM(uml.previous_spots_month) as previous_spots_month,
    SUM(CASE WHEN uml.spots > uml.previous_spots THEN 1 ELSE 0 END) / COUNT(*) as percent_that_increased,
    SUM( uml.spots - uml.previous_spots ) as net_instance,
    SUM( uml.spots_this_week - uml.previous_spots_this_week ) as net_week,
    SUM( uml.spots_next_month - uml.previous_spots_month ) as net_month,
    COUNT(DISTINCT cc.class_id) as classes_affected,
    COUNT(DISTINCT cct.id) as schedules_affected,
    SUM(CASE WHEN uml.disabled_status = 'instance_enabled' THEN 1 ELSE 0 END) as number_of_instances_enabled,
    SUM(CASE WHEN uml.update_type = 'instance' THEN 1 ELSE 0 END) as number_of_instances_updated,
    SUM(CASE WHEN uml.update_type = 'all_future' THEN 1 ELSE 0 END) as number_of_all_future_classes_updated
FROM user_managespots_log uml
    JOIN activity_classes_timetable cct ON cct.id = uml.schedule_id
    JOIN activity_classes cc ON cc.class_id = cct.class_id
    JOIN activity_venues cv ON cv.venue_id = cc.venue_id
WHERE
cc.venue_id IN
(
    SELECT DISTINCT vpx.venue_id
    FROM vp_user vpu
    JOIN vp_user_venue_xref vpx ON vpx.`venue_user_id` = vpu.user_id
    JOIN user_activityuser u ON u.id = vpu.user_id
    WHERE vpu.is_managespots = 1
)
AND cc.venue_id NOT IN (<% parameter venue_id_placeholder %>)
AND uml.previous_spots IS NOT NULL
GROUP BY WEEK(uml.created_on), cc.venue_id ;;
  }

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

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

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

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

  dimension: week_ending_on {
    type: time
    sql: ${TABLE}.week_ending_on ;;
  }

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

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

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

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

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

  dimension: percent_that_increased {
    type: number
    value_format: "0.0%"
    sql: ${TABLE}.percent_that_increased ;;
  }

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

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

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

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

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

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

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

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

  measure: total_venue_users_making_changes {
    type: sum
    sql: ${TABLE}.venue_users_making_changes ;;
  }

  measure: total_venues_making_changes {
    type: sum
    sql: ${TABLE}.venues_making_changes ;;
  }

  measure: total_number_of_updates {
    type: sum
    sql: ${TABLE}.number_of_updates ;;
  }

  measure: total_spot_change {
    type: sum
    sql: ${TABLE}.spot_change ;;
  }

  measure: total_count {
    type: sum
    sql: ${TABLE}.count ;;
  }

  measure: spots {
    type: sum
    sql: ${TABLE}.spots ;;
  }

  measure: previous_spots {
    type: sum
    sql: ${TABLE}.previous_spots ;;
  }

  measure: spots_this_week {
    type: sum
    sql: ${TABLE}.spots_this_week ;;
  }

  measure: previous_spots_this_week {
    type: sum
    sql: ${TABLE}.previous_spots_this_week ;;
  }

  measure: spots_next_month {
    type: sum
    sql: ${TABLE}.spots_next_month ;;
  }

  measure: previous_spots_month {
    type: sum
    sql: ${TABLE}.previous_spots_month ;;
  }

  measure: total_percent_that_increased {
    type: number
    value_format: "0.0%"
    sql: ${spot_management.total_spot_change} / ${spot_management.total_count} ;;
  }

  measure: total_net_instance {
    type: sum
    sql: ${TABLE}.net_instance ;;
  }

  measure: total_net_week {
    type: sum
    sql: ${TABLE}.net_week ;;
  }

  measure: total_classes_affected {
    type: sum
    sql: ${TABLE}.classes_affected ;;
  }

  measure: total_schedules_affected {
    type: sum
    sql: ${TABLE}.schedules_affected ;;
  }

  measure: total_number_of_instances_enabled {
    type: sum
    sql: ${TABLE}.number_of_instances_enabled ;;
  }

  measure: total_number_of_instances_updated {
    type: sum
    sql: ${TABLE}.number_of_instances_updated ;;
  }

  measure: total_number_of_all_future_classes_updated {
    type: sum
    sql: ${TABLE}.number_of_all_future_classes_updated ;;
  }
}
spot_management.view.lookml · 157 lines
source-preserved
- view: spot_management
  derived_table:
    sql: SELECT
    cc.venue_id,
    cv.venue_name,
    cv.venue_subtitle,
    cv.partner_id,
    MAX(DATE(uml.created_on)) as week_ending_on,
    COUNT( DISTINCT uml.user_id) as venue_users_making_changes,
    COUNT( DISTINCT cc.venue_id) as venues_making_changes,
    COUNT(uml.id) as number_of_updates,
    SUM(CASE WHEN uml.spots > uml.previous_spots THEN 1 ELSE 0 END) as spot_change,
    COUNT(*) as count,
    SUM(uml.spots) as spots,
    SUM(uml.previous_spots) as previous_spots,
    SUM(uml.spots_this_week) as spots_this_week,
    SUM(uml.previous_spots_this_week) as previous_spots_this_week,
    SUM(uml.spots_next_month) as spots_next_month,
    SUM(uml.previous_spots_month) as previous_spots_month,
    SUM(CASE WHEN uml.spots > uml.previous_spots THEN 1 ELSE 0 END) / COUNT(*) as percent_that_increased,
    SUM( uml.spots - uml.previous_spots ) as net_instance,
    SUM( uml.spots_this_week - uml.previous_spots_this_week ) as net_week,
    SUM( uml.spots_next_month - uml.previous_spots_month ) as net_month,
    COUNT(DISTINCT cc.class_id) as classes_affected,
    COUNT(DISTINCT cct.id) as schedules_affected,
    SUM(CASE WHEN uml.disabled_status = 'instance_enabled' THEN 1 ELSE 0 END) as number_of_instances_enabled,
    SUM(CASE WHEN uml.update_type = 'instance' THEN 1 ELSE 0 END) as number_of_instances_updated,
    SUM(CASE WHEN uml.update_type = 'all_future' THEN 1 ELSE 0 END) as number_of_all_future_classes_updated
FROM user_managespots_log uml
    JOIN activity_classes_timetable cct ON cct.id = uml.schedule_id
    JOIN activity_classes cc ON cc.class_id = cct.class_id
    JOIN activity_venues cv ON cv.venue_id = cc.venue_id
WHERE
cc.venue_id IN
(
    SELECT DISTINCT vpx.venue_id
    FROM vp_user vpu
    JOIN vp_user_venue_xref vpx ON vpx.`venue_user_id` = vpu.user_id
    JOIN user_activityuser u ON u.id = vpu.user_id
    WHERE vpu.is_managespots = 1
)
AND cc.venue_id NOT IN (<% parameter venue_id_placeholder %>)
AND uml.previous_spots IS NOT NULL
GROUP BY WEEK(uml.created_on), cc.venue_id
  fields:
  - dimension: venue_id
    sql: ${TABLE}.venue_id
  - dimension: venue_name
    sql: ${TABLE}.venue_name
  - dimension: venue_subtitle
    sql: ${TABLE}.venue_subtitle
  - dimension: partner_id
    type: number
    sql: ${TABLE}.partner_id
  - dimension: week_ending_on
    type: time
    sql: ${TABLE}.week_ending_on
  - dimension: venue_users_making_changes
    type: number
    sql: ${TABLE}.venue_users_making_changes
  - dimension: venues_making_changes
    type: number
    sql: ${TABLE}.venues_making_changes
  - dimension: number_of_updates
    type: number
    sql: ${TABLE}.number_of_updates
  - dimension: spot_change
    type: number
    sql: ${TABLE}.spot_change
  - dimension: count
    type: number
    sql: ${TABLE}.count
  - dimension: percent_that_increased
    type: number
    value_format: '0.0%'
    sql: ${TABLE}.percent_that_increased
  - dimension: net_instance
    type: number
    sql: ${TABLE}.net_instance
  - dimension: net_week
    type: number
    sql: ${TABLE}.net_week
  - dimension: net_month
    sql: ${TABLE}.net_month
  - dimension: classes_affected
    type: number
    sql: ${TABLE}.classes_affected
  - dimension: schedules_affected
    type: number
    sql: ${TABLE}.schedules_affected
  - dimension: number_of_instances_enabled
    type: number
    sql: ${TABLE}.number_of_instances_enabled
  - dimension: number_of_instances_updated
    type: number
    sql: ${TABLE}.number_of_instances_updated
  - dimension: number_of_all_future_classes_updated
    type: number
    sql: ${TABLE}.number_of_all_future_classes_updated
  - measure: total_venue_users_making_changes
    type: sum
    sql: ${TABLE}.venue_users_making_changes
  - measure: total_venues_making_changes
    type: sum
    sql: ${TABLE}.venues_making_changes
  - measure: total_number_of_updates
    type: sum
    sql: ${TABLE}.number_of_updates
  - measure: total_spot_change
    type: sum
    sql: ${TABLE}.spot_change
  - measure: total_count
    type: sum
    sql: ${TABLE}.count
  - measure: spots
    type: sum
    sql: ${TABLE}.spots
  - measure: previous_spots
    type: sum
    sql: ${TABLE}.previous_spots
  - measure: spots_this_week
    type: sum
    sql: ${TABLE}.spots_this_week
  - measure: previous_spots_this_week
    type: sum
    sql: ${TABLE}.previous_spots_this_week
  - measure: spots_next_month
    type: sum
    sql: ${TABLE}.spots_next_month
  - measure: previous_spots_month
    type: sum
    sql: ${TABLE}.previous_spots_month
  - measure: total_percent_that_increased
    type: number
    value_format: '0.0%'
    sql: ${spot_management.total_spot_change} / ${spot_management.total_count}
  - measure: total_net_instance
    type: sum
    sql: ${TABLE}.net_instance
  - measure: total_net_week
    type: sum
    sql: ${TABLE}.net_week
  - measure: total_classes_affected
    type: sum
    sql: ${TABLE}.classes_affected
  - measure: total_schedules_affected
    type: sum
    sql: ${TABLE}.schedules_affected
  - measure: total_number_of_instances_enabled
    type: sum
    sql: ${TABLE}.number_of_instances_enabled
  - measure: total_number_of_instances_updated
    type: sum
    sql: ${TABLE}.number_of_instances_updated
  - measure: total_number_of_all_future_classes_updated
    type: sum
    sql: ${TABLE}.number_of_all_future_classes_updated

Contents

  • spot_management.sql
  • spot_management.sql
  • spot_management.view.lkml
  • spot_management.view.lookml