Case studies / 08

Records spread across dozens of tables, joined on the values they share

We built Data Constellation, a free tool that finds the values several spreadsheets have in common (IDs, codes, dates and names) and shows how the records connect through them. It runs in the browser, so files are never uploaded. We tested it on a real evidence pack from our own work: one source document extracted into 32 tables.

Client
Evidence Systems (our own project)
Funded by
Evidence Systems
Period
October 2026 to date
Service
Data System Build (the linking method it shows)
Related service
Database Audit
Status
Live, free
Runs
In the browser; files are not uploaded
Tool
constellation.evidencesystems.co.za

Live platform

Data Constellation

The tool is free to use. Start with its example data, or drop in your own spreadsheets: they are read in your browser and go nowhere else.

Data Constellation with the Data drawer open on Links found, listing each shared column and the tables it joins, beside a trace of the example data
  • Trace

    Follows one value out to every record that holds it, then on to what those records also share.

  • Constellation and Orb

    The whole dataset as connected points, laid out flat or on a turning sphere.

  • Links found

    Every shared column the tool detected, with noisy ones switched off and the reason given.

  • Search

    Find any value and open the records that hold it.

  • Export

    The picture as a PNG, and the links as a CSV.

  • Example data

    Made-up datasets, so you can try it without your own files.

The tool shows how records connect. It does not change your files, and nothing you load is sent to us.

The problem

Evidence work rarely lives in one table. A single report becomes a table of sources, a table of indicators, a table of places, a table of findings and a table of quotes, joined by IDs that sit in different columns with different names. Some cells hold one ID; others hold a list. Dates are written three different ways.

The joins are what make the evidence traceable, but they are hard to see. Before you build reports on a set of tables, you need to know which columns really link, which links are noise, and which records hang off nothing.

What we did

Read whatever people actually have. CSV, TSV, Excel (every sheet becomes a table), JSON, and zip files holding any of these. Files inside a zip that are not tables, such as PDFs and readme files, are left out and counted.

Profiled every column. Each column is typed as a date, a number, a short label or long text. Only dates, short labels and whole-number columns named like an ID or code can link; decimals and long text never do. Dates written in different formats are normalised to one.

Linked columns on evidence, not names alone. Two columns in different tables link if they share at least two values and at least 30% of the smaller set of values, or if they have the same name and share at least one value. Cells that hold a list of IDs are split, so a record links to every ID in its list.

Switched off the noise, and said why. Status and category columns, catch-all ID lists and columns where every record holds the same value start switched off, with the reason shown. The user can turn any of them back on, switch off any link, or link two columns by hand.

Kept the files in the browser. Files are read in the browser tab; nothing is uploaded or stored. With a visitor's consent, analytics count visits and which features are used. Nothing about the files is sent: no file names, column names or values.

What we built

  • Three ways to look at the same links: Trace, Constellation and Orb
  • Hover and click cards: every record behind a shared value, grouped by table, and the closest related records for any record
  • A drawer listing the tables, the links found, the brightest points and the switched-off columns
  • Colour by link type, by table or point by point, with a legend
  • Search, keyboard controls, and export to PNG and CSV
  • A made-up example dataset that loads on first visit
  • Click card for one shared indicator ID, listing the records that hold it, grouped by table
    A link point's card: every record that shares the value, by table.
  • Click card for one finding record, with its linked values and a list of its closest records
    A record's card: its linked values, then its closest records.
  • The Export menu open, offering the picture as a PNG and the links as a CSV
    Export: the picture as a PNG, the links as a CSV.

The work in figures

On a real evidence pack from our own database: one source document extracted into tables. The pack is not published.

  • 32 tables read
  • 2 non-table files skipped
  • 266 records reached by Trace from the source ID
  • 30 tables those records sit in

From our test on 21 October 2026.

What changed

We can open any new set of extracted tables and see in minutes whether the IDs join up, before any reporting is built on them.

Gaps show as gaps: a record that links to nothing is visible, not hidden in a join.

Anyone can do the same check on their own spreadsheets, free, without sending us their data.

Limits

It shows how records connect; it does not clean or correct the data. The linking rules are automatic, so a link can be missed or wrongly made, which is why every link can be switched off or added by hand. Very large datasets fall back to a simpler view that shows link points instead of records. Colours and settings are not saved between visits.

Relevant to

  • M&E and reporting teams holding programme data across many spreadsheets
  • Research teams with evidence extracted into linked tables
  • Anyone checking whether a database export joins up before building on it

Try it on your own spreadsheets: open Data Constellation. If the links don't line up, a Database Audit is where we'd start.

Talk to us about a similar problem.