Documentation

Calculate the rate of change

Use derivative() to calculate the rate of change between subsequent values or aggregate.rate() to calculate the average rate of change per window of time. If time between points varies, these functions normalize points to a common time interval making values easily comparable.

Rate of change between subsequent values

Use the derivative() function to calculate the rate of change per unit of time between subsequent non-null values.

data
    |> derivative(unit: 1s)

By default, derivative() returns only positive derivative values and replaces negative values with null. Calculated values are returned as floats.

Given the following input:

_time_value
2020-01-01T00:00:00Z250
2020-01-01T00:04:00Z160
2020-01-01T00:12:00Z150
2020-01-01T00:19:00Z220
2020-01-01T00:32:00Z200
2020-01-01T00:51:00Z290
2020-01-01T01:00:00Z340

derivative(unit: 1m) returns:

_time_value
2020-01-01T00:04:00Z
2020-01-01T00:12:00Z
2020-01-01T00:19:00Z10.0
2020-01-01T00:32:00Z
2020-01-01T00:51:00Z4.74
2020-01-01T01:00:00Z5.56

Results represent the rate of change per minute between subsequent values with negative values set to null.

Return negative derivative values

To return negative derivative values, set the nonNegative parameter to false,

Given the following input:

_time_value
2020-01-01T00:00:00Z250
2020-01-01T00:04:00Z160
2020-01-01T00:12:00Z150
2020-01-01T00:19:00Z220
2020-01-01T00:32:00Z200
2020-01-01T00:51:00Z290
2020-01-01T01:00:00Z340

The following returns:

|> derivative(unit: 1m, nonNegative: false)
_time_value
2020-01-01T00:04:00Z-22.5
2020-01-01T00:12:00Z-1.25
2020-01-01T00:19:00Z10.0
2020-01-01T00:32:00Z-1.54
2020-01-01T00:51:00Z4.74
2020-01-01T01:00:00Z5.56

Results represent the rate of change per minute between subsequent values and include negative values.

Average rate of change per window of time

Use the aggregate.rate() function to calculate the average rate of change per window of time.

import "experimental/aggregate"

data
    |> aggregate.rate(
        every: 1m,
        unit: 1s,
        groupColumns: ["tag1", "tag2"],
    )

aggregate.rate() returns the average rate of change (as a float) per unit for time intervals defined by every. Negative values are replaced with null.

aggregate.rate() does not support nonNegative: false.

Given the following input:

_time_value
2020-01-01T00:00:00Z250
2020-01-01T00:04:00Z160
2020-01-01T00:12:00Z150
2020-01-01T00:19:00Z220
2020-01-01T00:32:00Z200
2020-01-01T00:51:00Z290
2020-01-01T01:00:00Z340

The following returns:

|> aggregate.rate(
    every: 20m,
    unit: 1m,
)
_time_value
2020-01-01T00:20:00Z10.00
2020-01-01T00:40:00Z
2020-01-01T01:00:00Z4.74
2020-01-01T01:20:00Z5.56

Results represent the average change rate per minute of every 20 minute interval with negative values set to null. Timestamps represent the right bound of the time window used to average values.


Was this page helpful?

Thank you for your feedback!


Select your region

Linux Package Signing Key Rotation

All signed InfluxData Linux packages have been resigned with an updated key. If using Linux, you may need to update your package configuration to continue to download and verify InfluxData software packages.

For more information, see the Linux Package Signing Key Rotation blog post.

InfluxDB Cloud backed by InfluxDB IOx

All InfluxDB Cloud organizations created on or after January 31, 2023 are backed by the new InfluxDB IOx storage engine. Check the right column of your InfluxDB Cloud organization homepage to see which InfluxDB storage engine you’re using.

If powered by IOx, this is the correct documentation.

If powered by TSM, see the TSM-based InfluxDB Cloud documentation.

InfluxDB Cloud backed by InfluxDB TSM

All InfluxDB Cloud organizations created on or after January 31, 2023 are backed by the new InfluxDB IOx storage engine which enables nearly unlimited series cardinality and SQL query support. Check the right column of your InfluxDB Cloud organization homepage to see which InfluxDB storage engine you’re using.

If powered by TSM, this is the correct documentation.

If powered by IOx, see the IOx-based InfluxDB Cloud documentation.

State of the InfluxDB Cloud (IOx) documentation

The new documentation for InfluxDB Cloud backed by InfluxDB IOx is a work in progress. We are adding new information and content almost daily. Thank you for your patience!

If there is specific information you’re looking for, please submit a documentation issue.