Nathan Gomes

Project 04  /  IT service operations & analytics

IT Service Ops & SLA Analytics Platform

An analytics platform for a service desk: 50,000 simulated tickets pass through an automated data-quality gate into MySQL reporting views, then out to a live dashboard, an Excel report and a Power BI model that track volume, backlog, resolution time and SLA compliance.

The finding: two of eight categories, Access & Identity and Network & VPN, carry 34% of ticket volume but 61% of SLA breaches. Both depend on someone outside the desk and pass tickets between groups more often. Bringing them to the rest of the desk's breach rate would lift compliance from 86.9% to 92.3%, above the 90% goal.
Data
50,000 simulated tickets
Jan 2024 – Jun 2026
Desk
8 categories · 6 groups
21 agents · 5 sites
SLA policy
P1 4 h · P2 8 h
P3 24 h · P4 72 h · goal 90%
Stack
Python · SQL · MySQL
Power BI · Excel · FastAPI
Breaches from two categories 61.2%
from 34% of ticket volume
The two queues to fix
SLA compliance 86.9%
goal 90% · first response 90.0%
Below goal
Compliance if both were fixed 92.3%
about 2,682 fewer breaches
Clears the goal
Rows through the quality gate 50,950
3,200 repaired · 520 quarantined
49,480 clean tickets reported

All figures computed from the 50,000-ticket simulation after the data-quality gate, snapshot 30 June 2026. Compliance counts resolved tickets and open tickets already past target; open tickets still inside target are not scored yet.

The thirty-second version

1

Breaches are concentrated, not spread

Access & Identity and Network & VPN breach 23.7% of scored tickets. The other six categories together breach 7.7%. A desk-wide push would spend most of its effort where the problem is not.

2

The cause is waiting and hand-offs

Access tickets that waited on manager approval breached 49.7% of the time, against 13.6% without the wait. Network tickets handed off twice or more breached 39.0%, against 19.5% when the first group kept them.

3

The numbers had to be earned first

The raw export held duplicates, stale copies, drifting labels and impossible timelines. An automated gate removed 950 rows, repaired 3,200 and quarantined 520 before any SLA number was calculated. Each check is tested against a known answer key.

02

The dashboard

Five views over one set of SQL rules

Every chart and table is a parameterised query against the same reporting views that feed the Excel report and the Power BI model. One filter bar (period, category, priority, group, site, channel) drives every view and lives in the URL, so a filtered view can be shared as a link.

Service Ops overview: KPI strip, tickets opened per month, SLA compliance by month against the 90% goal, open backlog and backlog age
Overview. Volume, compliance against the goal, resolution time, backlog and its age, and performance by priority.
Breach analysis: generated finding, share of tickets against share of breaches by category, and a category by priority heatmap
Breach analysis. The finding, written from the numbers, with the concentration and the drivers behind it.
Data quality: gate totals and a table of every check with its dimension, rule, action and row count
Data quality. Every check with its rule, action and examples, plus the quarantine with raw records.
MONITOR

Overview

Compliance against the goal, resolution time, backlog and its age, and a watch list that flags open tickets at 75% of their target.

EXPLAIN

Breach analysis

Share of tickets against share of breaches, a category-by-priority heatmap, Pareto and drivers.

ACT

Recommendations

Three actions generated from measured mechanisms, each with evidence and an owner.

MANAGE

Queues & agents

Workload, hand-offs and compliance by resolver group, and an agent scorecard read within groups.

TRUST

Data quality

Gate totals, every check, repairs applied and the quarantine for owners to correct at source.

DRILL

Tickets

All 49,480 tickets with SLA outcome: search, sort, filter and export to CSV.

03

Where breaches concentrate

Two queues breach far beyond their size

A category whose orange bar is longer than its blue bar breaches more than its volume explains. Only Access & Identity and Network & VPN do, and by roughly double.

