← Clinic Vitals
Data contract

Clinic Vitals: What It Needs From Your Data

Every column, published before purchaseUpdated July 2026

This is the full list of what the dashboard expects from you. It is on a public page, rather than inside the download, so you can decide whether the file fits your data before you spend anything. Everything comes from three exports you almost certainly already have, plus a one-row settings file. Match the column names and types; the order does not matter. One row is one event.

Twenty columns in total across the three tables. means required. means optional: the dashboard still works without it, that one slice just shows blank.

Visits.csv one row per service delivered

ColumnTypeReqMeaning and example
DateDateDate of the visit. 2026-06-14
BranchTextLocation or site. Single-site clinics put one value everywhere.
DoctorTextProvider name. Must match Providers.Doctor exactly.
SpecialtyTextService line. Orthodontics
ServiceTextProcedure or service. Aligners
VisitTypeTextNew or Returning — first visit versus repeat.
RevenueNumberCollected amount, net, cash in the door. Not the charge.
BilledNumberGross charge before adjustments. Drives collection rate. If you omit it, set it equal to Revenue.
PayerTextInsurance, card, cash, or whatever labels you use. Drives the by-payer widget.
PatientIDTextInternal patient key, never a name. Drives patient counts and retention.
SourceTextAcquisition channel. Drives the acquisition widget.
GenderTextDrives the age and gender footer.
AgeBandText0–17, 18–34, 35–54, 55+.
One constraint worth knowing. Source, Gender and AgeBand are patient attributes, so keep them constant for a given PatientID. If the same patient appears with two different age bands, those two widgets will disagree with themselves.

Appointments.csv one row per booked appointment

ColumnTypeReqMeaning
DateDateAppointment date. Drives no-shows by weekday, the funnel and the operations KPIs.
DoctorTextProvider on the appointment. Matches Providers.Doctor.
StatusTextExactly Completed, NoShow or Cancelled.

Providers.csv one row per provider

ColumnTypeReqMeaning
DoctorTextProvider name. This is the key used by Visits and Appointments.
SpecialtyTextTheir specialty.
WeeklyCapacityWhole numberBookable slots per week. This is the denominator for utilization and schedule fill.
RatingNumberAverage star rating, if you have one.

Plus Settings.csv, a single row with ClinicName and Tagline for the header. That is branding, not data.

Estimating WeeklyCapacity: slots per day multiplied by days per week. A dentist seeing 8 patients a day, 4 days a week, is about 32. Rough is fine, because it is only the yardstick for utilization against a target. Part-time providers get a smaller number.

Where these come from in your system

You do not need a warehouse. Almost every EMR and practice-management system can export these three things under some name or other:

This tableIn your system it is usually called
VisitsEncounters · Ledger or Production · Procedures · Completed visits · Charges
AppointmentsSchedule · Appointment book · Booking report
ProvidersProvider list · Staff or Users · Scheduling resources

For Visits, pull a line-level production or completed-procedures report for the last 12 to 24 months. Map service date to Date, rendering provider to Doctor, the procedure description to Service, the collected amount to Revenue and the charge to Billed. If your report is one row per payment rather than per procedure, that is fine, as long as Revenue sums to your real collections for the period.

For Appointments, export the schedule with a status column and rename your outcomes to the three the model expects. Most systems have exactly these three under other words, such as Seen, Failed or Broken.

In dental systems (Open Dental, Dentrix, Eaglesoft, Curve) the usual pairing is Production by Provider for Visits and the broken-appointment report for Appointments. On the medical side (athenahealth, DrChrono, Tebra, NextGen, Epic) it is a charges or encounters export plus the visit-status report. If you have no structured export at all, a CSV from your billing spreadsheet works, provided the columns line up. For a longer walkthrough of that first step, see Power BI for clinics, and for the dental specifics Open Dental and Dentrix reports.

Before you refresh, check five things

Six widgets ship with placeholder numbers

This is the part most template listings leave out, so here it is on the page you can read before buying. Six of the widgets show signals that are not in the three exports above. They arrive as clearly marked placeholders and stay that way until you supply the data behind them.

WidgetWhat shipsHow to make it real
Average wait (Operations KPI)A fixed 12 minutesAdd a WaitMin column to Appointments and point the measure at it.
Funnel, confirmed and arrivedFixed shares of bookedAdd those statuses to Appointments and compute the stage counts.
Cancellations, same-day and rebookedFixed percentagesAdd the two flags to Appointments.
Busiest hoursFixed hour rangesAdd an appointment time and group by hour.
Retention cohorts (Patients)A demo cohort tableLoad a Cohorts table of cohort month, month number and retention rate.
Review count (Providers)A calculated columnAdd a Reviews column to Providers.

Everything else on the five pages is live from your three exports. If those six matter to you more than the rest, that is a reason not to buy this, and I would rather you knew now.

Two more things the file asks of you

Neither is data, but both are part of the contract, and neither is visible in a screenshot.

If your columns line up, the rest is a refresh

Clinic Vitals is a Power BI report for medical and dental practices: five pages covering revenue, patients, providers and operations, built on the three exports above instead of a live connection to one vendor's API.

See the dashboard →

Most template sellers ship the column list inside the download, which means you find out whether the file fits your data after you have paid for it. I used to do that too. This page exists because I wrote an article taking other Power BI templates apart for hiding exactly this, and a fact-check pointed out that my own list was only available after purchase. Publishing it is the cheaper of the two ways to fix that. The placeholder table above is on this page for the same reason. If something here does not match your export and you are not sure whether it is fatal, the honest answer is usually in the first column of the tables above: required means required.