SQL Data analytics

Daily Alert

Daily Alert model for data analytics.

source-preserved

Blocks

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

SELECT d.accountid, d.usersvehicleid, d.yearmakemodel, pm.groupid, pm.description, NVL2(calbat,calbat,0)+NVL2(atbat,atbat,0) AS battery, NVL2(fault,fault,0) AS fault, (CASE WHEN faultcode IS NULL THEN 'No Fault Decoded' ELSE REPLACE(faultcode,'type=OBDII mil=1 ','') END) AS faultcode
FROM (SELECT accountid, deviceidint, usersvehicleid, yearmakemodel FROM Device d, vehicle_tbl v WHERE v.name=d.deviceid) d
LEFT JOIN (SELECT e.deviceidint, COUNT(*) AS calbat
  FROM (SELECT deviceidint, daystart FROM daily_summary WHERE daystart>= EXTRACT(EPOCH FROM dateadd(d,-1,current_date))) ds INNER JOIN
  (SELECT deviceidint FROM Device WHERE devicecode='calamp') d  ON d.deviceidint=ds.deviceidint,
  eventdata e
  WHERE d.deviceidint=e.deviceidint and
  e.timestamp>daystart and vbatteryvolts<=9.usage_threshold_miles and vbatteryvolts>7.0 and   inputmask=0 and statuscode=62498
  GROUP BY e.deviceidint) cal ON cal.deviceidint=d.deviceidint
LEFT JOIN (SELECT e.deviceidint, COUNT(*) AS fault
  FROM (SELECT deviceidint, daystart FROM daily_summary WHERE daystart>= EXTRACT(EPOCH FROM dateadd(d,-1,current_date))) ds
  INNER JOIN eventdata e ON ds.deviceidint=e.deviceidint
  WHERE
  e.timestamp>daystart and statusCode IN (63761,6376usage_threshold_miles)
  GROUP BY e.deviceidint) fault ON fault.deviceidint=d.deviceidint
 LEFT JOIN (SELECT DISTINCT e.deviceidint, e.faultcode
  FROM (SELECT deviceidint, daystart FROM daily_summary WHERE daystart>= EXTRACT(EPOCH FROM dateadd(d,-1,current_date))) ds
  INNER JOIN eventdata e ON ds.deviceidint=e.deviceidint
  WHERE
  e.timestamp>daystart and statusCode IN (63761,6376usage_threshold_miles) and faultcode LIKE '%mil=1%') fcode ON fcode.deviceidint=d.deviceidint

LEFT JOIN (SELECT e.deviceidint, COUNT(*) AS atbat
  FROM (SELECT deviceidint, daystart FROM daily_summary WHERE daystart>= EXTRACT(EPOCH FROM dateadd(d,-1,current_date))) ds INNER JOIN
  (SELECT deviceidint FROM Device WHERE devicecode='atrack') d ON d.deviceidint=ds.deviceidint,
  eventdata e
  WHERE d.deviceidint=e.deviceidint and
  e.timestamp>daystart and statusCode=64784
  GROUP BY e.deviceidint) bat ON bat.deviceidint=d.deviceidint
RIGHT JOIN (SELECT l.accountid, l.deviceidint, g.groupid, g.description
    FROM DeviceList l, DeviceGroup g
    WHERE g.groupidint=l.groupidint and (l.groupid LIKE 'pm_location_group_id%')) pm ON pm.deviceidint=d.deviceidint
WHERE calbat>0 OR fault>0 or atbat>0

# models/schema.yml
version: 2

models:
  - name: daily_alert
    columns:
      - name: accountid
      - name: usersvehicleid
        description: "Unit Number From Company Platform"
      - name: yearmakemodel
        description: "Equipment Type Listed in Company Platform"
      - name: groupid
      - name: description
        description: "PM Location Group ID in Company Platform"
      - name: battery
      - name: low_battery_registered
        description: "If Low Battery Registered Then 1 Else 0"
      - name: faultcode
      - name: fault
      - name: fault_registered
        description: "If Fault Registered Then 1 Else 0"

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.
daily_alert.sql · 32 lines
source-preserved validation: not checked
SELECT d.accountid, d.usersvehicleid, d.yearmakemodel, pm.groupid, pm.description, NVL2(calbat,calbat,0)+NVL2(atbat,atbat,0) AS battery, NVL2(fault,fault,0) AS fault, (CASE WHEN faultcode IS NULL THEN 'No Fault Decoded' ELSE REPLACE(faultcode,'type=OBDII mil=1 ','') END) AS faultcode
FROM (SELECT accountid, deviceidint, usersvehicleid, yearmakemodel FROM Device d, vehicle_tbl v WHERE v.name=d.deviceid) d
LEFT JOIN (SELECT e.deviceidint, COUNT(*) AS calbat
  FROM (SELECT deviceidint, daystart FROM daily_summary WHERE daystart>= EXTRACT(EPOCH FROM dateadd(d,-1,current_date))) ds INNER JOIN
  (SELECT deviceidint FROM Device WHERE devicecode='calamp') d  ON d.deviceidint=ds.deviceidint,
  eventdata e
  WHERE d.deviceidint=e.deviceidint and
  e.timestamp>daystart and vbatteryvolts<=9.usage_threshold_miles and vbatteryvolts>7.0 and   inputmask=0 and statuscode=62498
  GROUP BY e.deviceidint) cal ON cal.deviceidint=d.deviceidint
