May 2026
🔍

Overview

YTD totals, key ratios, program breakdown, and the monthly visits trend — all at a glance.

📅 Book a free walkthrough
📈

Monthly Report

KPI cards for households, individuals, lbs, and families — with year-over-year comparisons.

📅 Book a free walkthrough
📍

Locations

County breakdown, top partner agencies, and zip-code distribution of clients served.

📅 Book a free walkthrough
👥

Demographics

Gender, ethnicity, veteran status, employment, language, housing, and age — all in one view.

📅 Book a free walkthrough
🚐

Program Activity

Drive-Thru, Market, Mobile, Fresh Start, Evening, and DoorDash breakdowns with drill-down detail.

📅 Book a free walkthrough
🕐

Time Analytics

Day-of-week, hourly, and seasonal patterns. See when demand peaks and plan accordingly.

📅 Book a free walkthrough
📄

Custom Report

Pin any chart and export a clean one-page PDF — ready for board meetings or grant applications.

📅 Book a free walkthrough
✏️

Manual Inputs

Log food pounds and event counts not in Oasis — with a full history so nothing falls through.

📅 Book a free walkthrough
Data flow: Oasis API → TiDB Cloud (SQL) → Dashboard. Records sync automatically each night; use Sync from API to pull immediately.
This Month
Total Household Visits
Selected month only
Total People Served
Selected month only
Pounds of Food Distributed
Selected month only
Boxes / Bags / Kits
Selected month only
Year-to-Date Totals
Total Household Visits
Total People Served
Pounds of Food Distributed
All food programs · YTD
Boxes / Bags / Kits
Non-food · YTD cumulative
Key Ratios
Avg Visits / Family
Visits ÷ unique families · YTD
Client Retention
Returning ÷ all families · YTD
Pounds / Individual
Food lbs ÷ people served · YTD
Est. Cost / Household
Estimate · YTD
Unhoused Share
Unhoused ÷ unique families · YTD
Program Breakdown
Program Breakdown (YTD)
Monthly Household Visits Trend
All-Time Totals
Total Household Visits
All programs · all time
Total People Served
All programs · all time
Pounds of Food Distributed
All food programs · all time
Boxes / Bags / Kits
Non-food programs · all time
AI Insight
Loading AI insight…
📍
County data = client's home county, not the location where they were served. It comes from the county field on each household's Oasis case record. FoodLink is partner event/location data, so it appears under Partner Locations and Program Activity instead of this home-county chart.
All Programs by County — Household Visits (YTD)
County Coverage
Coverage of County
Unique families ÷ population
Unique Families Served · YTD
Distinct households this year
County Population (est.)
Config: COUNTY_POPULATION
County Statistics — All-Time Totals
Source: Oasis Agency Assistance Report · All years  · 
All-Time Program Totals
Source: Oasis Agency Assistance by Category · refreshed from TiDB
Assistance Records
92,507
All programs · all time
Unique Households
12,437
37,426 total members · all time
Pounds of Food Distributed
2.57M
All food programs · all time
Boxes / Bags / Kits
25,518
Incl. diapers & period kits
Households Served by Program — All Time
Pounds of Food Distributed by Program — All Time
Demographics
Communities of Color Served
of households with demographic data
— households from non-White/Caucasian communities · YTD
Unhoused
Veterans
Non-English
Advanced HOH Query AND conditions
Count HOHs matching all selected conditions
Gender
Ethnicity · Minority Focus
Veteran Status
Employment Status
Government Benefits (multi-select — counts exceed total households)
Primary Language · Non-English Focus
Education Level
Household Size Distribution
Age Group (YTD)
Housing Status
Visit Frequency Distribution
Program Activity
New Families
First visit ever this year (YTD)
Returning Families
Visited in prior years too (YTD)
Unique Households
Distinct families served (YTD)
Program Activity — Year to Date
🛒
Households
Drive-Through Pantry
— lbs
🏠
Households
The Market / Choice Pantry
— lbs
🚐
Mobile Pantry Events
— HH
— lbs
🏪
Pop-up Pantry Events
— HH
— lbs
🏢
Households
Food Link Boxes
— agencies
— lbs
🍳
Fresh Start Kitchen
— HH
— lbs
🌙
Households
Evening Drive-Through
— lbs
📦
Households
Senior Box
— lbs
🛵
Households
DoorDash Delivery
— lbs
🍱
Power Pack
— lbs
(not included in total)
Non-Food Programs — Year to Date
🍼
Unique Households
Sweet Cheeks Diapers
packs distributed
🌊
Unique Households
Period Kits (Tidal Wave)
kits distributed
👕
Unique Households
Clothing Vouchers
St. Vincent de Paul · vouchers
🎒
YTD total
Homeless Backpacks
packs distributed
📋
How programs are counted:
Drive-Through Pantry — daytime drive-thru visits where the Oasis category contains "Drive Thru" or "Drive Through" but does not contain "Evening". Does not include DoorDash deliveries. Each assistance record = one household visit.
Evening Drive-Through — Oasis categories containing "Evening" (e.g. "Evening Drive Through"). Tracked separately from Drive-Through Pantry.
DoorDash Delivery — Oasis categories containing "Door Dash" or "DoorDash". Tracked separately from Drive-Through Pantry.
The Market / Choice Pantry — in-person choice shopping visits where the Oasis category contains "Choice Pantry".
Mobile Pantry — off-site community outreach; Oasis category is exactly "Mobile Pantry". Event count = COUNT(DISTINCT date).
Pop-up Pantry — events with Oasis event type "Pop up Pantry" or "Senior Pop Up". HH and lbs pulled from event activity values.
Fresh Start Kitchen — events with Oasis event type "Fresh Start" / "Re-Start Kitchen". HH and lbs pulled from event activity values.
Senior Box — assistance records where the Oasis category contains "Senior Box". Each record = one household visit.
FoodLink — food distributed to partner agencies via the Oasis Events module (event type = "FoodLink"). Each event = one partner distribution session; agency count = distinct locations served.
Sweet Cheeks Diapers — Oasis categories containing "Sweet Cheeks" or "Diaper". Pack count = SUM(amount) where unit = Boxes/Bags.
Period Kits (Tidal Wave) — Oasis categories containing "Period Kit" or "Tidal Wave". Kit count = SUM(amount) where unit = Boxes/Bags.
Clothing Vouchers — Oasis categories containing "Clothing Voucher", distributed through St. Vincent de Paul. Count = SUM(amount).
Homeless Backpacks — event activity total where activity name = "Homeless Backpacks". Counts packs distributed across all event types.
Service Days per Program · This Month
Program Drill View
Household Visits · YTD
Pounds · YTD
Avg Pounds / Visit
Service Days · This Month
Year-over-Year Monthly Growth
% change in household visits vs the same month in the prior year — green = growth, red = decline
New vs Returning Households
Monthly breakdown of first-time (new) vs returning families — green = returning base, blue = new intake
📋 API & SQL Reference
CSV ↔ SQL Mapping
Main Programs
Mobile by County
Age Breakdown
Events / FRH
Full YTD Summary
Oasis Assistance Report Field Mapping
-- Core summary mapping (CSV ↔ SQL)
-- Duplicated household count  -> COUNT(*) on assistance_assistance within date range
-- Duplicated member count     -> SUM(COALESCE(ch.case_count,1))
-- Household count (unique)    -> COUNT(DISTINCT aa.case_id)
-- Assistance count            -> COUNT(*)

