SQL
Religious org
Snapshot Table
Snapshot Table model for religious org.
source-preserved
Blocks
snapshot_table.sql · 36 lines
inferred
-- models/snapshot_table.sql
{{ config(materialized='view') }}
SELECT results.resultid
, results.resulttypeid
, 'snapshot' as table_category
, country_name
, resultdate
, resulttypename
, resultvalue
, LAG(resultvalue, 1) OVER (PARTITION BY country_name, resulttypename ORDER BY resultdate) AS lastvalue
, COALESCE(resultvalue - LAG(resultvalue, 1) OVER (PARTITION BY country_name, resulttypename ORDER BY resultdate), resultvalue) AS netresultvalue
FROM results
LEFT JOIN resulttypes ON results.resulttypeid = resulttypes.resulttypeid
LEFT JOIN projects ON results.projectid = projects.projectid
LEFT JOIN countries ON projects.countryid = countries.countryid
WHERE resulttypename IN ('Attendees Meeting','Fellowship Locations')
AND {% condition results.resultdate_date %} resultdate {% endcondition %}
ORDER BY resultdate
# models/schema.yml
version: 2
models:
- name: snapshot_table
columns:
- name: resultid
tests:
- unique
- not_null
- name: country_name
- name: resulttypeid
- name: lastvalue
- name: resulttypename
- name: resultvalue
- name: netresultvalue
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.
snapshot_table.sql · 16 lines
source-preserved
validation: not checked
SELECT results.resultid
, results.resulttypeid
, 'snapshot' as table_category
, country_name
, resultdate
, resulttypename
, resultvalue
, LAG(resultvalue, 1) OVER (PARTITION BY country_name, resulttypename ORDER BY resultdate) AS lastvalue
, COALESCE(resultvalue - LAG(resultvalue, 1) OVER (PARTITION BY country_name, resulttypename ORDER BY resultdate), resultvalue) AS netresultvalue
FROM results
LEFT JOIN resulttypes ON results.resulttypeid = resulttypes.resulttypeid
LEFT JOIN projects ON results.projectid = projects.projectid
LEFT JOIN countries ON projects.countryid = countries.countryid
WHERE resulttypename IN ('Attendees Meeting','Fellowship Locations')
AND {% condition results.resultdate_date %} resultdate {% endcondition %}
ORDER BY resultdate
snapshot_table.view.lkml · 68 lines
inferred
view: snapshot_table {
derived_table: {
sql: SELECT results.resultid
, results.resulttypeid
, 'snapshot' as table_category
, country_name
, resultdate
, resulttypename
, resultvalue
, LAG(resultvalue, 1) OVER (PARTITION BY country_name, resulttypename ORDER BY resultdate) AS lastvalue
, COALESCE(resultvalue - LAG(resultvalue, 1) OVER (PARTITION BY country_name, resulttypename ORDER BY resultdate), resultvalue) AS netresultvalue
FROM results
LEFT JOIN resulttypes ON results.resulttypeid = resulttypes.resulttypeid
LEFT JOIN projects ON results.projectid = projects.projectid
LEFT JOIN countries ON projects.countryid = countries.countryid
WHERE resulttypename IN ('Attendees Meeting','Fellowship Locations')
AND {% condition results.resultdate_date %} resultdate {% endcondition %}
ORDER BY resultdate ;;
}
dimension: resultid {
primary_key: yes
sql: ${TABLE}.resultid ;;
}
dimension: country_name {
sql: ${TABLE}.country_name ;;
}
dimension: resulttypeid {
sql: ${TABLE}.resulttypeid ;;
}
dimension: lastvalue {
type: number
sql: ${TABLE}.lastvalue ;;
}
dimension: resulttypename {
sql: ${TABLE}.resulttypename ;;
}
dimension: resultvalue {
type: number
sql: ${TABLE}.resultvalue ;;
}
dimension: netresultvalue {
type: number
sql: ${TABLE}.netresultvalue ;;
}
dimension_group: resultdate {
type: time
timeframes: [date, month, year]
sql: ${TABLE}.resultdate ;;
}
measure: count {
type: count
drill_fields: [detail*]
}
measure: total_result_value {
type: sum
sql: ${netresultvalue} ;;
}
}
snapshot_table.view.lookml · 51 lines
source-preserved
- view: snapshot_table
derived_table:
sql: SELECT results.resultid
, results.resulttypeid
, 'snapshot' as table_category
, country_name
, resultdate
, resulttypename
, resultvalue
, LAG(resultvalue, 1) OVER (PARTITION BY country_name, resulttypename ORDER BY resultdate) AS lastvalue
, COALESCE(resultvalue - LAG(resultvalue, 1) OVER (PARTITION BY country_name, resulttypename ORDER BY resultdate), resultvalue) AS netresultvalue
FROM results
LEFT JOIN resulttypes ON results.resulttypeid = resulttypes.resulttypeid
LEFT JOIN projects ON results.projectid = projects.projectid
LEFT JOIN countries ON projects.countryid = countries.countryid
WHERE resulttypename IN ('Attendees Meeting','Fellowship Locations')
AND {% condition results.resultdate_date %} resultdate {% endcondition %}
ORDER BY resultdate
fields:
- dimension: resultid
primary_key: true
sql: ${TABLE}.resultid
- dimension: country_name
sql: ${TABLE}.country_name
- dimension: resulttypeid
sql: ${TABLE}.resulttypeid
- dimension: lastvalue
type: number
sql: ${TABLE}.lastvalue
- dimension: resulttypename
sql: ${TABLE}.resulttypename
- dimension: resultvalue
type: number
sql: ${TABLE}.resultvalue
- dimension: netresultvalue
type: number
sql: ${TABLE}.netresultvalue
- dimension_group: resultdate
type: time
timeframes:
- date
- month
- year
sql: ${TABLE}.resultdate
- measure: count
type: count
drill_fields:
- detail*
- measure: total_result_value
type: sum
sql: ${netresultvalue}
Contents
- snapshot_table.sql
- snapshot_table.sql
- snapshot_table.view.lkml
- snapshot_table.view.lookml