“How many tickets did we sell for the 10:00 entry slot last Saturday?” or “How much of our daily sales revenue came in after 4 p.m.?” sound like simple questions. Then you open an ad-hoc query in Altru, look for a time filter, and find that the field either isn’t there, doesn’t offer the comparisons you expect, or returns results that don’t match what you saw at the register.
Time is one of the clumsier things to query in Altru. The good news is that most time-of-day questions can still be answered with a bit of planning. This article covers why it’s awkward, the workarounds that hold up, and how to check your results before anyone makes decisions from them.
Not every “time” in Altru is the same kind of field
Before building filters, figure out which kind of time value you’re dealing with. In practice you’ll run into three:
- Date-only fields. Many dates in query (membership expiration, constituent dates, many revenue dates) carry no time at all. If the field has no time component, no filter will split it by hour. Recognizing this early saves a lot of frustration.
- Date-and-time fields. Some transaction-style records store a full timestamp. These usually filter by date well, but the time portion may not be exposed as its own filter, and “equal to” a date can behave differently than “on or after” a date at midnight.
- Time-of-day fields. Program and event start and end times describe a slot, not a moment. Depending on how the field is stored, query may treat it more like text than like a clock value, which limits the operators you can use.
We can’t promise which specific fields in your query views fall into which group, and it can vary by view. The fastest way to find out is to add the field to a query’s output, run it, and look at what comes back. A value like “10:00 AM”, a four-digit value like “1000”, and a full date with a time attached each need different handling.
Approaches that work
1. Filter by the event, not the clock
For timed-entry questions (“who came at 10:00?”), the cleanest route is usually to filter on the program and the event date, then include the event start time as an output column. Each timed slot is its own event, so you’re really asking about a specific event rather than a time range. Sort the output by start time and you have your answer by slot without needing a time filter at all.
2. Use text comparisons carefully when the time is stored as text
If a time-of-day field turns out to behave as text, comparisons like “greater than” may still work if the values are consistently formatted in 24-hour, zero-padded form (for example, “0930” sorts before “1400”). They will not work reliably with 12-hour values that include AM and PM, where “1:00 PM” sorts before “9:00 AM” alphabetically. Test with a handful of known events before trusting a range filter.
3. Narrow by date in Altru, then slice by hour outside it
For transaction timestamps (sales after 4 p.m., the busiest hour at admissions), it’s often more dependable to filter by date range in the query, include the full date-time value as an output column, and export. In Excel or Google Sheets, a formula such as =HOUR(A2) pulls out the hour, and a pivot table gives you counts or revenue by hour in a few minutes. It’s one extra step, but you’re working with the actual values instead of fighting filter options.
4. Save the query for reuse
Once you have a version that works, save it with a clear name and description that explains the time handling (“Sorted by event start time; filter on event date only”). The next person to open it won’t have to rediscover the quirk.
Check the results before you share them
Time values are where small reporting errors hide. A few checks worth doing:
- Compare against a transaction you know. Pick a sale you remember, such as one you rang up yourself, and confirm the time in the query output matches the time it happened. If it’s off by a consistent number of hours, you may be looking at a time zone or server-time difference, and you’ll need to adjust for it in your spreadsheet.
- Check the day boundaries. If a timestamp is stored in a different time zone, late-evening transactions can land on the next day. Look at sales near midnight, especially for online purchases.
- Reconcile totals. The sum of your hourly buckets should match the daily total from a standard Altru report for the same day. If it doesn’t, something is being dropped or double-counted.
If you can’t tell whether a given field holds a time component or how it’s stored, ask Blackbaud support or try the query in a sandbox environment if you have one. That’s better than guessing and building a staffing plan on a misread field.
When this becomes a weekly task
Hourly analysis tends to turn into a routine: staffing schedules, timed-entry capacity planning, or comparing weekday and weekend patterns. Exporting, adding formulas, and rebuilding the pivot every week gets old. Data Bridge syncs Altru query results to Google Sheets, so the hour formulas and pivot tables can live in a sheet that refreshes from the saved query rather than from a fresh manual export each time.
Quick answers
Why can’t I filter a query by time of day?
Often the field is date-only, or the time portion isn’t offered as its own filter. Include the full value as an output column and work out the hour after export.
Why don’t my “after 2:00 PM” results look right?
The field may be compared as text. Check how the values are formatted, and switch to filtering by event or by date with time handled in a spreadsheet if the format isn’t consistent.