SELECT
  COUNT(*) AS duplicated_household_count,
  COUNT(DISTINCT aa.case_id) AS household_count,
  SUM(COALESCE(ch.case_count, 1)) AS duplicated_member_count,
  COUNT(*) AS assistance_count
FROM assistance_assistance aa
JOIN cases_case hoh ON hoh.id = aa.case_id
LEFT JOIN cases_household ch ON ch.id = hoh.household_id
WHERE aa.date >= '{{start_date}}' AND aa.date < '{{end_exclusive}}';
Demographics Mapping (EAV)
-- CSV columns like Gender/Ethnicity/Employment/Veteran/Benefits/Language
-- come from cases_casedetail (EAV model) + details tables

SELECT
  dg.name  AS detail_group,
  dd.name  AS detail_name,
  COUNT(DISTINCT aa.case_id) AS households
FROM assistance_assistance aa
JOIN cases_casedetail ccd ON ccd.case_id = aa.case_id
JOIN details_detail dd ON dd.id = ccd.detail_id
JOIN details_group dg ON dg.id = dd.group_id
WHERE aa.date >= '{{start_date}}' AND aa.date < '{{end_exclusive}}'
  AND dg.name IN ('Gender','Ethnicity','Employment','Veteran','Government Benefits','Language','Education')
