Blog · Board and management reporting · Customer service
Build a helpdesk dashboard from a ticket export with explicit reporting dates and team definitions. Work backlog, first response, and resolution measures, then reconcile the counts before assigning actions.
A helpdesk dashboard compares incoming tickets, unresolved backlog, first response time, and resolution time by team. Start with a ticket export and a fixed reporting cutoff, then reconcile ticket movement before interpreting speed. Separate the tickets created during the period from those resolved during it.
Take one row per ticket, with a unique ticket ID, accountable team, creation timestamp, first human response timestamp, and resolution timestamp. Exclude automated acknowledgments from first response. Keep unanswered and unresolved timestamps blank rather than replacing them with zero.
For this worked example, a US distributor reviews January 5 through January 6, 2026. The start is January 5 at midnight; the exclusive cutoff is January 7 at midnight. All timestamps use the same time zone. Durations use calendar hours, including overnight time.
The example assumes no reopened, deleted, or transferred tickets. Team means the same accountable team throughout the period. If ownership changes matter, the separate ticket handoff and queue-delay analysis addresses that history.
Paste these fields into columns A through E in Google Sheets. The dash below means an empty spreadsheet cell.
| Ticket | Team | Created | First response | Resolved |
|---|---|---|---|---|
| T01 | Billing | 01/05/2026 09:00 | 01/05/2026 10:00 | 01/05/2026 15:00 |
| T02 | Billing | 01/05/2026 11:00 | 01/05/2026 13:00 | — |
| T03 | Billing | 01/04/2026 09:00 | 01/04/2026 12:00 | 01/06/2026 09:00 |
| T04 | Technical | 01/05/2026 08:00 | 01/05/2026 12:00 | 01/06/2026 08:00 |
| T05 | Technical | 01/06/2026 10:00 | 01/06/2026 16:00 | — |
| T06 | Technical | 01/03/2026 09:00 | 01/03/2026 11:00 | — |
In F2 calculate first response hours; in G2 calculate resolution hours. Fill both down through row 7. Spreadsheet timestamps represent days, so multiplying the difference by 24 converts it to hours.
F2: =IF(D2="","",(D2-C2)*24)
G2: =IF(E2="","",(E2-C2)*24)
| Ticket | First response hours | Resolution hours |
|---|---|---|
| T01 | 1 | 6 |
| T02 | 2 | — |
| T03 | 3 | 48 |
| T04 | 4 | 24 |
| T05 | 6 | — |
| T06 | 2 | — |
First response performance here uses tickets created during the reporting period that received a response before the cutoff. Resolution performance uses tickets resolved during the period, including older arrivals. T03 therefore belongs in resolution time but not the new-ticket response calculation. Those cohorts answer different management questions. Check that response and resolution timestamps are no earlier than creation; a negative duration signals a data error.
Put the start timestamp in Q1 and the exclusive cutoff in Q2. Put Billing in J2 and Technical in J3. These formulas return new tickets and resolved tickets for the team in J2:
K2: =COUNTIFS($B$2:$B$7,J2,$C$2:$C$7,">="&$Q$1,$C$2:$C$7,"<"&$Q$2)
L2: =COUNTIFS($B$2:$B$7,J2,$E$2:$E$7,">="&$Q$1,$E$2:$E$7,"<"&$Q$2)
Google's COUNTIFS documentation confirms that the function counts rows meeting multiple criteria and requires equally sized criteria ranges. Keep the dates as actual timestamp values, rather than text labels that only look like dates.
A ticket is open at the cutoff when it was created before that time and either has no resolution timestamp or was resolved at or after the cutoff. The two branches below are mutually exclusive:
M2: =COUNTIFS($B$2:$B$7,J2,$C$2:$C$7,"<"&$Q$2,$E$2:$E$7,"")+COUNTIFS($B$2:$B$7,J2,$C$2:$C$7,"<"&$Q$2,$E$2:$E$7,">="&$Q$2)
For opening backlog, use the same formula with Q1 in place of Q2. Fill each team formula down. The resulting movement table is:
| Team | Opening backlog | New tickets | Resolved tickets | Closing backlog |
|---|---|---|---|---|
| Billing | 1 | 2 | 2 | 1 |
| Technical | 1 | 2 | 1 | 2 |
| Total | 2 | 4 | 3 | 3 |
The check is 2 + 4 − 3 = 3. The remaining ticket IDs are T02, T05, and T06, which also count to 3. Reconcile both the movement and the actual unresolved list; a matching headline alone can hide offsetting errors.
Use these conditional averages for the team in J2:
N2: =IFERROR(AVERAGEIFS($F$2:$F$7,$B$2:$B$7,J2,$C$2:$C$7,">="&$Q$1,$C$2:$C$7,"<"&$Q$2,$D$2:$D$7,"<>",$D$2:$D$7,"<"&$Q$2),"")
O2: =IFERROR(AVERAGEIFS($G$2:$G$7,$B$2:$B$7,J2,$E$2:$E$7,">="&$Q$1,$E$2:$E$7,"<"&$Q$2),"")
Google documents AVERAGEIFS as averaging values subject to multiple criteria. The blank result above means no qualifying records; it does not mean instant service. Covirage is not affiliated with Google.
| Team | New tickets with a response | Mean first response hours | Tickets resolved | Mean resolution hours |
|---|---|---|---|---|
| Billing | 2 | 1.50 | 2 | 27.00 |
| Technical | 2 | 5.00 | 1 | 24.00 |
| Total | 4 | 3.25 | 3 | 26.00 |
Total response time is (1 + 2 + 4 + 6) / 4 = 3.25 hours. Total resolution time is (6 + 48 + 24) / 3 = 26.00 hours. Display averages to two decimal places and calculate them from ticket durations, without averaging team averages.
The service manager should investigate Technical's slower response and growing backlog. Billing's longer resolution average includes an older ticket being cleared, which may be progress. Check repeat contacts before treating faster resolution as better service. Compare contractual commitments through the separate SLA report method, using its required clock and exclusions.
Bring a ticket export with IDs, teams, and event timestamps to Covirage. Its tools map the columns, compute and check the figures, and the external AI model explains the results with every figure traced to its rows. Create a free Covirage account and bring a sample of your own export; account creation takes about a minute.
See Covirage for customer service teams for the supporting business context.
Ticket volume counts arrivals during a period. Backlog counts unresolved tickets at a particular cutoff, including older tickets. A team can receive fewer new tickets while its backlog grows if it resolves fewer tickets than it receives.
Use the clock that matches the service commitment. Calendar hours measure elapsed time continuously; business hours exclude time outside a defined work schedule. Label the choice and apply the same holidays, time zone, and working hours across comparisons.
You can reconstruct it when creation and final resolution timestamps describe a simple open-to-resolved history. Reopened tickets, deleted records, and team transfers require additional history. A current status column alone does not establish whether a ticket was open at an earlier cutoff.