All DAX Functions

PARALLELPERIOD(): Advanced Custom Moving Time Windows

Shift by custom intervals across months, quarters, or years.

On this page

Overview

PARALLELPERIOD shifts the date context by a fixed offset (e.g., -1 year, -3 months) and returns a parallel block of dates—not necessarily the same calendar day as the current cell. It is ideal for rolling windows and full prior-period totals.

The DAX Measure

Entire Previous Year Revenue
Entire Previous Year Revenue =
CALCULATE(
    [Total Revenue],
    PARALLELPERIOD('Date'[Date], -1, YEAR)
)

Assumes [Total Revenue] = SUM(Sales[Amount]) and the same Sales sample used in the SAMEPERIODLASTYEAR topic.

Output Table vs SAMEPERIODLASTYEAR

With a 2025 year slicer, compare [Revenue Last Year] (SAMEPERIODLASTYEAR) to [Entire Previous Year Revenue] (PARALLELPERIOD -1 YEAR):

Side-by-Side Behavior (2025 year filter)

Month (2025)Total RevenueRevenue Last Year (SPLY)Entire Previous Year Revenue
January140012003500
February9508003500
March110015003500
Total345035003500

SAMEPERIODLASTYEAR vs PARALLELPERIOD

FunctionGrainTypical Cell ValueBest For
SAMEPERIODLASTYEARMatches current period grainPrior year for that row only (Jan → Jan)YoY % by month, day, or quarter
PARALLELPERIODShifts entire intervalFull prior year repeated on every row when year is filteredPrior-year total banners, rolling 12M blocks

Why Did This Output Happen?

With the report filtered to 2025, PARALLELPERIOD(..., -1, YEAR) evaluates revenue across all of 2024 ($3500 total) and applies that single result to every month row. SAMEPERIODLASTYEAR instead returns only the matching month from 2024—so February shows $800, not $3500. Choose PARALLELPERIOD when you need the entire shifted period; choose SAMEPERIODLASTYEAR when each row should align to the same calendar slice last year.