GROUP BY dg.name, dd.name
ORDER BY dg.name, households DESC;
Date Field Rule
-- Oasis CSV "Assistance Date" matches assistance_assistance.date
-- Use aa.date for report alignment (not entry_date fields).
Drive Through (D) — households & individuals
-- Drive Through duplicated household + member counts
SELECT
  COUNT(*) AS duplicated_households,
  SUM(COALESCE(ch.case_count, 1)) AS duplicated_members
FROM assistance_assistance aa
JOIN assistance_category ac ON aa.category_id = ac.id
JOIN cases_case hoh ON hoh.id = aa.case_id
LEFT JOIN cases_household ch ON ch.id = hoh.household_id
WHERE (ac.name LIKE '%Drive Thru%' OR ac.name LIKE '%Drive Through%'
    OR ac.name LIKE '%Door Dash%' OR ac.name LIKE '%DoorDash%')
  AND aa.date >= '{{start_date}}' AND aa.date < '{{end_exclusive}}';
Market (C) — households & individuals
-- Market (Choice Pantry) duplicated household + member counts
SELECT
  COUNT(*) AS duplicated_households,
  SUM(COALESCE(ch.case_count, 1)) AS duplicated_members
FROM assistance_assistance aa
JOIN assistance_category ac ON aa.category_id = ac.id
JOIN cases_case hoh ON hoh.id = aa.case_id
LEFT JOIN cases_household ch ON ch.id = hoh.household_id
WHERE ac.name LIKE '%Choice Pantry%'
  AND aa.date >= '{{start_date}}' AND aa.date < '{{end_exclusive}}';
Mobile Pantry (M) — households & individuals
-- Mobile Pantry duplicated household + member counts
SELECT
  COUNT(*) AS duplicated_households,
  SUM(COALESCE(ch.case_count, 1)) AS duplicated_members
FROM assistance_assistance aa
JOIN assistance_category ac ON aa.category_id = ac.id
JOIN cases_case hoh ON hoh.id = aa.case_id
LEFT JOIN cases_household ch ON ch.id = hoh.household_id
WHERE ac.name = 'Mobile Pantry'
  AND aa.date >= '{{start_date}}' AND aa.date < '{{end_exclusive}}';
Mobile Pantry by County — with vs. without children
-- Mobile Pantry by county with/without children
SELECT
  COALESCE(dc.name, 'Other') AS county,
  SUM(CASE WHEN ch.max_dob > DATE_SUB(CURDATE(), INTERVAL 18 YEAR) THEN 1 ELSE 0 END) AS with_children,
  SUM(CASE WHEN ch.max_dob IS NULL OR ch.max_dob <= DATE_SUB(CURDATE(), INTERVAL 18 YEAR) THEN 1 ELSE 0 END) AS without_children,
  COUNT(*) AS duplicated_households
