Student guide: Data

The Data tab shows the rows behind the chart you are looking at.

The Data tab shows the rows behind the chart you are looking at. It also shows Data health, which lists what the app found in the file. Look here whenever a chart surprises you, and before you trust any chart of your own file.

This page also covers the Filters band and getting a file in, because together they decide what the Data tab shows.

1. Getting results in

Choose the source at the top right of the page.

Source What it does Use it when
Demo Loads the bundled example data, three years of duplicates, CRMs and blanks from two laboratories. Learning the app, or seeing what a finding looks like.
Upload Reads your Excel workbook (.xlsx, .xls) or CSV file, up to 50 MB, laid out as the templates. The app then opens the Overview. Analysing your own project’s QC.
Projects Opens a project you saved to your account, with every upload saved to it merged together. Signing in opens the project you changed last. Coming back to a project’s QC as new results arrive.

The app reads an uploaded file into memory for your session only, and nothing changes the file. After an upload it asks Save this upload to a project?. Only if you choose Save is the file kept in your Toolkit account, where only you can see it. It stays until you delete it in Manage projects, under the Projects button at the top, or close your account.

The project comes from a PROJECT column in the file, or you choose one. A file that names several projects is split between them. A PROSPECT column, or a prospect you type, lets you open one prospect at a time. An account holds up to 20 projects or 1 GB for now.

Results come in over time, so a project grows as you save each new file. Lab jobs the project doesn’t have are added. A lab job it already has, such as a re-issued certificate or results you corrected, is replaced whole by the new file’s results after the app asks. Lab jobs whose results haven’t changed are left as they were, so you can save a corrected file whole.

If you aren’t ready to save, choose Not now and look at the data. Use Save to project… under the file box when you are ready. After a save, the note stays until you close it.

In Manage projects you can also rename a project, take an upload back out, or take lab jobs out. To find a lab job, type part of its number in the Lab jobs box. A click picks one job, Ctrl+click adds another and Shift+click a run of them. Lab jobs you take out stay out until you upload them again.

Export project saves a project as an Excel workbook, as the app holds it. Export all saves every project in one zip file. Delete all projects… deletes every project in your account at once, after asking. Deleting is final, so each delete offers an export first.

The demo data

Sheet Rows Laboratories Covers
Duplicates (Precision) 46,104 ALS (165 despatches), SGS (3 despatches) Returned 16/11/2022 to 10/11/2025. Five check stages at ALS.
Standards and blanks (Accuracy, Contamination) 39,919 ALS only (174 despatches) 20 company CRMs (ACA-01 to ACA-24, EXP-1 to EXP-3), about 45 lab standards, one blank (FB).

The demo has about 135 analytes, each named element_method_units. Cu_MEICP41s_ppm is copper by the ME-ICP41s method in ppm. Cu_MEOG46_pct is the same element by an ore-grade method in percent. The app treats them as different analytes, because their precision and detection limits differ.

Preparing your own file

The app expects your database’s export in the layout of the templates. CSV/Excel Templates and SQL Views in the Filters band downloads them. You get two example workbooks, one for duplicates and one for standards and blanks, holding the demo data in the expected layout. You also get SQL views that extract your data in that layout, and a PDF listing every field.

Duplicates sheet, one row per pair: LABCODE, DESPATCHNO, LABJOBNO, ASSAYNAME, CHECKSTAGE_CK, SENDDATE, RETURNDATE, ASSAYVALUE_OR (Sample 1), ASSAYVALUE_CK (Sample 2), LOWERDETECTION, ORIG_SAMPLE, CHECK_SAMPLE.

Standards and blanks sheet, one row per CRM or blank result: LABCODE, DESPATCHNO, LABJOBNO, ASSAYNAME, STANDARDID, STANDARDTYPE, SENDDATE, RETURNDATE, ASSAYVALUE, STANDARDVALUE (the certified value), STANDARDDEVIATION (the certified SD), LOWERDETECTION, CHECKID.

