Analytics troubleshooting
What you saw, why, and what to do about it, grouped by the screen you are on. The general rule for this module is set out in full in why analytics figures read zero: a zero here rarely means what it looks like it means.
Getting in
"Access Denied, you do not have permission to view analytics and reports."
You hold Staff, Parent, or a role this module does not recognise at all. Every action in this module needs the reporting setting or the narrower financial-management setting, and there is no analytics screen a staff member's account can reach.
The page loads but every panel fails
You are almost certainly on a read-only account. The page checks a wider screen-side setting that also lets that account through, and it satisfies zero settings PTRS actually enforces anywhere in the product. There is no workaround short of a different account.
The analytics dashboard
Avg Daily Attendance and Compliance Score both read zero
Structural, and permanent. The first reads a daily summary table nothing writes to; the second reads a compliance snapshot that only the scoring engine can write, and its write can never be reached. Neither will change with more data. Use the statistical report for attendance; there is no working compliance score anywhere in the product today.
Every KPI tile shows "+0% vs prior period"
The percentage is a fixed value on every tile. No comparison is ever requested or computed. Ignore the arrows; the figures above them are real for four of the six tiles.
Open Incidents shows a red rising arrow but "+0%"
This tile is the one exception to the rule above: its own trend is set to rising whenever the count is greater than zero at all. That is a non-zero indicator dressed as a rising trend next to a fixed "+0%", and it does not mean incidents actually increased.
Turning on "Compare to previous period" shows the same number twice
The prior-period line is worked out by dividing by a change figure that is fixed at zero, so the divisor never moves and the previous period always equals the current one, on every tile.
The YTD button gives the same result as 90 Days
It sends the same request. Choosing it sends no window at all, which falls back to the standard 90-day trend window. Nothing in PTRS computes a true year-to-date figure. Use Custom and set the first of January through today instead.
The Attendance Trends chart is empty at every date range
It reads the daily summary table that has no writer. It will be empty in every installed copy of PTRS, at every range and every location.
The Attendance Heatmap is a full grid of zeroes
PTRS returns real check-in data here. The panel expects different field names than the ones actually sent, so every cell lookup misses and prints zero. A grid of zeroes here says nothing about your attendance either way. Only the message saying there is no heatmap data is a truthful empty state; that one means PTRS genuinely returned no rows.
The Program Enrollment panel has data when nothing else does
Expected. That panel reads live program records from the Programs module directly rather than this module's own enrolment figures. It is one of the four panels on the page reading a genuinely live source.
The Compliance Trend chart has points in one environment and none in another
You are looking at a development setup. It is given one sample snapshot when it is first created; a real installed copy of PTRS never gets one, because the engine that would write further snapshots fails before reaching that step.
The three incident panels disagree about the period
They cover three different windows and none is labelled: the trend line uses the date range you chose, the incident heatmap is fixed at 90 days, and incidents by type and location has no date filter at all and covers all time. All three are honest about their own window.
An incident or check-in appears on the wrong day of the heatmap
Both heatmaps group by the calendar date in universal time. Delaware runs four or five hours behind it, so anything recorded after roughly 8 in the evening, local time, lands on the next day's cell.
Download Report ignores the date range and location I selected
Correct, and there is no way to change it. The executive summary behind this download takes no filters at all: it always covers the whole organisation over a fixed 30-day window, whatever the bar above it shows.
The statistical report
The Year choice only offers this year
The year list is built from the years a daily attendance summary or an incident exists on file. The first table has no writer, so the list is effectively the years your organisation recorded an incident, plus the current one.
The report itself reads a different, populated table. An earlier year can be requested directly if you need one.
The spreadsheet, workbook and document buttons do nothing
You have not pressed Generate Report yet in this session. The export step returns immediately when nothing has been generated, with no file, no error and no message. Generate first, then export.
I switched site and got the previous site's numbers
The report's five-minute memory is keyed only on the year and the level, not the site or county. Generating for a second site within five minutes returns the first site's remembered report, with the first site's name still in the title bar.
Reload the page between sites, and always check the site name in the title bar against what you actually selected before exporting.
The document is missing sections that are in the spreadsheets
The document omits Section 3, Other Youth Served, and Section 6, Teen ADA. Both spreadsheet formats include them, as rows of zeroes, because both sections are fixed stubs with no data behind them either way.
Total Youth Served is identical to Registered Members
By construction. Section 4 is defined as Section 2 plus Section 3, and Section 3 is always zero. Drop-in youth who are not registered members appear in none of the three sections.
The Avg column looks too high
The average divides by the number of months with a non-zero value, not by twelve. A club open only in summer reports a summer average in a column that reads as an annual one. This affects Section 1B, Average Daily Attendance.
Total Hours does not match our opening hours
It will not. Section 10 works out ten hours a day for June through August and five hours a day otherwise, fixed figures with no setting behind them. PTRS stores each site's real hours on its own profile, and this report does not read them.
Last year's report gives different numbers each time I run it
Section 2 counts members active today with an enrolment date on or before each month's end. A child who has since left is missing from every month, including months they actually attended. Sections 5 and 9 draw on the same population and carry the same limitation.
Keep the exported file. The report cannot be reproduced from PTRS after the fact.
A child is in the wrong age band
This report ages a child as the report year minus the birth year, one year earlier if born after June. The day of birth is never used, and the bands differ from the ones the Demographics chart uses, which computes an exact age against today. The two will disagree.
Program Participation is all in January
A display artefact. Section 13 has no monthly breakdown at all, so each program type's distinct member count is written into the January slot of a twelve-month grid.
Funder reports
Total Attendance is zero on every report
The report sums the daily attendance summary table, which has no writer. Every funder report ever generated carries zero, and the zero is written into the stored report rather than worked out fresh each time it is viewed, so it persists in the history list and in the document's Impact Metrics block.
Produce attendance from the statistical report instead and attach it separately.
The report period is 30 days but the funder is on Annual reporting
The period is always the last 30 days. The funder's own frequency does not change it, though that frequency is still stamped on the report as its type. There is no date control on this screen and no date setting on the underlying save.
The document says a name that is not our organisation
The name is a fixed value in the document generator, and the organisation's own name is never read from anywhere. There is no setting for it today.
The report is described as AI-powered but reads like a database extract
It is exactly that: one lookup, one sum and one count, turned into a stored record. Nothing in the path calls an outside AI service.
Total Enrollment looks too high
It counts active enrolments, not children. A child in three programs counts three times. The document itself labels it "Active Enrollments", which is the accurate wording; the screen's shorter label is the misleading one.
A report's status is stuck on Draft
PTRS also recognises Final and Submitted as statuses, and nothing anywhere ever sets either one. There is no submit action and no way to mark a report as sent.
Generating a report did not move the funder's Next Due date
Nothing advances it. Next Due and the Current, Due Soon or Overdue status are both edited by hand on the funder's own record, and nothing ever re-evaluates them on a schedule.
Operational reports
The three attendance reports are empty
All three read the daily summary table that has no writer. They will be empty in every installed copy of PTRS. Empty renders as an empty table, not a message, which looks exactly like a genuinely quiet month.
Compliance Summary shows a zero score and zero alerts for every location
Both columns read tables that cannot be written: the compliance snapshot, behind the engine that fails first, and the compliance alert table, whose two possible writers are that same engine and a once-a-day check that was never finished being connected in.
The Meal Count report's validity column is false on every row
CACFP marks every meal record invalid in several places and valid in none. The meal counts beside that column are real regardless.
I cannot set a date range
The screen sends only the current year and nothing else. Four reports fall back to the server's default of the last 30 days, one uses the year, and the rest are point in time. The underlying read accepts a start date, an end date and a location directly, if you need a different window.
The report does not contain a column the card promised
Three catalogue descriptions overstate their report: Daily Attendance mentions check-outs, and there is no check-out column because PTRS records no check-outs at all; Staff Roster mentions credential status; Meal Count mentions age groups. None of those fields is in what the report actually returns.
The Incident Log spreadsheet has shifted columns
The browser-built spreadsheet export wraps values in quotation marks without doubling any that are already inside a value, so a quotation mark in an incident description ends that field early. Use the workbook export instead, which is built on the server.
"Unknown report type"
The type given is not one of the ten in the catalogue. Note that the refusal PTRS actually sends differs from the one its own error catalogue documents for this case.
Funder records
"Failed to create funder" or "Failed to delete funder" with no reason
Almost certainly a refusal from the server. The funder records screen checks a wider management setting that admits a Site Director; the three saves behind it require the narrower financial-management setting, which does not. The list loads because it comes from a different, wider read, so the screen looks fully working until a save actually fails.
The detail page says "No contact name" for a funder that has one
The read behind this screen does not return the contact name at all, and returns the contact email as a fixed blank value. The page shows fields the reply never actually carries.
The financial summary's Funders tab reads a different record and does show the contact name correctly.
Editing a funder wiped its contact details and grant dates
The same cause as the entry above, and this one is destructive. The edit dialog fills five fields from a reply that never contained them: contact name, contact email, contact phone, grant start and grant end. They arrive blank, and saving replaces every field on the record with what the form submitted.
Recover the values from the financial summary's Funders tab and re-enter them. Note them before opening the dialog on any funder you intend to edit.
The Notes box contains a wall of unreadable text
That is the funder's structured report package description, written only by the data a new installed copy of PTRS is given when it is first created. The same box also serves as the plain notes field. Typing over it destroys the package permanently, and there is no screen that can recreate one.
A funder is overdue but shows Current
Status is typed in, never worked out. Nothing compares it with Next Report Due, and this module runs no schedule of any kind. Edit the record by hand to change it.
Removing a funder made its reports disappear
The removal is a soft delete: the reports still exist but are filtered out of Report History, which requires a visible funder to show against. The confirmation's wording promises more than what actually happens.
Grants we recorded against a program are not in Funding Committed
They will not be. PTRS keeps two entirely separate funding records: the funders on this screen, and the funding sources, grants and allocations kept in the Programs module. Nothing reconciles them and no screen adds them together.
Exports generally
I asked for a format and got a different one
None of the six export actions in this module checks its own format setting. Each falls back to a default silently rather than refusing an unrecognised value. The recognised values for each are listed in who can do what with analytics and reports.
Timestamps on exports are hours off
Every "Generated" stamp in this module is printed in universal time. The documents label it as such; the screens do not.
Related
Checked against PTRS on 7 September 2026.