FROM assistance_assistance aa
JOIN assistance_category ac ON aa.category_id = ac.id
JOIN cases_case hoh ON hoh.id = aa.case_id
JOIN cases_household ch ON ch.id = hoh.household_id
LEFT JOIN details_county dc ON dc.id = ch.county_id
WHERE ac.name = 'Mobile Pantry'
  AND aa.date >= '{{start_date}}' AND aa.date < '{{end_exclusive}}'
GROUP BY county
ORDER BY duplicated_households DESC;
Age breakdown — Drive Through + Market + Mobile
-- Duplicated member age counts (each visit x each household member)
WITH visits AS (
  SELECT aa.id, aa.case_id
  FROM assistance_assistance aa
  JOIN assistance_category ac ON ac.id = aa.category_id
  WHERE (ac.name LIKE '%Drive Thru%' OR ac.name LIKE '%Drive Through%'
      OR ac.name LIKE '%Door Dash%' OR ac.name LIKE '%DoorDash%'
      OR ac.name LIKE '%Choice Pantry%' OR ac.name = 'Mobile Pantry')
    AND aa.date >= '{{start_date}}' AND aa.date < '{{end_exclusive}}'
)
SELECT
  SUM(CASE WHEN TIMESTAMPDIFF(YEAR, c2.date_of_birth, CURDATE()) < 18 THEN 1 ELSE 0 END)  AS dup_members_0_17,
  SUM(CASE WHEN TIMESTAMPDIFF(YEAR, c2.date_of_birth, CURDATE()) BETWEEN 18 AND 59 THEN 1 ELSE 0 END) AS dup_members_18_59,
  SUM(CASE WHEN TIMESTAMPDIFF(YEAR, c2.date_of_birth, CURDATE()) >= 60 THEN 1 ELSE 0 END) AS dup_members_60_plus,
  SUM(CASE WHEN c2.date_of_birth IS NULL THEN 1 ELSE 0 END) AS dup_members_unknown
FROM visits v
JOIN cases_case hoh ON hoh.id = v.case_id
JOIN cases_case c2 ON c2.household_id = hoh.household_id AND c2.deceased = 0;
FoodLink — events & unique agencies
-- FoodLink events and unique agencies
SELECT
  COUNT(*) AS frh_events,
  COUNT(DISTINCT ee.location_id) AS unique_agencies
FROM events_event ee
JOIN events_eventtype et ON ee.event_type_id = et.id
WHERE et.name = 'FoodLink'
  AND ee.date >= '{{start_date}}' AND ee.date < '{{end_exclusive}}';
Pop-up Pantries + Fresh Start Kitchen events
-- Pop-up + Fresh Start event totals
SELECT
  et.name,
  COUNT(*) AS events
FROM events_event ee
JOIN events_eventtype et ON ee.event_type_id = et.id
WHERE et.name IN ('Pop up Pantry', 'Senior Pop Up', 'Fresh Start/Re-Start Kitchen')
  AND ee.date >= '{{start_date}}' AND ee.date < '{{end_exclusive}}'
GROUP BY et.name
ORDER BY events DESC;
Complete YTD summary — all programs
-- YTD master summary aligned to Oasis assistance report logic
SELECT
  COUNT(*) AS duplicated_household_count,
  COUNT(DISTINCT aa.case_id) AS household_count,
  SUM(COALESCE(ch.case_count, 1)) AS duplicated_member_count,
  ROUND(SUM(CASE WHEN aa.unit_id = 2 THEN aa.amount ELSE 0 END)) AS pounds_distributed,
  ROUND(SUM(CASE WHEN aa.unit_id = 3 THEN aa.amount ELSE 0 END)) AS boxes_bags_distributed
