SQL Crowdfunding education

Donor Ideal

Donor Ideal model for crowdfunding education.

source-preserved

Blocks

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

SELECT
  pay.donorid AS donorid
  , COUNT(DISTINCT pay.paymentid) AS twelve_month_payments
  , SUM(pay.green_dollars) AS twelve_month_green_dollars_amount
  , COUNT(DISTINCT d.proposalid) AS twelve_month_projects
  , COUNT(DISTINCT t.personid) AS twelve_month_teachers
FROM {{ ref('payment') }} pay
LEFT JOIN donation_data d ON d.donationid = pay.donationid
LEFT JOIN proposal_data p ON p.proposalid = d.proposalid
LEFT JOIN appuser AS t ON p.createduserid = t.personid
LEFT JOIN person AS donor_person ON pay.donorid = donor_person.personid
LEFT JOIN address AS donor_address ON donor_person.addressid = donor_address.addressid
JOIN (
  SELECT DISTINCT (donorid)
  FROM donormmi s
  WHERE s.searchcriteria IS NOT NULL
  AND createdate BETWEEN current_date - interval '1 year' AND current_date
  ) AS search ON search.donorid = pay.donorid

WHERE pay.received_date BETWEEN current_date - interval '1 year' AND current_date
 AND NOT COALESCE(pay.is_teacher_referred, FALSE)
AND pay.received = {% parameter y_value_placeholder %}
AND donor_address.address1 <> ''
GROUP BY pay.donorid

# models/schema.yml
version: 2

models:
  - name: donor_ideal
    columns:
      - name: donorid
        tests:
          - unique
          - not_null
      - name: twelve_month_payments
      - name: twelve_month_green_dollars_amount
      - name: twelve_month_projects
      - name: twelve_month_teachers
      - name: donor.is_ideal

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.
donor_ideal.sql · 24 lines
source-preserved validation: not checked
SELECT
  pay.donorid AS donorid
  , COUNT(DISTINCT pay.paymentid) AS twelve_month_payments
  , SUM(pay.green_dollars) AS twelve_month_green_dollars_amount
  , COUNT(DISTINCT d.proposalid) AS twelve_month_projects
  , COUNT(DISTINCT t.personid) AS twelve_month_teachers
FROM ${payment.SQL_TABLE_NAME} pay
LEFT JOIN donation_data d ON d.donationid = pay.donationid
LEFT JOIN proposal_data p ON p.proposalid = d.proposalid
LEFT JOIN appuser AS t ON p.createduserid = t.personid
LEFT JOIN person AS donor_person ON pay.donorid = donor_person.personid
LEFT JOIN address AS donor_address ON donor_person.addressid = donor_address.addressid
JOIN (
  SELECT DISTINCT (donorid)
  FROM donormmi s
  WHERE s.searchcriteria IS NOT NULL
  AND createdate BETWEEN current_date - interval '1 year' AND current_date
  ) AS search ON search.donorid = pay.donorid

WHERE pay.received_date BETWEEN current_date - interval '1 year' AND current_date
 AND NOT COALESCE(pay.is_teacher_referred, FALSE)
