DAWN Report Builder — User Guide

← Back to the report builder

Getting started

The Report Builder lets you build a report about your patients, their INRs and doses, appointments, events and more — without writing any code. The figures come straight from DAWN, so a report always reflects the current data.

There are two ways to build a report, and you can mix them:

  • Describe it in plain English — type what you want (for example, “active patients in Clinic A with TIR below 65%”) and the builder fills in the steps for you. You can then tweak anything before running.
  • Build it step by step — work through the numbered steps yourself, choosing the report type, what it shows, and any filters.

Either way you finish on a Review page that explains, in a sentence, exactly what the report will produce — so you can check it before it runs.

Permissions. You can build any report your DAWN login already lets you see. The builder doesn’t give access to anything you couldn’t otherwise view.

Describe a report

On the first screen you can type a description instead of clicking through the steps. Write it the way you’d explain it to a colleague.

Examples
“list of active patients in Clinic A”
“count of patients by clinic with average TIR”
“patients with any INR over 5 in the last 3 months”
“first five INR tests per patient, percentage in range”
“diagnosis and drug list for AF patients, grouped by diagnosis”
“patients whose most recent INR is after 01/01/2026”
“patients whose last INR was within 6 months but more than 3”

The builder understands things like:

  • What to count or list — patients, INR tests, appointments, events, and so on.
  • Grouping — “by clinic”, “by diagnosis”, “by month”, and even two levels (“by clinic then by sex”).
  • Filters — clinics, diagnoses, drugs, anticoagulants, age, sex, TIR and INR ranges, and more.
  • Dates & recency — “in the last 6 months”, “this year”, “after 01/01/2026”, “between 01/01/2026 and 01/04/2026”, and two-sided windows like “within 6 months but more than 3” or “more than 3 months ago”. On a patient list these apply to the most recent INR date.
  • “Top / bottom N” — “top 20 patients by number of DNAs”.
  • Either / or and except — “Clinic A or Clinic B”, “all diagnoses except AF”.
It shows its work. After you describe a report, the Review page lists what it understood and anything it ignored (shown as small chips). If a word was ignored, it usually just isn’t something the builder filters on — add it as a filter by hand if you need it.
Columns from a description. If you mention a field (for example a GP), it’s added to the report’s standard columns rather than replacing them — so a list never collapses to a single column. The patient’s NHS / national number is always included on a described patient report. If you want only the columns you list, say so: “show only name and clinic”.
“Last INR” means the last actual result. Last INR, INR Date and Last dose come from the patient’s most recent resulted INR — a scheduled or not-yet-resulted test is never shown as the last INR. When you filter on the most recent INR date, the report also adds an INR Date column so you can see the date that qualified each patient.
Questionnaire reports are best built by hand. You can describe a questionnaire report, but it only produces a basic list — your site’s bespoke questionnaire fields (the actual answers, e.g. CrCl or a summary result) are picked from live lists in the step-by-step builder. To report on those answers, choose Build it manually, pick the Questionnaires report, then use Load form fields on the Columns page. The describe box can’t set those site-specific fields.

1. Choose a report type

The report type decides what each row of your report represents. They’re grouped into three areas:

Patient & clinical reports

Everyday reports about patients, their INRs, doses, events and groups.

Report typeOne row is…
Patient listone patient
INR / TIR summarya total or percentage for a group (a summary you can chart)
INR readings / treatments listone INR test / treatment
Diagnosis & drug listone patient, with their diagnosis and drug
Patient diagnoses list / Patient drugs listone diagnosis record / one drug record
Patient events list / Patient allergies listone event / one allergy
Visits / appointments listone appointment
Clinic diary / capacityone clinic slot
Patient group membershipone group membership
Questionnairesone questionnaire
Messages / letters sentone message recipient
Treatment activity by cliniciantreatments grouped by clinician
% Time in Range bandspatients grouped by their time-in-range band

Audit, activity & admin logs

For administrators: what changed and when, status events (stops, activations, DNAs), plus logins, user profiles and system settings — Audit trail, Workflow events log, User login audit, HC Professional daily activity (how many INRs each clinician authorised and how long they were logged in, per day), User profiles / permissions, and System settings.

Interfaces

HL7 / interface messages — the Interface message log and Inbound interface messages (the HOLD monitor).