FROM assistance_assistance aa
JOIN assistance_category ac ON ac.id = aa.category_id
JOIN cases_case hoh ON hoh.id = aa.case_id
LEFT JOIN cases_household ch ON ch.id = hoh.household_id
WHERE aa.date >= '{{start_date}}' AND aa.date < '{{end_exclusive}}'
  AND (ac.name LIKE '%Drive Thru%' OR ac.name LIKE '%Drive Through%'
    OR ac.name LIKE '%Door Dash%' OR ac.name LIKE '%DoorDash%'
    OR ac.name LIKE '%Choice Pantry%'
    OR ac.name = 'Mobile Pantry'
    OR ac.name LIKE '%Fresh Start%' OR ac.name LIKE '%Senior Box%');
Monthly Manual Inputs
Source: —
InKind lbs
FSFB lbs
Milk (cases)
Eggs (dozens)
Other food lbs
Composted lbs
Upcycled lbs
Non-food recyclables lbs
Manual Inputs Tracking & Forecast
Loading tracking data…
Manual Input lbs — YTD by year
Monthly Manual Inputs + 6-Month Forecast
Food Waste vs Net Served
Food Waste — Year over Year
Monthly Impact Report
Prints the live report on this page directly in Chrome, Arc, Safari, and save-to-PDF flows.
IPM Food Pantry
MONTHLY IMPACT REPORT
Overview
Total Household Visits
Families
Unique Households
Families
Total People Served
Individuals
Program
Total Pounds of
Food Distributed
Drive-Through
Pantry
lbs
The Market
(Choice Pantry)
lbs
Mobile
Pantry
lbs
FoodLink
(Partner Agencies)
lbs
Demographic
Veterans
Unhoused
Non-English
Non-White
Unemployed
HH with
Children
Household Composition
Gender (Household Representatives)
Age Group (All Household Members)
Service Map
Households served by county
WARREN CLINTON HIGHLAND HAMILTON CLERMONT BROWN ADAMS
Growth Trends
Monthly Visits · Jan-Dec
Busiest Day of Week
Peak Hour
Repeat Visitors
Most Popular Day of Week
Total check-ins per day across selected period
Click a bar to filter hour chart
Peak Hours
Visit volume by hour of day
Click a bar to filter day chart
Seasonal Trends
Average monthly visit volume by calendar month
Visit Frequency Analytics
How often clients return — households by number of visits
Week-by-Week vs Prior Years
How each week of the selected month performed historically, week by week across years
Year-by-Year
Total household visits per calendar year
Return Analytics
Two complementary retention metrics — different cohorts, both matter
Returning Households (cross-year)
of this year's households
Visited this year AND had visited in a prior year. Different from "Repeat Visitors" above — that counts 2+ visits within this year only.
Non-Returners from Last Year
households haven't come back
Visited in , not yet seen in .
Visitor Behavior
Preferred Week of Month
Which week of the month families tend to visit — useful for staffing
Family Loyalty
How families engage — single program vs multi-program, and same-week regulars
Loading…
Gaps & Churn Signals
Households that paused or lapsed — early warning signals for outreach
Loading…
Forecast Drivers
How behavior patterns shape the 6-month projection
Loading…
Monthly Visit Trend + 6-Month Forecast
All-time monthly totals with linear trend projection
Agent Activity Heatmap — When Staff is Busiest
Check-in volume by day of week × hour of day
Low
High
Top Staff by Activity
Agents ranked by number of check-ins recorded
Staff Activity by Day of Week
When each top agent is most active
Anomaly & Alerting — Unusual Traffic Spikes / Dips
Months where visit volume was more than 2 standard deviations from the 12-month rolling baseline
Loading…
Avg lbs / food visit
Avg household size
Avg days between visits
Client Journey Funnel
Attrition from first visit → food → repeat → multi-service
Loading…
Appointment Scheduling Stats
Scheduled vs confirmed, lead time distribution
Location Utilization
Event count and active days per partner location (all time)
Cohort / Retention Analysis
Each row = clients whose first visit was that month. Columns = % still returning in subsequent months (M+1 … M+11). Darker green = better retention.
Loading…
📌
No charts pinned yet. Click the + button on any chart card across the dashboard to pin it here.
Configure your report on the left,
then click Generate Report.
Loading…