Month-over-month change compares each month with the one before: +20% in February, −25% in March. QuickSight’s period-over-period functions do it by date, not by row position, so a month with no data does not shift the comparison onto the wrong month.

Copy and paste

Previous month’s value:

periodOverPeriodLastValue(sum({Sales}), {Order Date}, MONTH, 1)

Change in value:

periodOverPeriodDifference(sum({Sales}), {Order Date}, MONTH, 1)

Change in percent, as an explicit ratio:

periodOverPeriodDifference(sum({Sales}), {Order Date}, MONTH, 1)
/ periodOverPeriodLastValue(sum({Sales}), {Order Date}, MONTH, 1)

The built-in percent function:

periodOverPeriodPercentDifference(sum({Sales}), {Order Date}, MONTH, 1)

Same month last year, in a monthly visual:

periodOverPeriodPercentDifference(sum({Sales}), {Order Date}, YEAR, 1)

Put {Order Date} in the visual with the Month aggregation.

Example

Month Sales Previous month Change Change %
Jan 2026 100
Feb 2026 120 100 20 20.0%
Mar 2026 90 120 −30 −25.0%
Apr 2026 110 90 20 22.2%
May 2026 130 110 20 18.2%
Jun 2026 100 130 −30 −23.1%

January is empty: there is no December in the data to compare with.

Period and offset

The third and fourth arguments are optional, but they go together: give both or neither.

Missing months

The AWS blog post that introduced these functions stresses that they compare dates, not rows. Remove April from the example: May is then compared with April, finds nothing, and stays empty. A row-based function, such as lag or percentDifference, would compare May with March and report +44.4% as a monthly change. When the visual’s rows are dates, prefer the period-over-period functions; see how to get the previous row’s value for the row-based ones.

Formatting the percentage

The explicit ratio returns 0.2 for +20%, which the Percent format displays correctly. Look at the raw value of periodOverPeriodPercentDifference in a table before you choose its format, so that a value already expressed in percent does not end up multiplied by 100 again.

Filters

These are table calculations: they see only the rows that survive the filters. A visual filtered to 2026 has no December 2025 to compare January with, and a year-over-year comparison needs the previous year in the visual’s data. Filter with a date range wide enough for the comparison, or hide the extra months with a filter on a table calculation.

Checked against the Amazon Quick Sight function reference (October 2026). The example results were recomputed in DuckDB.

References