> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mangrovesystems.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Review data points

> Work through collected data one value at a time in the Events table: filter, sort, check health, export, and delete.

The **Events** table in a project's Data Inputs section lists your collected data one **data point** at a time. Each row is a single measured value with its own type, status, and alerts.

Because each value gets its own row, a data point that arrives from a data feed or the API with no value still appears in the table, showing as *Missing* with a status of *Incomplete*. A reading that was never submitted has no row at all, and clearing a value on an existing event removes its row.

## Reading the table

| Column              | Shows                                                                                                                                                                                                                                      |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Origin**          | Whether the value is original, substituted, filled in where it was missing, or reverted. Appears when substitutions are enabled on your account.                                                                                           |
| **Time Range**      | The event's start and end.                                                                                                                                                                                                                 |
| **Event Type**      | The event type that carried the value.                                                                                                                                                                                                     |
| **Data Point Type** | Which measurement this row is.                                                                                                                                                                                                             |
| **Value**           | The value in effect, with its unit. A data point recorded without a value shows as *Missing*. Where a value has been substituted, this column shows the value now in effect; the reading it replaced is in the hover card described below. |
| **Status**          | Health of the value, including any rule or evidence alerts raised against it.                                                                                                                                                              |
| **Source**          | Where the value came from, such as a data feed or manual entry.                                                                                                                                                                            |
| **Tracking ID**     | The event's external reference, when one was captured.                                                                                                                                                                                     |
| **Feedstock**       | The associated feedstock, when the event has one.                                                                                                                                                                                          |
| **Asset**           | The asset the event was attached to, linked through to that asset.                                                                                                                                                                         |
| **Created by**      | Who recorded the value.                                                                                                                                                                                                                    |

**Source**, **Tracking ID**, **Feedstock**, **Asset** and **Created by** are hidden until you turn them on. Use **Columns** to show or hide them. Your choice is remembered per project in the browser you set it in.

You can also filter by event ID without showing it as a column.

Substituted values all carry the same marker. Hover one to see how it was derived: the original reading, the method, and either the rule that wrote it or the source it came from.

<Note>
  On large projects the row count reads **of over N** rather than an exact total. Mangrove stops counting once it can tell the result set is large, which keeps the table responsive. Narrow the filters to get an exact count.
</Note>

## Filtering and sorting

Start with the **Event / data point type** quick filter at the top to narrow to the event type or data point type you care about. Add column filters for anything more specific, and combine them freely.

Filtering the **Origin** column offers four options. **Substituted** covers every value that has been changed, with **Value was missing** underneath it narrowing to the gaps that have since been filled. **Reverted** finds values that have been restored, and **Original** finds the ones never touched.

To find the gaps that are still empty, filter **Status** to *Incomplete*, which also returns values marked incomplete for other reasons.

**Filter by AI** takes a plain-language request instead of a filter stack. Ask for "anomalous data points from the last month", "data points pending review", or "data points from this month" and it builds the filter for you.

Sorting and filtering by **Value** is switched off until the table holds a single numeric data point type, because comparing values from different types is meaningless. The **Event / data point type** quick filter does not switch it on, so use a column filter:

1. Open **Filters** and add a filter on the **Data Point Type** column.
2. Set its operator to **is** or **is any of**, and pick one numeric type.

The Value filter input and the Value column sort both come alive at that point, and both tell you what to add while they are switched off. If you add other filters alongside it, keep the filter panel on **And**.

## Checking health

**Health Check** narrows the table to the values that already need attention: those whose status is *Anomalous* or *Incomplete*, and those carrying a rule alert. On accounts with evidence checks enabled it also picks up values carrying an evidence alert. It runs no new checks of its own. When nothing in the current view qualifies you get a straight confirmation: *Data checked: no issues detected.* The button appears for users with write access.

Values carrying an alert show it in the **Status** column. Alerts are raised per data point, and by default a rule that reads several values can flag any of them. A rule can be set to flag only the values it is really about, which keeps triage on the value that breached. See [Managing alerts](/data-rules/manage-alerts) for how to triage them, and [Create a Data Rule](/data-rules/create-a-rule) for choosing which value an alert lands on.

## Exporting

Click **Export** and pick **CSV (.csv)** or **Excel (.xlsx)**. The export is flat, one row per data point, and it honours the filters you have applied, so you can scope the file by narrowing the table first.

An Excel export is capped at 100,000 rows and a CSV at 1,000,000. Over the Excel cap the export fails and tells you the row count, so switch to CSV or narrow the filters. Over the CSV cap it reports a generic failure, so if a very large CSV fails, narrow the filters and try again.

The **Origin** column in the file reads `Substituted`, `Substituted (value was missing)`, or `Original`. The two substituted labels sort together, and the longer one marks the values that were empty before they were filled in.

Exports are prepared in the background. Stay on the page until the file is ready, because the download link is held by the page and is lost if you navigate away.

## Deleting data points

Select rows and click **Delete**. Because data points live inside events, the dialog asks which you meant to remove and previews the effect before anything is deleted:

| Choice                                         | Effect                                                                                  |
| ---------------------------------------------- | --------------------------------------------------------------------------------------- |
| **Delete the whole event and its data points** | Removes the events behind the selected values, along with every other value they carry. |
| **Delete only the selected data points**       | Removes just the selected values and keeps their parent events.                         |

The dialog counts the events and data points each choice would affect, and calls out cases where the choice is made for you. An event cannot exist without data points, so deleting the last value in an event removes the event as well. When both choices would delete exactly the same rows, the choice disappears. Values already used by a model run are locked, and they are skipped and reported as skipped.

<Warning>
  A selection larger than 200 data points is deleted in passes of 200. The dialog tells you how many rows this pass covers; re-select the remainder afterwards to continue.
</Warning>

## Substituting a value

A substitution replaces a data point's value without touching the original record, which stays visible with its full lineage. Substitutions are enabled per account, so ask your Mangrove account team to switch them on.

A value's first substitution is written through the API or from a data feed transformation, not from this table. See [Correct a data point value](/api-reference/corrections/set-value) for the API surface. Editing a value in the app that already carries correction history records that edit as a manual override and appends it to the history. Editing a value that has never been corrected is an ordinary edit and starts no history.

To undo a substitution, click the row to open the **Event Detail** drawer, click the data point's name to expand its correction history, and click **Restore to original**. That puts back the value in place before the most recent substitution, and the row's **Origin** becomes *Reverted*. A restore cannot itself be restored, though a later substitution on the same value can be.

Substituting a value does not recalculate anything downstream. A batch that was already generated keeps the value it was generated with.
