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

# Analyze saved values without changing the Model

> For agents: answer financial questions from saved tables, compare and rank existing values, read history, check a proposed formula without saving it, and know when a new result needs a saved row and the user's authorization.

A read-only analysis starts from saved Model content. Inspect the existing Table blocks, Variables, Scenarios, and source information, and answer from them without creating a new calculation.

## Read a saved table

Use `inspect_table_blocks` with its `read` block and the table that holds the values:

```json theme={null}
{
  "scenario": "Main",
  "read": {
    "target": "Revenue by Customer",
    "formula_origins": "all"
  }
}
```

To narrow a follow-up to a visible row, cell, or subtree, copy row and column references from the response into `rows` and `columns`, and use `depth` to include the items beneath a selected row. [Read and explain formulas](/agents/read-formulas.md) covers everything a read returns.

## Compare or rank existing values

* Use the saved table's existing Scenario or time comparison when it already answers the question.
* To compare Scenarios the table does not save, give the read a `comparison` object, as [Read a table that compares Scenarios or periods](/agents/read-formulas.md#read-a-table-that-compares-scenarios-or-periods) shows. The saved table stays as it is.
* For a top-items question, read the item rows and rank them from the returned values yourself; the read does not sort.

## Read the Model as it was

* A historical read uses `as_of_point` against the same saved table and the same target, which keeps a before-and-after comparison tied to one stable artifact. [Read the Model at an earlier point](/agents/mcp-tools.md#read-the-model-at-an-earlier-point) lists the point types.
* The `compare` block shows how a table changed since a saved change, named by `before_change_log_id`. It lists the rows removed or added since then under `row_membership`.

## Check a proposed formula without saving it

Only a new table can be checked without saving. `edit_table_blocks` `create` with `dry_run: true` validates the proposed table's structure, references, and formula syntax, runs the write in a transaction it rolls back, and returns `valid`, `warnings`, and `model_effects`. `update`, `reshape`, `copy`, `delete`, `set_time_rollup`, and `update_calendar` take no `dry_run`.

* A dry run checks the write. It returns no values, because calculation does not run, so it does not create a calculated series to inspect.
* `update`, `reshape`, and `delete` take no dry run. Checking a change to an existing table means making the change, which needs the user's authorization. When the user wants to see a change before adopting it, make it in a Scenario other than Main.

[Validate and verify formula writes](/agents/validate-and-verify.md#validate-before-you-save) has the details.

## Create a new result only when authorized

A new ratio, signal, or comparison that does not exist yet needs a saved, visible Model artifact. If the user authorizes that work, use `edit_table_blocks` to add a row and its first formula, then inspect the saved result.

If the user asked for no Model changes, explain what you can answer from the existing information, and name the saved change a new calculation would require.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.