SQL Data analytics

Vehicle Daily View

Vehicle Daily View model for data analytics.

source-preserved

Blocks

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

SELECT a.dayofyear, a.year, a.month, v.usersvehicleid, a.available, v.name, CAST(a.mappingdate AS DATE) AS mappingdate, EXTRACT(DAYOFWEEK FROM CAST(a.mappingdate AS DATE)) AS dayname, e.enginehours, f.groupid
FROM
(SELECT vd.usersvehicleid, v.name, (case when vd.tot>1 then (case when devicecode LIKE 'A%' then 0 else v.vehicleid end) else v.vehicleid end) AS vehicleid FROM
(SELECT usersvehicleid, COUNT(*) AS tot FROM vehicle_tbl GROUP BY usersvehicleid) vd LEFT JOIN
(SELECT v.usersvehicleid, v.name, v.vehicleid, v.devicecode FROM vehicle_tbl v, device d WHERE d.deviceid=v.name and d.lasttotalconnecttime>0) v ON v.usersvehicleid=vd.usersvehicleid WHERE (case when vd.tot>1 then (case when devicecode LIKE 'A%' then 0 else v.vehicleid end) else v.vehicleid end)>0) v
INNER JOIN workorder_avail a ON v.usersvehicleid=a.unit_number LEFT JOIN
(SELECT
      v.vehicleid AS deviceid,
      SUM(enginehours) AS enginehours,
      EXTRACT(DAYOFYEAR FROM DATE(CONVERT_TIMEZONE('GMT','CST',dateadd(s,e.occurencedate,'1970-01-01')))) AS dayofy
      FROM
      engine_hours_tbl m,
      vehicle_tbl v,
      event_tbl e
      WHERE
      m.eventid=e.eventid and
      v.vehicleid=e.vehicleid and
      e.occurencedate < (SELECT extract(EPOCH FROM CONVERT_TIMEZONE('US/Central','GMT',current_date))) and
      e.occurencedate > (SELECT extract(EPOCH FROM CONVERT_TIMEZONE('US/Central','GMT',dateadd(d,-7usage_threshold_miles,current_date))))
      GROUP BY deviceid, dayofy) e ON  e.deviceid=v.vehicleid and a.dayofyear=e.dayofy LEFT JOIN {{ ref('device_firstinstalled') }} AS f ON f.deviceid=v.vehicleid
WHERE CAST(a.mappingdate AS DATE) > f.mindate and a.dayofyear <> 133
ORDER BY mappingdate, usersvehicleid

# models/schema.yml
version: 2

models:
  - name: vehicle_daily_view
    columns:
      - name: dayofyear
      - name: year
      - name: month
      - name: usersvehicleid
        description: "Your Company Listed Unit Number"
      - name: available
      - name: name
      - name: groupid
      - name: mappingdate
      - name: dayname
      - name: enginehours
      - name: weekend
      - name: units_available
      - name: dayused
      - name: daily_fleet
      - name: daily_fleet_avail
      - name: daily_fleet_used

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.
vehicle_daily_view.sql · 22 lines
source-preserved validation: not checked
SELECT a.dayofyear, a.year, a.month, v.usersvehicleid, a.available, v.name, CAST(a.mappingdate AS DATE) AS mappingdate, EXTRACT(DAYOFWEEK FROM CAST(a.mappingdate AS DATE)) AS dayname, e.enginehours, f.groupid
FROM
(SELECT vd.usersvehicleid, v.name, (case when vd.tot>1 then (case when devicecode LIKE 'A%' then 0 else v.vehicleid end) else v.vehicleid end) AS vehicleid FROM
(SELECT usersvehicleid, COUNT(*) AS tot FROM vehicle_tbl GROUP BY usersvehicleid) vd LEFT JOIN
(SELECT v.usersvehicleid, v.name, v.vehicleid, v.devicecode FROM vehicle_tbl v, device d WHERE d.deviceid=v.name and d.lasttotalconnecttime>0) v ON v.usersvehicleid=vd.usersvehicleid WHERE (case when vd.tot>1 then (case when devicecode LIKE 'A%' then 0 else v.vehicleid end) else v.vehicleid end)>0) v
INNER JOIN workorder_avail a ON v.usersvehicleid=a.unit_number LEFT JOIN
(SELECT
      v.vehicleid AS deviceid,
      SUM(enginehours) AS enginehours,
      EXTRACT(DAYOFYEAR FROM DATE(CONVERT_TIMEZONE('GMT','CST',dateadd(s,e.occurencedate,'1970-01-01')))) AS dayofy
      FROM
      engine_hours_tbl m,
      vehicle_tbl v,
      event_tbl e
      WHERE
      m.eventid=e.eventid and
      v.vehicleid=e.vehicleid and
      e.occurencedate < (SELECT extract(EPOCH FROM CONVERT_TIMEZONE('US/Central','GMT',current_date))) and
      e.occurencedate > (SELECT extract(EPOCH FROM CONVERT_TIMEZONE('US/Central','GMT',dateadd(d,-7usage_threshold_miles,current_date))))
      GROUP BY deviceid, dayofy) e ON  e.deviceid=v.vehicleid and a.dayofyear=e.dayofy LEFT JOIN ${device_firstinstalled.SQL_TABLE_NAME} AS f ON f.deviceid=v.vehicleid