Not sure which to pick? For most “who are my patients that…” questions, start with Patient list. For “how many / what percentage…”, start with INR / TIR summary.

2. Rows or totals?

Next you choose how the report is shaped:

  • Rows of data — a line for each patient or record, like a register. Choose this when you want a list you can scan or export.
  • Counts & percentages — totals broken down into groups (for example, by clinic or by month), which you can also chart. Choose this when you want a summary rather than every individual.

Some report types only offer one of these — for example the INR / TIR summary is always counts, and the Patient list is always rows.

3. Columns & measures

What you pick here depends on the shape you chose:

If you chose Rows of data

Tick the columns you want to see. Each report type starts with a sensible default set, and you can add or remove any of them.

The Columns — order, hide, decimals panel gives you fine control over how the columns appear:

  • Reorder — drag a column chip left/right (or use the ▲ ▼ arrows) to change the left-to-right order.
  • Hide — leave a column out of the table and the downloads, while keeping it available to sort by.
  • Decimal places — on number columns, the dp selector sets how many decimals to show: auto = exactly as calculated, 0 dp = whole numbers (99.7 shows as 100), and so on.

You can also set a sort order here — add one or more sort levels (e.g. by Last INR descending), and optionally keep just the top/bottom N rows after sorting.

If you chose Counts & percentages

  • Pick a “group by” — the dimension the totals are split by (clinic, diagnosis, month, age band, and so on). You can add a second level of grouping too.
  • Pick one or more measures — the things being counted or averaged (patient count, number of tests, average TIR, % of INRs in range, and many more).

4. Filters

Filters are optional — leave them blank to include everyone. They’re grouped under headings (Patient, Plan, Treatment, and so on); click a heading to open it. A section opens automatically if it already has something set.

Filter types include single-choice dropdowns, multi-select pickers (with an “is none of” option to exclude values), date ranges (with quick picks like “Last 30 days”), number ranges, and yes/no switches.

Two filters are set by default on patient reports:
Application area = Anticoagulation — so you see anticoag patients, not other application areas.
Treatment plan status = Not Stopped — explained in the next section.
You can change either at any time; choosing All removes the restriction.
Keep it fast. A Clinic, Status or date-range filter makes a report run quickly. A date range is especially worth setting on the log-style reports (audit, interfaces, workflow).

Treatment plan status — which plans count

A patient can have more than one treatment plan over time (for example an old plan that was stopped and a current one). Patient reports look across all of a patient’s plans, and the Treatment plan status selector decides which of those plans count towards the report.

ChoiceWhat it includes
Not Stopped (default)Every plan status except New and Stopped — i.e. Active, Suspended, Admitted, ActiveAdmitted, Discharged and NonAttending. This is the everyday “current caseload” view.
ActiveOnly Active plans.
Stopped / Suspended / Admitted / …Only that one status.
AllEvery plan, whatever its status (including Stopped and New).

If you need several specific statuses at once (say Active and Suspended only), use the Treatment plan status (pick exact ones) multi-select instead.

Good to know. Totals and percentages always count each patient once, even if they have more than one plan in scope. In a list (rows) report, a patient who has more than one in-scope plan can appear on more than one line — one per plan. This is rare, and the status filter is the way to narrow it.

5. Review

Before the report runs you’ll see a plain-English sentence describing exactly what it will produce — the report type, what it’s grouped by or which columns it shows, and every filter you’ve set. If you described the report in words, your original wording is shown here too, along with chips for what was understood and what was ignored.

Read the sentence back to yourself. If it doesn’t match what you meant, click Back and adjust — it’s much quicker to fix here than after running.

6. Results & export

On the results page you can:

  • Sort by clicking a column heading; click the same heading again to reverse the order.
  • Rename a column — click the (pencil) icon on a column heading to give it your own label (it carries through to the downloads and a saved report).
  • Chart a counts report (bar, line or pie) where it makes sense.
  • Export to a file (CSV / XML), or copy the table to paste into another document.
  • See the SQL — click Show SQL to view the exact query the report generated, with a Copy SQL button to paste it elsewhere. It’s also on the Review page (before you run), so you can check the logic, or see precisely what was asked of the database if a figure looks unexpected.
  • Save the report so you (or colleagues) can run it again later.

