Inter-record & running totals

Above, RangeSum, moving averages and other row-to-row chart logic, mapped to DAX window functions and visual calculations.

Above(Sum(Sales)) Above, Below, Before and After Above() reads the value from the previous row of the chart. Power BI offers three replacements: the OFFSET window function, the PREVIOUS visual calculation, and calendar-aware time intelligence. Each behaves differently when periods are missing. Partial / different approach RangeSum(Above(Sum(Sales), 0, RowNo())) Running totals with RangeSum(Above(...)) The Qlik running-total idiom RangeSum(Above(Sum(Sales), 0, RowNo())) maps to a cumulative DAX measure, a WINDOW function, or the RUNNINGSUM visual calculation. Partial / different approach RangeAvg(Above(Sum(Sales), 0, 3)) Moving averages with RangeAvg(Above(...)) RangeAvg(Above(Sum(Sales), 0, 3)) gives a 3-row moving average. In Power BI, use WINDOW with AVERAGEX, the MOVINGAVERAGE visual calculation, or a calendar-based DATESINPERIOD measure. Partial / different approach RangeMax(Sales, Target, 0) RangeMax, RangeMin, RangeCount The Range functions aggregate a list of values in one row, not a column. DAX MAX and MIN accept exactly two scalar arguments. For three or more, iterate over a table constructor. Power Query's List.Max, List.Min and List.Count take any list. When Range functions wrap Above(), see the window-function pages instead. Partial / different approach Sum(Sales) / Top(Sum(Sales)) Top, Bottom, First and Last in charts Top() and Bottom() return an expression's value on the first or last row of the current column segment, typically to index against a base period. Visual calculations have FIRST and LAST, which do the same over the rows of the visual. In model measures, use INDEX(1) or INDEX(-1) over ALLSELECTED. Partial / different approach