Access & Identity 19.1% 32.1% Network & VPN 14.8% 29.1% Software 18.7% 11.2% Hardware 13.1% 10.0% Email & Collaboration 13.5% 6.2% Onboarding 8.4% 5.2% Security 4.7% 3.2% Printing 7.7% 2.9%
Share of ticketsShare of SLA breaches
CategoryTicketsBreachesBreach rateShare of ticketsShare of breachesCumulative
1. Access & Identity9,4242,08322.1%19.1%32.1%32.1%
2. Network & VPN7,3441,89025.8%14.8%29.1%61.2%
3. Software9,2397277.9%18.7%11.2%72.4%
4. Hardware6,50365210.0%13.1%10.0%82.4%
5. Email & Collaboration6,6914036.0%13.5%6.2%88.7%
6. Onboarding4,1573418.2%8.4%5.2%93.9%
7. Security2,3142078.9%4.7%3.2%97.1%
8. Printing3,8081895.0%7.7%2.9%100.0%

Breach Pareto from the vw_category_pareto view. Highlighted rows are the two focus categories.

04

Why they breach

Work that waits on someone outside the desk

Splitting the two categories by third-party wait and by hand-off count shows the same mechanism in both. The ticket is not hard to fix; it stops moving.

Breach rate inWith the waitWithoutHanded off 2+ timesKept by first group
Access & Identity (manager approval)49.7%13.6%33.5%17.0%
Network & VPN (carrier / vendor)60.3%18.2%39.0%19.5%

53% of Access & Identity breaches waited on an approver, and 42% of Network & VPN breaches waited on a carrier or vendor. Both queues also change hands about four times as often as the rest of the desk. Priority does not rescue them: Critical and High tickets have the lowest compliance on the desk, because a 4- or 8-hour target leaves no room for a wait.

PriorityResolution targetTicketsAvg resolutionSLA compliance
P1 Critical4.0 h1,65115.5 h82.6%
P2 High8.0 h7,35716.9 h83.7%
P3 Medium24.0 h23,93725.8 h85.5%
P4 Low72.0 h16,53544.1 h90.7%
05

Data quality

Every row is repaired, quarantined or removed, and counted

The raw export has 50,950 rows. Fifteen checks run in a fixed order: uniqueness, then label consistency, then completeness, then timeline validity. Nothing is dropped silently. Repairs are recorded on the ticket, the quarantine keeps the raw record and its reason, and results are written to a dq_check_results table on every load.

CheckDimensionActionRows
U1  Exact duplicate rowsUniquenessremoved600
U2  Superseded ticket versionsUniquenessremoved350
C1  Non-standard category labelConsistencyrepaired1,900
C2  Non-standard priority labelConsistencyrepaired900
M1  Missing categoryCompletenessrepaired180
M2  Missing assignment groupCompletenessrepaired220
M3  Missing priorityCompletenessquarantined140
M4  Missing opened timeCompletenessquarantined25
V1  Opened after the exportValidityquarantined15
V2  Resolved before openedValidityquarantined120
V3  Responded before openedValidityquarantined60
V4  Closed before resolvedValidityquarantined50
V5  Resolved status without a resolved timeValidityquarantined70
V6  Open status with a resolved timeValidityquarantined40

50,950 rows in → 950 removed · 3,200 repaired · 520 quarantined → 49,480 clean tickets. The defects are injected into known tickets, so the tests assert each check finds exactly those rows, and that the gate finds nothing when run on its own output.

06

Over time

Below goal every month, worst when the queues flood

Compliance by the month tickets were opened. The dips line up with incidents: the VPN concentrator failure in February 2025, the Windows 11 migration in autumn 2025 and the MFA policy roll-out in March 2026. The lowest month was February 2025 at 83.5%.

75% 80% 85% 90% 95% Jan 2024 Jul 2024 Jan 2025 Jul 2025 Jan 2026 Goal 90% 83.5%
SLA compliance, by month opened90% goal

Median resolution 11.7 h, 90th percentile 46.4 h. 50 tickets were open at the snapshot.

07

How it works

From a messy export to three outputs that agree