Rules the app applies when it reads a file:

  • If ASSAYNAME is missing, the app builds it from the element, method and units columns.
  • If a column the app needs is missing, the upload stops with This file doesn’t match the template. Missing column(s): …
  • A workbook with both sheets fills the whole Overview. Select Sheet chooses the sheet the Charts, Data and Statistics tabs use. Choosing a QC type picks a sheet that fits, and choosing a sheet switches the QC type to match.
  • Every new upload opens on the Overview. A notification says what was checked, File checked: · N rows · …, with a link to Data health.

How a result is read

Laboratories write results in several ways, and the app reads each the same way everywhere:

Written as Read as Why
<0.2 Left out as below detection. A result below detection is never charted or used in a statistic.
-0.2 where the LLD is 0.2 Left out as below detection. A negative that isn’t minus the LLD is left out too, and Data health warns. Some databases write a below-detection result as minus its detection limit.
-99, -999, -9999 Missing, and Data health warns. A negative made only of 9s is a database’s “no data” code, not a result.
0.005 where the LLD is 0.01, or any value under the LLD Left out as below detection. Some databases write a below-detection result as half its limit.
>100 100. The result is above the method’s range, and the number is the ceiling.
LNR, IS, NSS or other text Missing. The sample was lost, insufficient or not submitted, so there is no result.
0 Missing. A real result of exactly zero is never right. Below detection is written in one of the ways above.

A duplicate pair with a result below detection is left out as a pair, because it needs both results to give a difference. Below-detection results are always left out, and nothing on a chart mentions them.

Blanks are the exception. Below detection is what a clean blank reads, and trace contamination shows as values just above it. So a blank below detection is kept at half its limit and counts as a clean blank. The blanks chart draws it as an outlined bar.

The app reads dates day-first, so 12/11/2025 is 12 November, unless the column shows otherwise. It also reads Excel serial dates. A date after tomorrow is read as missing.

Why this matters: every chart orders results by date, and a result the app can’t read is missing from every check.

2. The Filters: telling the app which results to use

The Filters band sits under the tabs and applies to the Charts, Data and Statistics tabs. On the Overview it is greyed out, because the Overview covers all the data. On a narrow screen it folds to one line. Tap it to open it.

QC type

QC type chooses what to look at, and the other filters change with it.

Choice The sheet The sample
Precision Duplicates The same material assayed twice.
Accuracy Standards and blanks, the standards A CRM with a certified value.
Contamination Standards and blanks, the blanks A sample with none of the element in it.

Dates and despatches

Select by chooses Date range or Despatch No.

  • Date range starts on the latest 12 months of the data. If the laboratory you pick has nothing in that range, it moves to that laboratory’s own latest 12 months and tells you.
  • Date to use for data extraction says which date the range applies to. Laboratory return is when the results came back, and Despatch send is when the samples left. Return date is the default, because that is when a laboratory problem shows itself.
  • Despatch No lists the laboratory’s despatches, and you can choose up to 20. As in Windows, a click picks one, Ctrl+click adds or removes another, and Shift+click adds every despatch from the last one clicked. Use it to look at the exact despatches a finding names.

Why a year by default: a QC chart of three years has so many points that a recent change is invisible. The Overview looks at everything, and the charts start on the recent past.

Laboratory, suite, analyte, stage and CRM

Control What it does
Laboratory The laboratory whose results are charted. The demo has ALS and SGS.
Analysis Suite The laboratory’s method package. The list starts on the first suite, not on All Suites, so that results from different methods aren’t mixed. Choose All Suites when you mean to pool them. Rows with no suite are kept whichever suite you pick.
Analyte The element, method and units. The list shows only analytes with results for the laboratory, the stage or CRM, and the dates.
Sample check stage (Precision) The stage the duplicate was taken at, such as Field Prep Stage, Crushing Stage or Pulverising Stage. Each stage has its own expected precision, so look at one at a time.
CRM type (Accuracy and Contamination) COMPANY_STD (your project’s CRMs), LAB_STD (the laboratory’s own standards) or COMPANY_BLANK. Accuracy starts on the first non-blank type, and Contamination on the first blank type.
CRM (Accuracy and Contamination) Which CRM or blank. You choose one at a time, except on the Box and whiskers and Z-Score charts. There you can choose several with Ctrl+click and Shift+click, as for Despatch No.