LEFT JOIN (SELECT e.deviceidint, COUNT(*) AS fault
  FROM (SELECT deviceidint, daystart FROM daily_summary WHERE daystart>= EXTRACT(EPOCH FROM dateadd(d,-1,current_date))) ds
  INNER JOIN eventdata e ON ds.deviceidint=e.deviceidint
  WHERE
  e.timestamp>daystart and statusCode IN (63761,6376usage_threshold_miles)
  GROUP BY e.deviceidint) fault ON fault.deviceidint=d.deviceidint
 LEFT JOIN (SELECT DISTINCT e.deviceidint, e.faultcode
  FROM (SELECT deviceidint, daystart FROM daily_summary WHERE daystart>= EXTRACT(EPOCH FROM dateadd(d,-1,current_date))) ds
  INNER JOIN eventdata e ON ds.deviceidint=e.deviceidint
  WHERE
  e.timestamp>daystart and statusCode IN (63761,6376usage_threshold_miles) and faultcode LIKE '%mil=1%') fcode ON fcode.deviceidint=d.deviceidint

LEFT JOIN (SELECT e.deviceidint, COUNT(*) AS atbat
  FROM (SELECT deviceidint, daystart FROM daily_summary WHERE daystart>= EXTRACT(EPOCH FROM dateadd(d,-1,current_date))) ds INNER JOIN
  (SELECT deviceidint FROM Device WHERE devicecode='atrack') d ON d.deviceidint=ds.deviceidint,
  eventdata e
  WHERE d.deviceidint=e.deviceidint and
  e.timestamp>daystart and statusCode=64784
  GROUP BY e.deviceidint) bat ON bat.deviceidint=d.deviceidint
RIGHT JOIN (SELECT l.accountid, l.deviceidint, g.groupid, g.description
    FROM DeviceList l, DeviceGroup g
    WHERE g.groupidint=l.groupidint and (l.groupid LIKE 'pm_location_group_id%')) pm ON pm.deviceidint=d.deviceidint