01  SIMULATE

A realistic desk

50,000 tickets with weekday and seasonal arrival, queue pressure, hand-offs, third-party waits and four dated incidents, exported with 14 defect classes.

PythonNumPypandas
02  GATE

Automated quality checks

Duplicates, missing fields, inconsistent classifications and invalid timelines are caught before reporting, then repaired or quarantined.

pandaspytest
03  MODEL

SQL reporting layer

A MySQL 8 schema and 13 views with CTEs and window functions, written in SQL that SQLite also runs, so the tests can compare both.

SQLMySQLSQLite
04  REPORT

Dashboard, Excel, Power BI

A FastAPI dashboard of filtered queries, a nine-sheet Excel workbook with native charts, and a Power BI star schema with matching DAX measures.

FastAPIExcelPower BI
08

Recommendations

Three changes, each aimed at a measured cause

The recommendations are generated from the query results, so their evidence updates with the data. Each names an owner, because a finding without one rarely changes a queue.

Recommendation 1

Take manager approval off the critical path for access requests

52.8% of Access & Identity breaches sat waiting on approval. Tickets that waited breached 49.7% of the time, against 13.6% for those that did not.

Action. Publish pre-approved, role-based access bundles for the common requests, and send an automatic reminder to the approver at 50% of the SLA with escalation to their delegate at 75%.

Owner: Identity & Access lead

Recommendation 2

Route connectivity tickets straight to Network Operations

Network & VPN tickets that changed hands two or more times breached 39.0% of the time, against 19.5% when the first group kept them; carrier waits pushed the rate to 60.3%.

Action. Add portal and email routing rules that send VPN, Wi-Fi and site outage tickets to Network Operations on creation, and agree a response-time clause with the carrier so vendor waits have a contractual ceiling.

Owner: Network Operations manager

Recommendation 3

Watch the two queues with an at-risk alert

If Access & Identity and Network & VPN breached at the rest of the desk's rate (7.7%), about 2,682 breaches would not have happened and compliance would rise from 86.87% to 92.3%.

Action. Alert the resolver group when a ticket in either category reaches 75% of its target, and review both queues weekly until their breach rate is within two points of the desk average.

Owner: Service desk manager
09

Validation

Why the numbers reconcile, and what they cannot show

One definition of breached

SQL, Python and DAX agree

The SLA rules live once, in the vw_ticket_sla view. The dashboard's filtered queries, an independent pandas recalculation and the DAX measures reproduce them, and the tests hold every path to the same count.

59 pytest cases · SQLite and MySQL 8 in CI

Tested against an answer key

Each check finds exactly what was injected

Defects are injected into known tickets, one per ticket. The tests assert each of the fifteen checks flags exactly those rows, that repairs restore the original values, and that the gate is idempotent.

Row accounting: in = clean + quarantined + removed

Portable SQL, usable app

Two engines, every view audited

CI starts a MySQL 8 container and compares every view with SQLite's output, row by row. Filter values are bound parameters and sort columns are whitelisted. Every dashboard view passes an axe accessibility audit in both themes.

mysql:8.0 service · axe-core in CI

Deliberately not claimed

Simulated, so true by construction

The 61% is a property of the generator, not of a real organisation. The value is the pipeline and the method: Pareto, then mechanism, then action. Clocks run in calendar hours, and the compliance gain is an upper bound, not a forecast.

Stated in the app, the README and here

IT service management

SLA and OLA thinking, priority targets, backlog and aging, first-response and resolution clocks, queue and hand-off analysis.

SLAITSMBacklog

Data engineering & SQL

Data-quality rules with an audit trail, a MySQL schema, reporting views with CTEs and window functions, parameterised queries.

MySQLSQLData quality

Analysis & reporting

Pareto and driver analysis, a counterfactual, recommendations with owners, a dashboard, an Excel workbook and a Power BI model.

PythonPower BIExcel

Try it

Filter the desk and find the breaches yourself

The free instance may take a minute to wake up. Every ticket is simulated.