When a filter’s old value isn’t in the newly chosen data, the filter moves to the first value and tells you. The notification reads Analyte “X” isn’t in this data for the current filters, so “Y” is shown. Watch for it, because it means the chart shows a different analyte from the one you asked for.

Why one suite, one stage, one CRM: each is a different population with its own precision, bias and detection limit. Mixed together, a chart’s control lines are the average of two things and describe neither.

3. Data health: what the app found

The Data health bar at the top of the Data tab sums up the check of the file in one line:

DATA HEALTH · Demo data · 46,104 rows · 1 warning

Click Show details ▾ on the bar to see each finding. Each one shows its status, Warn or Note, the message, the sheet and group it belongs to, and a View rows button. Every message starts with the number of rows, says why it matters and ends with what to check.

Results below detection aren’t findings. They are always left out, as section 1 explains, so Data health doesn’t list them. Other flagged rows stay in the charts, and the checks are about how those rows are read.

The checks, and why they exist

Check What it catches Why it matters
Missing values A blank in a key column: the lab, despatch, analyte, date, detection limit, check stage or CRM. A chart or check that needs the blank column leaves these rows out. Check the export for the blank cells.
Results written as text Lab codes such as LNR for not received or IS for insufficient sample. The app reads them as missing. Check whether the lab still owes these results.
Zero results A result of 0. The app reads it as missing. A 0 charted as a real result would be a huge relative difference or a wildly low CRM.
No-data codes -99, -999 or -9999. The app reads them as missing. Read as a number, the code would plot as a wild value. Check whether the lab still owes these results.
Results written as > The app reads them as the value. A note, not a warning. It tells you which convention was applied.
Negative results that aren’t the LLD A negative that isn’t minus the row’s detection limit. Left out, as below detection. It is a different code or a wrong LLD. Check the LLD and how the lab reported these results.
Duplicate pairs with a missing result A pair with only one of its two results. A pair needs both results, so the app can’t check it. Check whether the lab still owes the missing results.
Results above the upper detection limit Results over the method’s range. Each value is a limit, not a measurement, so the CRM checks leave them out. Check whether the lab re-assayed them by an over-range method.
Dates that couldn’t be read A date in a form the app can’t read. Date filters and time charts leave these rows out. Check the date format in the export.
Dates in the future The app reads them as missing. The usual cause is a typo in the year, or the day and month swapped. Check these dates in the export.
Send date after return date A despatch returned before it was sent. A despatch can’t come back before it was sent. Check whether the two dates are swapped or one is mistyped.
Dates more than 12 months from the lab’s others Rows far from the rest of the lab’s work. These rows sit apart on the time charts. Check the year for a typo, such as 2009 for 2019.
Detection limits of 0 or less An impossible lower limit. Results can’t be checked against it, and the threshold and blank limit are multiples of the LLD. Check the method’s limit in the export.
Upper detection limits of 0 or less An impossible upper limit. The app reads it as none, so the charts and statistics ignore it.
CRM standard deviation of 0 or less 158 demo rows have no SD, for example on EXP-3, ACA-06 and ACA-20. The CRM’s control limits need a standard deviation above 0. Check the certificate values in the export.
CRM certified value missing or 0 or less A CRM row with no usable certified value. Bias is measured against the certified value, so the app can’t check these results. Check the certificate values in the export.
CRMs with more than one certified value The same CRM and analyte with two certified values. Its bias then depends on which value each row carries. Check for a typo or two certificates mixed together.
CRMs certified above the upper detection limit 22 demo rows, for example ACA-01 for Cu_MEICP41s_ppm. Their results can only read at the limit, so the CRM checks leave them out.
Check stages the app doesn’t recognise A note. They use the general default limit unless you set one in Rules.
CRM types the app doesn’t recognise A note. The app treats them as company CRMs.
Analytes in two units with similar values Cu in ppm and Cu in percent with medians within a factor of 10. Two units are normal, but similar values suggest a wrong unit. Check the unit is right.
Rows repeated exactly The same row twice. Repeated rows count twice in the statistics. Check the export for rows written twice.
Certificates also in the uploaded data A note, in a project only. Rows of your upload from a certificate also accepted on the Lab files tab: the same certificate number in LABJOBNO, or the same despatch number with one of its samples. The app uses the uploaded rows and leaves out the certificate’s copy, so nothing counts twice. Check the export holds all of each certificate.