WHERE calbat>0 OR fault>0 or atbat>0
daily_alert.view.lkml · 118 lines
inferred
view: daily_alert {
  derived_table: {
    sql: SELECT d.accountid, d.usersvehicleid, d.yearmakemodel, pm.groupid, pm.description, NVL2(calbat,calbat,0)+NVL2(atbat,atbat,0) AS battery, NVL2(fault,fault,0) AS fault, (CASE WHEN faultcode IS NULL THEN 'No Fault Decoded' ELSE REPLACE(faultcode,'type=OBDII mil=1 ','') END) AS faultcode
FROM (SELECT accountid, deviceidint, usersvehicleid, yearmakemodel FROM Device d, vehicle_tbl v WHERE v.name=d.deviceid) d
LEFT JOIN (SELECT e.deviceidint, COUNT(*) AS calbat
  FROM (SELECT deviceidint, daystart FROM daily_summary WHERE daystart>= EXTRACT(EPOCH FROM dateadd(d,-1,current_date))) ds INNER JOIN
  (SELECT deviceidint FROM Device WHERE devicecode='calamp') d  ON d.deviceidint=ds.deviceidint,
  eventdata e
  WHERE d.deviceidint=e.deviceidint and
  e.timestamp>daystart and vbatteryvolts<=9.usage_threshold_miles and vbatteryvolts>7.0 and   inputmask=0 and statuscode=62498
  GROUP BY e.deviceidint) cal ON cal.deviceidint=d.deviceidint
LEFT JOIN (SELECT e.deviceidint, COUNT(*) AS fault
  FROM (SELECT deviceidint, daystart FROM daily_summary WHERE daystart>= EXTRACT(EPOCH FROM dateadd(d,-1,current_date))) ds
  INNER JOIN eventdata e ON ds.deviceidint=e.deviceidint
  WHERE
  e.timestamp>daystart and statusCode IN (63761,6376usage_threshold_miles)
  GROUP BY e.deviceidint) fault ON fault.deviceidint=d.deviceidint
 LEFT JOIN (SELECT DISTINCT e.deviceidint, e.faultcode
  FROM (SELECT deviceidint, daystart FROM daily_summary WHERE daystart>= EXTRACT(EPOCH FROM dateadd(d,-1,current_date))) ds
  INNER JOIN eventdata e ON ds.deviceidint=e.deviceidint
  WHERE
  e.timestamp>daystart and statusCode IN (63761,6376usage_threshold_miles) and faultcode LIKE '%mil=1%') fcode ON fcode.deviceidint=d.deviceidint

LEFT JOIN (SELECT e.deviceidint, COUNT(*) AS atbat
  FROM (SELECT deviceidint, daystart FROM daily_summary WHERE daystart>= EXTRACT(EPOCH FROM dateadd(d,-1,current_date))) ds INNER JOIN
  (SELECT deviceidint FROM Device WHERE devicecode='atrack') d ON d.deviceidint=ds.deviceidint,
  eventdata e
  WHERE d.deviceidint=e.deviceidint and
  e.timestamp>daystart and statusCode=64784
  GROUP BY e.deviceidint) bat ON bat.deviceidint=d.deviceidint
RIGHT JOIN (SELECT l.accountid, l.deviceidint, g.groupid, g.description
    FROM DeviceList l, DeviceGroup g
    WHERE g.groupidint=l.groupidint and (l.groupid LIKE 'pm_location_group_id%')) pm ON pm.deviceidint=d.deviceidint
WHERE calbat>0 OR fault>0 or atbat>0 ;;
  }

  dimension: accountid {
    hidden: yes
    sql: ${TABLE}.accountid ;;
  }

  dimension: usersvehicleid {
    label: "Unit Number"
    description: "Unit Number From Company Platform"
    sql: ${TABLE}.usersvehicleid ;;
  }

  dimension: yearmakemodel {
    label: "Year/Make/Model"
    description: "Equipment Type Listed in Company Platform"
    sql: ${TABLE}.yearmakemodel ;;
  }

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

  dimension: description {
    label: "PM Location"
    description: "PM Location Group ID in Company Platform"
    sql: ${TABLE}.description ;;
  }

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

  dimension: low_battery_registered {
    label: "Low Battery Registered"
    description: "If Low Battery Registered Then 1 Else 0"
    type: int
    sql: CASE
WHEN ${battery} > 0 THEN 1
ELSE 0 END ;;
  }

  dimension: faultcode {
    label: "Decoded Fault Code"
    sql: ${TABLE}.faultcode ;;
  }

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

  dimension: fault_registered {
    label: "Fault Code Registered"
    description: "If Fault Registered Then 1 Else 0"
    type: int
    sql: CASE
WHEN ${fault} > 0 THEN 1
ELSE 0 END ;;
  }

  measure: count {
    type: count
    drill_fields: [usersvehicleid, yearmakemodel, description, low_battery_registered, fault_registered]
  }

  measure: total_number_of_battery_units {
    label: "Low Battery Units Registered"
    type: sum
    drill_fields: [usersvehicleid, yearmakemodel, description, low_battery_registered, fault_registered]
    sql: ${low_battery_registered} ;;
  }

  measure: total_number_of_fault_registered {
    label: "CEL Units Registered"
    type: sum
    drill_fields: [usersvehicleid, yearmakemodel, description, low_battery_registered, fault_registered]
    sql: ${fault_registered} ;;
  }
}
daily_alert.view.lookml · 106 lines
source-preserved
- view: daily_alert
  derived_table:
    sql: SELECT d.accountid, d.usersvehicleid, d.yearmakemodel, pm.groupid, pm.description, NVL2(calbat,calbat,0)+NVL2(atbat,atbat,0) AS battery, NVL2(fault,fault,0) AS fault, (CASE WHEN faultcode IS NULL THEN 'No Fault Decoded' ELSE REPLACE(faultcode,'type=OBDII mil=1 ','') END) AS faultcode
FROM (SELECT accountid, deviceidint, usersvehicleid, yearmakemodel FROM Device d, vehicle_tbl v WHERE v.name=d.deviceid) d
LEFT JOIN (SELECT e.deviceidint, COUNT(*) AS calbat
  FROM (SELECT deviceidint, daystart FROM daily_summary WHERE daystart>= EXTRACT(EPOCH FROM dateadd(d,-1,current_date))) ds INNER JOIN
  (SELECT deviceidint FROM Device WHERE devicecode='calamp') d  ON d.deviceidint=ds.deviceidint,
  eventdata e
  WHERE d.deviceidint=e.deviceidint and
  e.timestamp>daystart and vbatteryvolts<=9.usage_threshold_miles and vbatteryvolts>7.0 and   inputmask=0 and statuscode=62498
  GROUP BY e.deviceidint) cal ON cal.deviceidint=d.deviceidint
