# Use multiple fields in a calculation

To use values from multiple fields in a mathematic calculation, complete the following steps:

## Filter by fields

Use `filter()` to return only the fields necessary for your calculation. Use the `or` logical operator to filter by multiple fields.

The following example queries two fields, `A` and `B`:

``````from(bucket: "example-bucket")
|> range(start: -1m)
|> filter(fn: (r) => r._field == "A" or r._field == "B")
``````

This query returns one or more tables for each field. For example:

_time_field_value
2021-01-01T00:00:00ZA12.4
2021-01-01T00:00:15ZA12.2
2021-01-01T00:00:30ZA11.6
2021-01-01T00:00:45ZA11.9
_time_field_value
2021-01-01T00:00:00ZB3.1
2021-01-01T00:00:15ZB4.8
2021-01-01T00:00:30ZB2.2
2021-01-01T00:00:45ZB3.3

## Pivot fields into columns

Use `pivot()` to align multiple fields by time.

To correctly pivot on `_time`, points for each field must have identical timestamps. If timestamps are irregular or do not align perfectly, see Normalize irregular timestamps.

``````// ...
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
``````

Using the queried data above, this `pivot()` function returns:

_timeAB
2021-01-01T00:00:00Z12.43.1
2021-01-01T00:00:15Z12.24.8
2021-01-01T00:00:30Z11.62.2
2021-01-01T00:00:45Z11.93.3

## Perform the calculation

Use `map()` to perform the mathematic operation using column values as operands.

The following example uses values in the `A` and `B` columns to calculate a new `_value` column:

``````// ...
|> map(fn: (r) => ({ r with _value: r.A * r.B }))
``````

Using the pivoted data above, this `map()` function returns:

_timeAB_value
2021-01-01T00:00:00Z12.43.138.44
2021-01-01T00:00:15Z12.24.858.56
2021-01-01T00:00:30Z11.62.225.52
2021-01-01T00:00:45Z11.93.339.27

## Full example query

``````from(bucket: "example-bucket")
|> range(start: -1m)
|> filter(fn: (r) => r._field == "A" or r._field == "B")
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
|> map(fn: (r) => ({r with _value: r.A * r.B}))
``````

### 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.

### 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.