WHERE CAST(a.mappingdate AS DATE) > f.mindate and a.dayofyear <> 133
ORDER BY mappingdate, usersvehicleid
vehicle_daily_view.view.lkml · 150 lines
inferred
view: vehicle_daily_view {
  derived_table: {
    sql: SELECT a.dayofyear, a.year, a.month, v.usersvehicleid, a.available, v.name, CAST(a.mappingdate AS DATE) AS mappingdate, EXTRACT(DAYOFWEEK FROM CAST(a.mappingdate AS DATE)) AS dayname, e.enginehours, f.groupid
FROM
(SELECT vd.usersvehicleid, v.name, (case when vd.tot>1 then (case when devicecode LIKE 'A%' then 0 else v.vehicleid end) else v.vehicleid end) AS vehicleid FROM
(SELECT usersvehicleid, COUNT(*) AS tot FROM vehicle_tbl GROUP BY usersvehicleid) vd LEFT JOIN
(SELECT v.usersvehicleid, v.name, v.vehicleid, v.devicecode FROM vehicle_tbl v, device d WHERE d.deviceid=v.name and d.lasttotalconnecttime>0) v ON v.usersvehicleid=vd.usersvehicleid WHERE (case when vd.tot>1 then (case when devicecode LIKE 'A%' then 0 else v.vehicleid end) else v.vehicleid end)>0) v
INNER JOIN workorder_avail a ON v.usersvehicleid=a.unit_number LEFT JOIN
(SELECT
      v.vehicleid AS deviceid,
      SUM(enginehours) AS enginehours,
      EXTRACT(DAYOFYEAR FROM DATE(CONVERT_TIMEZONE('GMT','CST',dateadd(s,e.occurencedate,'1970-01-01')))) AS dayofy
      FROM
      engine_hours_tbl m,
      vehicle_tbl v,
      event_tbl e
      WHERE
      m.eventid=e.eventid and
      v.vehicleid=e.vehicleid and
      e.occurencedate < (SELECT extract(EPOCH FROM CONVERT_TIMEZONE('US/Central','GMT',current_date))) and
      e.occurencedate > (SELECT extract(EPOCH FROM CONVERT_TIMEZONE('US/Central','GMT',dateadd(d,-7usage_threshold_miles,current_date))))
      GROUP BY deviceid, dayofy) e ON  e.deviceid=v.vehicleid and a.dayofyear=e.dayofy LEFT JOIN ${device_firstinstalled.SQL_TABLE_NAME} AS f ON f.deviceid=v.vehicleid
WHERE CAST(a.mappingdate AS DATE) > f.mindate and a.dayofyear <> 133
ORDER BY mappingdate, usersvehicleid ;;
  }

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

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

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

  dimension: usersvehicleid {
    label: "Vehicle Unit Number"
    description: "Your Company Listed Unit Number"
    sql: ${TABLE}.usersvehicleid ;;
  }

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

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

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

  dimension: mappingdate {
    type: date_date
    sql: ${TABLE}.mappingdate ;;
  }

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

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

  dimension: weekend {
  }

  dimension: units_available {
  }

  dimension: dayused {
  }

  dimension: daily_fleet {
    sql: CASE
WHEN ${dayused} = 'Vehicle Used' THEN ${dayused}
WHEN ${dayused} = 'Vehicle Unused' THEN ${units_available}
ELSE ${units_available} END ;;
  }

  dimension: daily_fleet_avail {
    type: int
    sql: CASE
WHEN ${enginehours} > .usage_threshold_miles THEN 1
ELSE ${available} END ;;
  }

  dimension: daily_fleet_used {
    type: int
    sql: CASE
WHEN ${enginehours} > .usage_threshold_miles THEN 1
ELSE 0 END ;;
  }

  measure: count {
    type: count
    drill_fields: [usersvehicleid, mappingdate, units_available, dayused, enginehours]
  }

  measure: enginesum {
    type: sum
    value_format: "##.##"
    drill_fields: [usersvehicleid, mappingdate, units_available, dayused, enginehours]
    sql: ${enginehours} ;;
  }

  measure: availablesum {
    type: sum
    value_format: "#,##0"
    drill_fields: [usersvehicleid, mappingdate, units_available, dayused, enginehours]
    sql: ${daily_fleet_avail} ;;
  }

  measure: usedsum {
    type: sum
    value_format: "#,##0"
    drill_fields: [usersvehicleid, mappingdate, units_available, dayused, enginehours]
    sql: ${daily_fleet_used} ;;
  }

  measure: countdays {
    type: count_distinct
    sql: ${dayofyear} ;;
  }

  measure: vehicle_engine_hours_per_available_day {
    type: number
    sql: ROUND(${enginesum}/NULLIF(${availablesum},0),2) ;;
  }

  measure: vehicle_availability {
    type: number
    sql: ROUND(100.0*${availablesum}/NULLIF(${count},0),2) ;;
  }

  measure: vehicle_usage {
    type: number
    sql: ROUND(100.0*${usedsum}/NULLIF(${count},0),2) ;;
  }
}
vehicle_daily_view.view.lookml · 121 lines
source-preserved
- view: vehicle_daily_view
  derived_table:
    sql: SELECT a.dayofyear, a.year, a.month, v.usersvehicleid, a.available, v.name, CAST(a.mappingdate AS DATE) AS mappingdate, EXTRACT(DAYOFWEEK FROM CAST(a.mappingdate AS DATE)) AS dayname, e.enginehours, f.groupid
