DigitalAdaption Book a data risk call
Readiness Review Services Case Studies Guides Blog About Book a data risk call
Guides

Power BI Running Total That Resets Each Year

Quick answer

This guide gives UK SME teams a practical implementation path: start with the business question, check the data or workflow, build the smallest useful version, then document what has changed.

This guide gives UK SME teams a practical implementation path: start with the business question, check the data or workflow, build the smallest useful version, then document what has changed.

Book a data risk call View all services
Power BI guide Home / Guides / Power BI

Create a Power BI running total that resets each year or fiscal year while keeping date filters reliable.

2026-06-16 8 min read min read Digital Adaption On this page
  1. Create the base measure
  2. Reset by year
  3. Reset by fiscal year

A running total should be boring and predictable. It becomes difficult when the total carries across year boundaries, ignores fiscal periods, or changes unexpectedly when a user touches a slicer. For broader reporting repair work, see the Power BI consultancy and ERP reporting analytics pages.

Practical answer

Use a date table, filter dates up to the current visible date, and keep the filter inside the selected year or fiscal year so the measure resets at the right boundary.

1 Create the base measure

A running total should start from a base measure such as sales, orders, cost or quantity. Keep that base measure simple and reconciled before adding cumulative logic.

The date table must contain the year or fiscal year column that defines the reset point.

Sales Amount =
SUM ( Sales[Net Amount] )

2 Reset by year

The pattern below keeps all dates in the same calendar year as the current row and includes dates up to the current maximum date.

This is suitable for calendar-year reporting where January should always reset to zero before accumulating again.

Sales Running Total Year =
VAR CurrentDate = MAX ( 'Date'[Date] )
VAR CurrentYear = MAX ( 'Date'[Year] )
RETURN
CALCULATE (
    [Sales Amount],
    FILTER (
        ALL ( 'Date' ),
        'Date'[Date] <= CurrentDate
            && 'Date'[Year] = CurrentYear
    )
)

3 Reset by fiscal year

For fiscal reporting, use the fiscal year column rather than the calendar year. This avoids the common April problem where the running total resets in January even though the business year does not.

If the report has slicers for customer, product or site, those filters should remain active. The ALL function is used on the date table only.

Sales Running Total Fiscal Year =
VAR CurrentDate = MAX ( 'Date'[Date] )
VAR CurrentFiscalYear = MAX ( 'Date'[Fiscal Year] )
RETURN
CALCULATE (
    [Sales Amount],
    FILTER (
        ALL ( 'Date' ),
        'Date'[Date] <= CurrentDate
            && 'Date'[Fiscal Year] = CurrentFiscalYear
    )
)

Common mistakes to avoid

Removing every filter

Using ALL on the whole model can ignore customer, product or site slicers. Remove filters from the date table only unless there is a deliberate reason.

Using calendar year for fiscal reporting

If the business year starts in April, a January reset is wrong even if the DAX runs without errors.

Testing only at month level

Running totals can behave differently at day, month and year level. Test the visual at the lowest required grain.

Validation checklist

Need the report to reconcile with ERP?

Digital Adaption helps UK SMEs rebuild trusted Power BI, ERP and operational reporting after migrations, ownership gaps and model drift.

Review reporting trust

FAQ

The measure may not be filtering by year, or the visual may be using a different date table column from the relationship.

Use ALL when the running total should ignore date slicer boundaries inside the selected year. Use ALLSELECTED when the cumulative total should respect the user-selected date range.

Start with a 30-minute data risk call
Start with a 30-minute data risk call

Find out why the numbers do not match before the project gets expensive.

Book a 30-minute data risk call Review the first engagement