Column order, hiding, decimal places and the sort order are all set on the Columns step (see section 3) and are remembered when you save the report.

The numbers are live. A saved report stores your choices, not a snapshot — each time you run it, it re-queries DAWN, so it always reflects current data.

Saved reports

Saved reports appear on the first screen. Each one shows its name and a short description of what it does, and has a Run button. When the list gets long, a search box appears so you can find a report by name or description.

Anyone can run a saved report. Deleting a report that someone else saved asks for an admin password, so reports aren’t removed by accident.

Check the dates before you run. A saved report keeps the fixed dates you set when you saved it — they don’t roll forward. Opening one takes you to the Review page (it doesn’t run straight away), and if it has a date range you’ll see a “Heads up — fixed dates” note showing the stored dates. If you need a different period (e.g. this week instead of last), click Change on Filters and update the dates before running.

Combine several reports into one document

You can bundle two or more saved reports into a single document — handy for a clinic pack or a regular set you always run together. Tick the checkbox next to each saved report you want, optionally give the bundle a Pack title, then click Combine … into one document.

The result is one page with each report shown as its own titled section (run live, so the figures are current), with Print (use this to save as PDF too) and Download CSV buttons for the whole bundle. Use Back to return to the builder.

Check SQL (advanced)

If you write a report query by hand in SQL, the Check SQL page (link at the top of the home screen) reviews it before you send it to a developer. Paste your SELECT query and click Check this query. You get back, in plain English:

  • Any syntax errors or unknown tables/columns — checked against DAWN's real database, with the exact message and a hint on how to fix it.
  • What the query will actually show — the precise list of output columns (the headings the report will have) and their types, straight from SQL Server. This is the quickest way to spot that a query won't return what you expected.
  • What you asked for vs what it shows (optional) — fill in the "What should this report show?" box and it cross-checks the columns you described against the columns the query actually returns (e.g. "asked for Last INR — not found in the output"). Columns are reliable; filters (status, dates) are a softer hint. It's a cross-check, not a guarantee the rows are right.
  • Things to check — common pitfalls such as a JOIN with no ON condition, an INNER JOIN that silently drops patients with no matching record, no WHERE clause (so it returns everyone), SELECT *, and DAWN-specific reminders (for example, using the scheduled clinic-slot day instead of the clinically meaningful INR date).
DAWN parameters are understood. If your query uses DAWN's #[Name: Field, Operator]# parameters (for example a date range, #[DateFrom: ...]# / #[DateUntil: ...]#), paste it as-is — the page recognises them, lists which ones it found, and checks the rest of the query around them. The field written inside a #[...]# is filled in by DAWN when the report runs, so it isn't separately checked here. Queries with hardcoded values instead of parameters work just the same. You can also paste the builder's own Show SQL output as-is — including its trailing Parameters: list and @p0-style parameters; the page ignores the parameter list and checks the query.
Your query is never run. The page asks SQL Server only to describe the query — it works out the columns and checks the names without executing it — using a read-only login. Nothing in the database is changed. If you paste anything other than a SELECT, it tells you and stops.
It's a check, not a sign-off. The page tells you what a query does, not whether that's what you meant clinically. A developer still reviews the query before it's used — this just clears the basic mistakes first so that review is quicker.

Tips & FAQ

How do I get each patient’s first five INR tests?

On the INR readings / treatments list, set the Test number within plan range to min 1, max 5. This matches DAWN’s “first five visits” reports.

How do I find patients overdue for an INR?

On a patient report, set the Overdue for INR filter to Yes. It uses the clinically-relevant INR date — a test that was due and hasn’t been resulted, on an active plan.

Why did a count change from last time?

Reports are live, so counts move as patients are added, treated or stopped. If a number looks very different, check the Treatment plan status and date filters first — they’re the usual cause.

In-range / above / below — whose range?

The “in range” measures judge each INR against that patient’s own target range, not a fixed band, so a patient on a 2.5–3.5 target is assessed correctly.

The report is slow.

Add a Clinic, Status or date-range filter. Narrowing the data is the quickest way to speed a report up.

Still stuck? Note down the report type and the filters you set, and pass that to your DAWN system lead — it’s enough for them to reproduce exactly what you saw.