LEFT JOIN (SELECT e.deviceidint, COUNT(*) AS fault
  FROM (SELECT deviceidint, daystart FROM daily_summary WHERE daystart>= EXTRACT(EPOCH FROM dateadd(d,-1,current_date))) ds
  INNER JOIN eventdata e ON ds.deviceidint=e.deviceidint
  WHERE
  e.timestamp>daystart and statusCode IN (63761,6376usage_threshold_miles)
  GROUP BY e.deviceidint) fault ON fault.deviceidint=d.deviceidint
 LEFT JOIN (SELECT DISTINCT e.deviceidint, e.faultcode
  FROM (SELECT deviceidint, daystart FROM daily_summary WHERE daystart>= EXTRACT(EPOCH FROM dateadd(d,-1,current_date))) ds
  INNER JOIN eventdata e ON ds.deviceidint=e.deviceidint
  WHERE
  e.timestamp>daystart and statusCode IN (63761,6376usage_threshold_miles) and faultcode LIKE '%mil=1%') fcode ON fcode.deviceidint=d.deviceidint

LEFT JOIN (SELECT e.deviceidint, COUNT(*) AS atbat
  FROM (SELECT deviceidint, daystart FROM daily_summary WHERE daystart>= EXTRACT(EPOCH FROM dateadd(d,-1,current_date))) ds INNER JOIN
  (SELECT deviceidint FROM Device WHERE devicecode='atrack') d ON d.deviceidint=ds.deviceidint,
  eventdata e
  WHERE d.deviceidint=e.deviceidint and
  e.timestamp>daystart and statusCode=64784
  GROUP BY e.deviceidint) bat ON bat.deviceidint=d.deviceidint
RIGHT JOIN (SELECT l.accountid, l.deviceidint, g.groupid, g.description
    FROM DeviceList l, DeviceGroup g
    WHERE g.groupidint=l.groupidint and (l.groupid LIKE 'pm_location_group_id%')) pm ON pm.deviceidint=d.deviceidint
WHERE calbat>0 OR fault>0 or atbat>0
  fields:
  - dimension: accountid
    hidden: true
    sql: ${TABLE}.accountid
  - dimension: usersvehicleid
    label: Unit Number
    description: Unit Number From Company Platform
    sql: ${TABLE}.usersvehicleid
  - dimension: yearmakemodel
    label: Year/Make/Model
    description: Equipment Type Listed in Company Platform
    sql: ${TABLE}.yearmakemodel
  - dimension: groupid
    hidden: true
    sql: ${TABLE}.groupid
  - dimension: description
    label: PM Location
    description: PM Location Group ID in Company Platform
    sql: ${TABLE}.description
  - dimension: battery
    type: number
    hidden: true
    sql: ${TABLE}.battery
  - dimension: low_battery_registered
    type: int
    label: Low Battery Registered
    description: If Low Battery Registered Then 1 Else 0
    sql: CASE
WHEN ${battery} > 0 THEN 1
ELSE 0 END
  - dimension: faultcode
    label: Decoded Fault Code
    sql: ${TABLE}.faultcode
  - dimension: fault
    type: number
    hidden: true
    sql: ${TABLE}.fault
  - dimension: fault_registered
    type: int
    label: Fault Code Registered
    description: If Fault Registered Then 1 Else 0
    sql: CASE
WHEN ${fault} > 0 THEN 1
ELSE 0 END
  - measure: count
    type: count
    drill_fields:
    - usersvehicleid
    - yearmakemodel
    - description
    - low_battery_registered
    - fault_registered
  - measure: total_number_of_battery_units
    type: sum
    label: Low Battery Units Registered
    drill_fields:
    - usersvehicleid
    - yearmakemodel
    - description
    - low_battery_registered
    - fault_registered
    sql: ${low_battery_registered}
  - measure: total_number_of_fault_registered
    type: sum
    label: CEL Units Registered
    drill_fields:
    - usersvehicleid
    - yearmakemodel
    - description
    - low_battery_registered
    - fault_registered
    sql: ${fault_registered}

Contents

  • daily_alert.sql
  • daily_alert.sql
  • daily_alert.view.lkml
  • daily_alert.view.lookml