FROM
(SELECT vd.usersvehicleid, v.name, (case when vd.tot>1 then (case when devicecode LIKE 'A%' then 0 else v.vehicleid end) else v.vehicleid end) AS vehicleid FROM
(SELECT usersvehicleid, COUNT(*) AS tot FROM vehicle_tbl GROUP BY usersvehicleid) vd LEFT JOIN
(SELECT v.usersvehicleid, v.name, v.vehicleid, v.devicecode FROM vehicle_tbl v, device d WHERE d.deviceid=v.name and d.lasttotalconnecttime>0) v ON v.usersvehicleid=vd.usersvehicleid WHERE (case when vd.tot>1 then (case when devicecode LIKE 'A%' then 0 else v.vehicleid end) else v.vehicleid end)>0) v
INNER JOIN workorder_avail a ON v.usersvehicleid=a.unit_number LEFT JOIN
(SELECT
      v.vehicleid AS deviceid,
      SUM(enginehours) AS enginehours,
      EXTRACT(DAYOFYEAR FROM DATE(CONVERT_TIMEZONE('GMT','CST',dateadd(s,e.occurencedate,'1970-01-01')))) AS dayofy
      FROM
      engine_hours_tbl m,
      vehicle_tbl v,
      event_tbl e
      WHERE
      m.eventid=e.eventid and
      v.vehicleid=e.vehicleid and
      e.occurencedate < (SELECT extract(EPOCH FROM CONVERT_TIMEZONE('US/Central','GMT',current_date))) and
      e.occurencedate > (SELECT extract(EPOCH FROM CONVERT_TIMEZONE('US/Central','GMT',dateadd(d,-7usage_threshold_miles,current_date))))
      GROUP BY deviceid, dayofy) e ON  e.deviceid=v.vehicleid and a.dayofyear=e.dayofy LEFT JOIN ${device_firstinstalled.SQL_TABLE_NAME} AS f ON f.deviceid=v.vehicleid
