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

# Build charts

> Plot the metrics that matter with time series, top list, and big number charts, then export, duplicate, and move them between dashboards.

export const feature_0 = "Custom charts"

export const verb_0 = "are"

Charts are the contents of a dashboard. Start from a preset that covers a common metric, or build your own from a SQL measure.

<Note>
  {feature_0} {verb_0} only available on [Pro and Enterprise plans](/docs/plans-and-limits#plans).
</Note>

## Create a chart

On a dashboard you created, click <Icon icon="plus" /> **Chart** to open the chart editor. To change an existing chart, click the <Icon icon="pencil" /> icon on the chart itself.

Charts can only be added to dashboards you create. To add charts to the built-in **Cost and quality** dashboard, [clone it first](/docs/observe/dashboards/create#create-a-dashboard).

## Chart editor options

* **Chart type**: Determines the visualization and which other options are available:
  * **<Icon icon="chart-column" /> Time series**: Plot metrics over time as lines or stacked bars. Time series charts help you spot trends, anomalies, and correlations.
    <Expandable title="screenshot">
      <img src="https://mintcdn.com/braintrust/b11zJxKLgN0Qiq8B/images/guides/monitor/monitor-custom-chart-editor.png?fit=max&auto=format&n=b11zJxKLgN0Qiq8B&q=85&s=3501bf16d5c08ef0fd488a9f6a878304" alt="Time series chart editor" width="2458" height="1598" data-path="images/guides/monitor/monitor-custom-chart-editor.png" />
    </Expandable>
  * **<Icon icon="arrow-down-wide-narrow" /> Top list**: Rank groups by a metric over the selected timeframe. Order by value or alphabetically, ascending or descending.
    <Expandable title="screenshot">
      <img src="https://mintcdn.com/braintrust/b11zJxKLgN0Qiq8B/images/guides/monitor/monitor-custom-chart-top-list.jpg?fit=max&auto=format&n=b11zJxKLgN0Qiq8B&q=85&s=9d2676087b3667ddc71ee231415c6e38" alt="Top list chart editor" width="964" height="708" data-path="images/guides/monitor/monitor-custom-chart-top-list.jpg" />
    </Expandable>
  * **<Icon icon="hash" /> Big number**: Display a single aggregate value as one large number. Useful for highlighting key metrics like total requests or average score.
    <Expandable title="screenshot">
      <img src="https://mintcdn.com/braintrust/b11zJxKLgN0Qiq8B/images/guides/monitor/monitor-custom-chart-big-number.jpg?fit=max&auto=format&n=b11zJxKLgN0Qiq8B&q=85&s=9cde51ff57b4a6c5cf4a94ef9efb3e05" alt="Big number chart editor" width="820" height="698" data-path="images/guides/monitor/monitor-custom-chart-big-number.jpg" />
    </Expandable>
  * **<Icon icon="settings-2" /> Presets**: Start from a built-in chart covering common metrics like request count, latency, token usage, and scores.

    <Expandable title="screenshot">
      <img src="https://mintcdn.com/braintrust/b11zJxKLgN0Qiq8B/images/guides/monitor/monitor-custom-chart-editor-presets.jpg?fit=max&auto=format&n=b11zJxKLgN0Qiq8B&q=85&s=f7a2cd43f4ac4b0c44b97ec783acacc3" alt="Chart editor presets" width="966" height="586" data-path="images/guides/monitor/monitor-custom-chart-editor-presets.jpg" />
    </Expandable>

    <Note>
      Some preset charts (Spans, Latency, Total LLM cost, Token count, and Time to first token) automatically exclude internal scorer spans generated by online scoring automations such as [Topics](/docs/observe/topics) and [online scorers](/docs/evaluate/score-online). This ensures the metrics reflect actual production traffic rather than scoring overhead. Custom charts include all spans by default. Add a `span_attributes.purpose is null or span_attributes.purpose != 'scorer'` filter to replicate the same behavior.
    </Note>
* **Title**: A label displayed above the chart.
* **Measures**: What to plot. Select a [SQL expression](/docs/reference/sql/query-structure#group-by-for-aggregations) and aggregator (sum, avg, min, max, count, count distinct, or percentile), or select `</>` to enter a full SQL aggregate expression such as `avg(latency) / count_distinct(user_id)` or `100 * sum(errors) / count(id)`. Invalid expressions display a validation error on hover. Built-in measure types are also available for [aggregate scores](/docs/admin/projects#create-aggregate-scores) and cost.
* **Trace filters**: Narrow results to traces where any span satisfies the [filter conditions](/docs/reference/sql/query-structure#where). Useful for filtering by root-span metadata, such as `metadata.email`.
* **Span filters**: Narrow results to individual spans that satisfy the filter conditions. Only matching spans contribute to the measure.
* **Group by**: Split the chart into separate series by a SQL dimension, such as `metadata.model`. Available for time series and top list charts.
* **Options**: Controls visualization-specific settings:
  * **Unit type**: Choose how values appear in chart axes, tooltips, and legends:
    * **Duration**: Seconds (e.g., "1.5s", "0.3s").
    * **Cost**: US dollars (e.g., "$0.05", "$1.23").
    * **Count**: Generic countable things (e.g., "1,234", "5.5").
    * **Percent**: Percentages (e.g., "75%", "100%").
    * **Bytes**: Binary byte units using base-1024 (e.g., "1 KB", "2 GB", "500 B").
  * **Visualization**: Visualize as lines or bars. Available for time series charts only.
  * **Target time interval**: Set the time bucket size for time series charts. Choose **Auto** to let Braintrust pick bucket sizes based on the visible time range, or select **Week**, **Day**, or **Hour** to override the automatic choice. The selected interval is a target, not a guarantee. If it would produce buckets that are too small or too large to read at the visible time range, Braintrust falls back to the nearest readable bucket size. Available for time series charts only.

    By default, buckets are assigned by `created` (ingestion time). To use `metrics.start` (event start time) instead, which is useful for projects that batch-ingest historical spans, see [Configure Monitor chart time dimension](/docs/admin/projects#configure-monitor-chart-time-dimension).
  * **Sort**: Sort by value or name, ascending or descending. Available for top list charts only.

## Performance warnings

As you configure a chart, Braintrust flags settings that are likely to make it slow. A <Icon icon="triangle-alert" /> warning appears next to the affected measure or filter, with an explanation of what to change. On a measure, the explanation also appears when you hover over the input. Group-by fields are checked as a set rather than individually, because the most common warning is about the total number of dimensions.

Saving a custom chart that still has warnings prompts you to confirm with **Save anyway**. Preset charts save without the prompt.

<Tip>
  Use [**<Icon icon="blend" /> Loop**](/docs/loop) to create charts from natural language descriptions. Example queries:

  * "List the top 5 models by error rate over the last 7 days"
  * "Show error rate over time for claude models"
  * "Display average latency grouped by user"
  * "Chart token usage trends for the past month"
</Tip>

## Move and copy charts

Hover over a chart and click **<Icon icon="download" /> Export chart** to open a submenu with the following options:

* **Add to another dashboard**: Copy the chart to a different dashboard in the same project or another project. In the dialog that opens, pick the destination project and dashboard, then click **Add chart**. The built-in **Cost and quality** dashboard can't be a destination.
* **Copy config**: Copy the chart's configuration to your clipboard. Paste it on any dashboard to add the chart there.
* **Open in SQL sandbox**: Open the chart's underlying query in the SQL sandbox for further exploration.

To add an identical copy of a chart to the dashboard you are on, hover over it and click **<Icon icon="copy" /> Duplicate**.

## Export chart data

Hover over a chart and click **<Icon icon="download" /> Export data** to open a submenu for copying or downloading the chart's underlying data:

* **Copy JSON**: Copy the data as JSON to your clipboard.
* **Raw JSON**: Open the JSON data in a new browser tab.
* **Copy CSV**: Copy the data as CSV to your clipboard.
* **Raw CSV**: Open the CSV data in a new browser tab.

## Delete charts

Hover over a chart and click **<Icon icon="trash" /> Delete** to remove it from the dashboard. Charts can only be deleted from dashboards you create, not from the built-in **Cost and quality** dashboard.

## Next steps

* [Filter and group data](/docs/observe/dashboards#filter-and-group-data) across every chart on a dashboard.
* [Copy a dashboard to another project](/docs/observe/dashboards/create#copy-a-dashboard-to-another-project) once you have a set of charts worth reusing.
* Read the [SQL reference](/docs/reference/sql) to write more advanced measures and filters.
* [Score online](/docs/evaluate/score-online) to add quality metrics you can chart.
