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

# Calculated Channels: create a derived signal

> Use a Calculated Channel to compute a new derived signal without modifying the original telemetry data.

Derive a new signal from one or more existing Channels to extract insights without modifying the original telemetry.

## Before you begin

* You are familiar with how Sift organizes data into Assets, Channels, and Runs.
  * If not, see [Understand Assets, Channels, and Runs](/documentation/get-started/data-model).
* You have at least one Asset with ingested telemetry data and know which Channels you want to use as inputs.
* You have at least one Run that includes the input Channels you plan to use, so you can verify the derived signal after creating it.

## How derived signals work

A derived signal is created using a **Calculated Channel**. A Calculated Channel is a new signal computed from one or more existing Channels using a [CEL expression](/documentation/reference/expression-syntax). Sift evaluates the expression against each incoming data point and stores the result as a separate Channel, leaving the original telemetry intact.

Each input Channel is assigned a shorthand variable (`$1`, `$2`, and so on) based on the order you select them. You use these variables to write the expression. Input Channels can be raw Channels or other Calculated Channels (up to 10 levels of nesting are supported).

When writing the CEL expression, you can optionally call a **User-Defined Function** by name to apply reusable logic without rewriting it each time. Unlike a Calculated Channel, a User-Defined Function does not produce a signal on its own. It only works inside a Calculated Channel expression.

### Example

For example, say you want to compute the power draw of a system from its voltage and current Channels. Instead of exporting the raw data and computing it manually, you select both Channels and write `$1 * $2` as the expression.

Sift evaluates the expression against each data point and stores the result as a new signal, leaving the source Channels intact.

## Create a derived signal

1. In **Sift's** homepage, click the <Icon icon="https://mintcdn.com/sift/_hOPosV9TU0PKETb/icons/calculated-channel.svg?fit=max&auto=format&n=_hOPosV9TU0PKETb&q=85&s=8773a5f9cfda66f8024c8468a396146a" size={24} className="m-0" width="939" height="512" data-path="icons/calculated-channel.svg" /> **Calculated Channels** tab.
2. Click **New Calculated Channel**.
3. In the **Calculated Channel name** box, enter a name for the derived signal.
4. In the **Asset name** list, select the Asset associated with your input Channels.
5. In the **Input Channels** list, select one or more Channels to use in the expression.
   * To use raw telemetry, select one or more existing Channels.
   * To build on a previously derived signal, select an existing Calculated Channel.
   * You can mix raw Channels and Calculated Channels as inputs.
6. In the **Query** box, write a [CEL expression](/documentation/reference/expression-syntax) using the assigned input variables.
   * To call shared logic, reference a User-Defined Function directly in the expression.
7. Optional: In the **Units** box, enter the unit of measurement for the derived signal.
8. Optional: In the **Calculated Channel(s) Preview** section, click <Icon icon="plus" /> **Select Run** to select a Run, then review the plot to confirm the derived signal behaves as expected against the input Channels.
9. Click **Save**.

<Note>
  **Asset scope**: A Calculated Channel is scoped to the Asset you select in step 4. It does not appear when you open a different Asset in Explore. To apply the same Calculated Channel to multiple Assets, set the **Asset tag name** field. Any Asset tagged with that value can use the channel. For all available settings, see [Calculated Channel reference](/documentation/reference/calculated-channel-settings).
</Note>

## Verify the derived signal

You can confirm the derived signal is working correctly in two ways:

* **During creation**: In the **Calculated Channel(s) Preview** section, select a Run to confirm the expression produces the expected values against the input Channels.
* **After saving**: In **Sift's** homepage, search for and select the Run that contains the input Channels used in the expression, click **Explore**, then in the <Icon icon="https://mintcdn.com/sift/_hOPosV9TU0PKETb/icons/calculated-channel.svg?fit=max&auto=format&n=_hOPosV9TU0PKETb&q=85&s=8773a5f9cfda66f8024c8468a396146a" size={24} className="m-0" width="939" height="512" data-path="icons/calculated-channel.svg" /> **Calculated Channels** tab, click your new Calculated Channel to plot it alongside the source Channels.

If the values look unexpected, return to the Calculated Channel, review the expression, and use the preview to validate changes before saving.

## Next steps

* [Reuse expression logic](/documentation/transform/reuse-expression-logic)
  * Once you have created a derived signal, learn how to define expression logic once as a User-Defined Function and reference it across multiple Calculated Channels and Rules to avoid rewriting the same expression each time.

## Reference

* [Calculated Channels settings](/documentation/reference/calculated-channel-settings)
* [CEL expression](/documentation/reference/expression-syntax)
