How do you define a KPI? Write its definition sheet
See why the same data gives three different numbers, and write the definition sheet that gets everyone to calculate the same one.
Free course. Your Maestro, an AI, .
On Monday, Lucía reports that the week's no-show rate was 10.7%. An hour later, the director presents 11.5%, from the same data. Nobody made an arithmetic mistake: each of them divided by something different. This may be the most common argument around any dashboard, and half a page of writing prevents it.
Before you see how, try something smaller. Read this program without running it and write down what you think each line prints.
Six appointments from one week. Write down the three results before you see what it prints, and why you think they come out that way. The program prints its labels in Spanish; the comments in the code tell you what they mean.
Six appointments from one week. Write down the three results before you see what it prints, and why you think they come out that way. The program prints its labels in Spanish; the comments in the code tell you what they mean.
Six appointments, three numbers
# Six appointments from one week at one site (made-up data).
# "atendida" = seen, "no llegó" = no-show, "canceló con aviso" = canceled with notice.
citas = [
{"paciente": "Ana", "estado": "atendida"},
{"paciente": "Beto", "estado": "no llegó"},
{"paciente": "Beto", "estado": "no llegó"},
{"paciente": "Carla", "estado": "canceló con aviso"},
{"paciente": "Dulce", "estado": "atendida"},
{"paciente": "Ernesto", "estado": "atendida"},
]
faltas = sum(1 for cita in citas if cita["estado"] == "no llegó")
en_pie = sum(1 for cita in citas if cita["estado"] != "canceló con aviso")
pacientes = {cita["paciente"] for cita in citas}
faltaron = {cita["paciente"] for cita in citas if cita["estado"] == "no llegó"}
# The labels are in Spanish: "Por cita, entre todas las agendadas" = by appointment,
# out of all scheduled; "entre las que seguían en pie" = out of those still on the books;
# "Por paciente" = by patient.
print("Por cita, entre todas las agendadas:", faltas, "de", len(citas))
print("Por cita, entre las que seguían en pie:", faltas, "de", en_pie)
print("Por paciente:", len(faltaron), "de", len(pacientes))
A guess is fine: it's kept as you wrote it, so you can compare. Only you and your Maestro see your predictions.
Six rows, three answers. With 402 appointments the same thing happens; you just can't see the difference at a glance anymore. If your prediction was different and you can't see why, ask your Maestro to walk through it with you.
The definition sheet: five decisions in writing
A KPI is defined when two people who've never met, working from the same data, calculate the same number. To get there, you write down five decisions:
- Numerator: what you count. "No-shows" isn't enough. If a patient shows up 40 minutes late and can't be seen anymore, is that a no-show? Write it down.
- Denominator: what you divide by. This is the decision that separates 10.7% from 11.5%. Lucía divides by the appointments still on the books, because a cancellation with notice frees a slot that can go to someone else.
- Unit: what one case is. This is also called the grain: are you counting appointments or patients? To decide where the confirmation calls go, the unit is the appointment: every lost appointment is an empty slot. For a program that follows up with patients who miss a lot, the unit would be the patient.
- Period: from when to when. A Monday-to-Sunday week, by the date of the appointment, not the day it was booked. And a week that isn't over doesn't get reported: on a Tuesday, the current week always looks better than it will end up.
- Exclusions: what's left out. Test appointments, internal staff appointments, a site that opened midweek. Whatever you leave out, write it down.
On top of those five go three lines that don't change the math but do change how the number gets used: the question it answers, the target, and who owns the definition when someone wants to change it.
Here's Lucía's complete definition sheet. Copy it as a template for your own KPIs:
# No-show rateQuestion it answers: which site gets the confirmation calls this week?Numerator: appointments where the patient didn't show up or call.Denominator: active appointments = scheduled appointments minus appointments canceled with at least 24 hours' notice.Unit: the appointment (a patient who misses two appointments counts twice).Period: Monday-to-Sunday week, by appointment date. Complete weeks only.Exclusions: internal staff appointments.Breakdown: by site; the whole clinic is calculated from the totals.Target: 10% or less.Owner of the definition: Lucía, operations coordinator.The breakdown line says the whole clinic's rate is calculated from the totals. It looks like a detail, and it's the subject of the next page.
The unit is not the row
A common mix-up is thinking the KPI's unit is the table's row. In the clinic's data, each row sums up one site, one specialty and one week: 117 rows for the quarter. But the rate doesn't count rows: it adds up the appointments inside them. If someone calculates "the percentage of rows with high no-shows," they're measuring something else.
Whenever you open a new table, ask two separate questions: what does one row represent, and what unit does your KPI count? Sometimes they're the same; here they aren't.
Check yourself: Beto missed two appointments in the same week without calling. Using Lucía's definition sheet, how many no-shows does he add to that week's rate?
Try it
The second number on Lucía's dashboard is schedule occupancy. Write its definition sheet with the same fields: the question it answers, numerator, denominator, unit, period, exclusions and target. For each site, specialty and week, the clinic's data has the open appointment slots and the appointments scheduled.
There's no single right answer, but there is a test: if you hand your sheet to someone else with the same data, do they get the same number you do? If you're not sure what goes in the denominator, ask your Maestro.
Write the definition sheet for "schedule occupancy" on Lucía's dashboard: question, numerator, denominator, unit, period, exclusions and target.