View rows opens the rows behind a finding, as written in the file. Each row shows its row number in the sheet, counting the header as row 1, so you can fix it at the source. Download these rows (CSV) saves them, and Download every flagged row (CSV) at the foot of the card saves them all. The file is named QC Analytical Results data health - - - .csv.

Why this comes before the charts: these are errors in the data, not in the laboratory. They are the usual reason a chart looks wrong. They aren’t tolerances, so the Rules window can’t change them.

4. The table

Under Data health, the title says which sheet you are looking at: Precision Raw Data, Accuracy Raw Data or Contamination Raw Data. The table holds exactly the rows the current chart uses. These are the rows for the laboratory, suite, analyte, stage or CRM and dates in the Filters, less any above the upper detection limit if that box is ticked. The chart’s Threshold factor is not applied here, so pairs the chart greys out are still listed.

QC type Columns
Precision DESPATCHNO, LABJOBNO, SENDDATE, RETURNDATE, CHECKSTAGE_CK, ASSAYNAME, ORIG_SAMPLE, ASSAYVALUE_OR, CHECK_SAMPLE, ASSAYVALUE_CK, LOWERDETECTION
Accuracy and Contamination DESPATCHNO, LABJOBNO, SENDDATE, RETURNDATE, ASSAYNAME, STANDARDID, CHECKID, ASSAYVALUE, STANDARDVALUE, STANDARDDEVIATION, LOWERDETECTION

Each column has a filter box above it, and a search box covers the whole table. The table shows 10 rows a page, with page buttons below it. The buttons above the table Copy the rows, download them as CSV, Excel or PDF, or Print them.

Example. Keep the demo’s defaults of ALS, Ag_MEICP41s_ppm, Crushing Stage and the latest year, set Analysis Suite to MINE-Core, and the table has 11 pairs. Sort by ASSAYVALUE_OR to find row 7, sample AC033246 at 53.4 ppm against its duplicate AC033247 at 65 ppm. That is a 20% difference at a high grade. It is why the Scatter chart for these filters shows one pair far from the X = Y line.

Why the table matters: a chart shows a point, and the table shows which sample it was, in which lab job, on which date. That is what you need to query the laboratory or find the sample in the store.

Exercises

  1. Read the health check. Open the Data tab and the Data health bar on the demo data. What is the warning, and what does the message tell you to check? Open View rows and note how the app shows the original values.
  2. Follow a filter change. On the Charts tab, change Laboratory to SGS and watch the notifications. Which filters moved to a new value, and why? SGS has three despatches and a different suite.
  3. Below detection. Upload a copy of the demo duplicates in which one pair’s Sample 1 reads <0.2. Which chart loses the pair, and does anything on the chart say so?
  4. Find a pair. With the defaults, find the pair AC033246 / AC033247 in the table. Work out its relative difference by hand, using MPRD% = (a − b) / ((a + b) / 2) × 100. Is it inside the Crushing Stage’s 20% limit?
  5. Your own file. Export your project’s duplicates with the SQL view from the templates download, upload the file, and read Data health before anything else. Which checks fire, and which are problems in the export rather than at the laboratory?