AND pay.received = {% parameter y_value_placeholder %}
AND donor_address.address1 <> ''
GROUP BY pay.donorid
donor_ideal.view.lkml · 66 lines
inferred
view: donor_ideal {
  derived_table: {
    sql: SELECT
  pay.donorid AS donorid
  , COUNT(DISTINCT pay.paymentid) AS twelve_month_payments
  , SUM(pay.green_dollars) AS twelve_month_green_dollars_amount
  , COUNT(DISTINCT d.proposalid) AS twelve_month_projects
  , COUNT(DISTINCT t.personid) AS twelve_month_teachers
FROM ${payment.SQL_TABLE_NAME} pay
LEFT JOIN donation_data d ON d.donationid = pay.donationid
LEFT JOIN proposal_data p ON p.proposalid = d.proposalid
LEFT JOIN appuser AS t ON p.createduserid = t.personid
LEFT JOIN person AS donor_person ON pay.donorid = donor_person.personid
LEFT JOIN address AS donor_address ON donor_person.addressid = donor_address.addressid
JOIN (
  SELECT DISTINCT (donorid)
  FROM donormmi s
  WHERE s.searchcriteria IS NOT NULL
  AND createdate BETWEEN current_date - interval '1 year' AND current_date
  ) AS search ON search.donorid = pay.donorid

WHERE pay.received_date BETWEEN current_date - interval '1 year' AND current_date
 AND NOT COALESCE(pay.is_teacher_referred, FALSE)
AND pay.received = {% parameter y_value_placeholder %}
AND donor_address.address1 <> ''
GROUP BY pay.donorid ;;
  }

  dimension: donorid {
    label: "Donor ID"
    type: int
    primary_key: yes
    hidden: yes
  }

  dimension: twelve_month_payments {
    label: "Twelve Month Payments"
    type: int
    hidden: yes
  }

  dimension: twelve_month_green_dollars_amount {
    label: "12 Month Green Total Amount"
    type: number
    hidden: yes
  }

  dimension: twelve_month_projects {
    label: "12 Month Projects"
    type: int
    hidden: yes
  }

  dimension: twelve_month_teachers {
    label: "12 Month Teachers"
    type: int
    hidden: yes
  }

  dimension: donor.is_ideal {
    type: yesno
    sql: ${twelve_month_green_dollars_amount} >= 100
AND ${twelve_month_teachers} >= 2
AND ${twelve_month_payments} >= 3 ;;
  }
}
donor_ideal.view.lookml · 53 lines
source-preserved
- view: donor_ideal
  derived_table:
    sql: SELECT
  pay.donorid AS donorid
  , COUNT(DISTINCT pay.paymentid) AS twelve_month_payments
  , SUM(pay.green_dollars) AS twelve_month_green_dollars_amount
  , COUNT(DISTINCT d.proposalid) AS twelve_month_projects
  , COUNT(DISTINCT t.personid) AS twelve_month_teachers
FROM ${payment.SQL_TABLE_NAME} pay
LEFT JOIN donation_data d ON d.donationid = pay.donationid
LEFT JOIN proposal_data p ON p.proposalid = d.proposalid
LEFT JOIN appuser AS t ON p.createduserid = t.personid
LEFT JOIN person AS donor_person ON pay.donorid = donor_person.personid
LEFT JOIN address AS donor_address ON donor_person.addressid = donor_address.addressid
JOIN (
  SELECT DISTINCT (donorid)
  FROM donormmi s
  WHERE s.searchcriteria IS NOT NULL
  AND createdate BETWEEN current_date - interval '1 year' AND current_date
  ) AS search ON search.donorid = pay.donorid

WHERE pay.received_date BETWEEN current_date - interval '1 year' AND current_date
 AND NOT COALESCE(pay.is_teacher_referred, FALSE)
AND pay.received = {% parameter y_value_placeholder %}
AND donor_address.address1 <> ''
GROUP BY pay.donorid
  fields:
  - dimension: donorid
    type: int
    primary_key: true
    hidden: true
    label: Donor ID
  - dimension: twelve_month_payments
    type: int
    hidden: true
    label: Twelve Month Payments
  - dimension: twelve_month_green_dollars_amount
    type: number
    hidden: true
    label: 12 Month Green Total Amount
  - dimension: twelve_month_projects
    type: int
    hidden: true
    label: 12 Month Projects
  - dimension: twelve_month_teachers
    type: int
    hidden: true
    label: 12 Month Teachers
  - dimension: donor.is_ideal
    type: yesno
    sql: ${twelve_month_green_dollars_amount} >= 100
AND ${twelve_month_teachers} >= 2
AND ${twelve_month_payments} >= 3

Contents

  • donor_ideal.sql
  • donor_ideal.sql
  • donor_ideal.view.lkml
  • donor_ideal.view.lookml