# SignalFlow Analytics Language¶

The heart of the SignalFx platform is a streaming, real-time analytics engine that executes computations written in a flexible language named SignalFlow. Examples of the computations that are commonly used include:

- Comparisons with historical norms, e.g. on a week-over-week basis
- Population overviews using a distributed percentile chart
- Detecting if the rate of change (or other metric expressed as a ratio, such as a service level objective) has exceeded a critical threshold
- Finding correlated dimensions, e.g. to determine which service is most correlated with alerts for low disk space

For the most part, these computations are created using a simple Chart Builder UI that allows you to easily specify what metric time series you want to use and what analytical functions you want to apply to them. More advanced users can create SignalFlow programs directly via the SignalFx API.

SignalFlow includes a large library of built-in analytical functions that take a metrics time series as an input, perform computations on its data points, and output time series that are the result of the computation.

## Aggregations and transformations¶

Many of the built-in analytical functions are able to perform computations on time series in two ways: aggregations and transformations.

Aggregations operate across all of the datapoints at a single instance in time, e.g. the average CPU utilization across a group of 10 servers at time t, t+1, t+2 etc. In contrast, transformations operate in parallel on each time series over a window of time and yield one output time series for each input time series. A simple example of a transformation is a moving average.

SignalFx supports the daisy-chaining of analytical functions, such that the output of one is fed in as the input to another.

## Other functions¶

Beyond aggregations and transformations, SignalFx also offers a variety of other useful functions. Commonly used functions include:

`timeshift`

, which retrieves a data point from a specified time offset in the past`exclude`

, which provides the ability to filter time series by value, rather than by source

As with other analytical functions, these functions can be used in concert with others to produce more sophisticated computations. For example, `exclude`

can be used with `sum`

to achieve a result akin to the `sumif()`

function found in popular spreadsheet applications.

## Expressions¶

On top of analytics functions, SignalFx also offers the ability to create arbitrary mathematical expressions that refer to preceding computations as variables, via either the Chart Builder UI or the SignalFlow API. These expressions can be used to define anything from ratios (e.g. ratio of HTTP response codes received that are 200s to those that are 400s or 500s) to derived metrics (e.g. cache.total = cache.hits + cache.misses), rates of change, or essentially anything that can be formulated by the user as an equation.