WHERE CAST(a.mappingdate AS DATE) > f.mindate and a.dayofyear <> 133
ORDER BY mappingdate, usersvehicleid
  fields:
  - dimension: dayofyear
    type: number
    sql: ${TABLE}.dayofyear
  - dimension: year
    type: number
    sql: ${TABLE}.year
  - dimension: month
    type: number
    sql: ${TABLE}.month
  - dimension: usersvehicleid
    label: Vehicle Unit Number
    description: Your Company Listed Unit Number
    sql: ${TABLE}.usersvehicleid
  - dimension: available
    type: number
    sql: ${TABLE}.available
  - dimension: name
    sql: ${TABLE}.name
  - dimension: groupid
    sql: ${TABLE}.groupid
  - dimension: mappingdate
    type: date_date
    sql: ${TABLE}.mappingdate
  - dimension: dayname
    type: number
    sql: ${TABLE}.dayname
  - dimension: enginehours
    sql: ${TABLE}.enginehours
  - dimension: weekend
  - dimension: units_available
  - dimension: dayused
  - dimension: daily_fleet
    sql: CASE
WHEN ${dayused} = 'Vehicle Used' THEN ${dayused}
WHEN ${dayused} = 'Vehicle Unused' THEN ${units_available}
ELSE ${units_available} END
  - dimension: daily_fleet_avail
    type: int
    sql: CASE
WHEN ${enginehours} > .usage_threshold_miles THEN 1
ELSE ${available} END
  - dimension: daily_fleet_used
    type: int
    sql: CASE
WHEN ${enginehours} > .usage_threshold_miles THEN 1
ELSE 0 END
  - measure: count
    type: count
    drill_fields:
    - usersvehicleid
    - mappingdate
    - units_available
    - dayused
    - enginehours
  - measure: enginesum
    type: sum
    value_format: '##.##'
    drill_fields:
    - usersvehicleid
    - mappingdate
    - units_available
    - dayused
    - enginehours
    sql: ${enginehours}
  - measure: availablesum
    type: sum
    value_format: '#,##0'
    drill_fields:
    - usersvehicleid
    - mappingdate
    - units_available
    - dayused
    - enginehours
    sql: ${daily_fleet_avail}
  - measure: usedsum
    type: sum
    value_format: '#,##0'
    drill_fields:
    - usersvehicleid
    - mappingdate
    - units_available
    - dayused
    - enginehours
    sql: ${daily_fleet_used}
  - measure: countdays
    type: count_distinct
    sql: ${dayofyear}
  - measure: vehicle_engine_hours_per_available_day
    type: number
    sql: ROUND(${enginesum}/NULLIF(${availablesum},0),2)
  - measure: vehicle_availability
    type: number
    sql: ROUND(100.0*${availablesum}/NULLIF(${count},0),2)
  - measure: vehicle_usage
    type: number
    sql: ROUND(100.0*${usedsum}/NULLIF(${count},0),2)

Contents

  • vehicle_daily_view.sql
  • vehicle_daily_view.sql
  • vehicle_daily_view.view.lkml
  • vehicle_daily_view.view.lookml