## Key

• This line was removed.
• Formatting was changed.

This example describes how to use the rolling computational functions:

• `ROLLINGAVERAGE` - computes a rolling average from a window of rows before and after the current row. See ROLLINGAVERAGE Function.
• `ROLLINGMIN` - computes a rolling minimum from a window of rows. See ROLLINGMIN Function.
• `ROLLINGMAX` - computes a rolling maximum from a window of rows.  See ROLLINGMAX Function.
• `ROLLINGSTDEV` - computes a rolling standard deviation from a window of rows. See ROLLINGSTDEV Function.
• `ROLLINGVAR` - computes a rolling variance from a window of rows. See ROLLINGVAR Function.
• `ROLLINGSTDEVSAMP` - computes a rolling standard deviation from a window of rows using the sample method of statistical calculation. See ROLLINGSTDEVSAMP Function.
• `ROLLINGVARSAMP` - computes a rolling variance from a window of rows using the sample method of statistical calculation. See ROLLINGVARSAMP Function.

Source:

In this example, the following data comes from times recorded at regular intervals during a three-lap race around a track. The source data is in cumulative time in seconds (`time_sc`). You can use ROLLING and other windowing functions to break down the data into more meaningful metrics.

lapquartertime_sc
100.000
1119.554
1239.785
1360.021
2080.950
21101.785
22121.005
23141.185
30162.008
31181.887
32200.945
33220.856

Transformation:

Primary key: Since the quarter information repeats every lap, there is no unique identifier for each row. The following steps create this identifier:

D trans
RawWrangle true step settype col: lap,quarter type: String Columns lap,quarter New type String Change column data type

D trans
RawWrangle true 'splitId' step derive type:single value: MERGE(['l',lap,'q',quarter]) as: 'splitId' Formula type Single row formula Formula MERGE(['l',lap,'q',quarter]) New column name New formula

Get split times: Use the following transform to break down the splits for each quarter of the race:

D trans
RawWrangle true splitId step derive type:single value: ROUND(time_sc - PREV(time_sc, 1), 3) order: splitId as: 'split_time_sc' Formula type Multiple row formula Formula ROUND(time_sc - PREV(time_sc, 1), 3) Order rows by 'split_time_sc' New column name New formula

Compute rolling computations: You can use the following types of computations to provide rolling metrics on the current and three previous splits:

D trans
RawWrangle true splitId step derive type:single value: ROLLINGAVERAGE(split_time_sc, 3) order: splitId as: 'ravg' Formula type Multiple row formula Formula ROLLINGAVERAGE(split_time_sc, 3) Order rows by 'ravg' New column name New formula

D trans
RawWrangle true splitId step derive type:single value: ROLLINGMAX(split_time_sc, 3) order: splitId as: 'rmax' Formula type Multiple row formula Formula ROLLINGMAX(split_time_sc, 3) Order rows by 'rmax' New column name New formula

D trans
RawWrangle true splitId step derive type:single value: ROLLINGMIN(split_time_sc, 3) order: splitId as: 'rmin' Formula type Multiple row formula Formula ROLLINGMIN(split_time_sc, 3) Order rows by 'rmin' New column name New formula

D trans
RawWrangle true splitId step derive type:single value: ROUND(ROLLINGSTDEV(split_time_sc, 3), 3) order: splitId as: 'rstdev' Formula type Multiple row formula Formula ROUND(ROLLINGSTDEV(split_time_sc, 3), 3) Order rows by 'rstdev' New column name New formula

D trans
RawWrangle true splitId step derive type:single value: ROUND(ROLLINGVAR(split_time_sc, 3), 3) order: splitId as: 'rvar' Formula type Multiple row formula Formula ROUND(ROLLINGVAR(split_time_sc, 3), 3) Order rows by 'rvar' New column name New formula

Compute rolling computations using sample method: These metrics compute the rolling STDEV and VAR on the current and three previous splits using the sample method:

D trans
RawWrangle true splitId step derive type:single value: ROUND(ROLLINGSTDEVSAMP(split_time_sc, 3), 3) order: splitId as: 'rstdev_samp' Formula type Multiple row formula Formula ROUND(ROLLINGSTDEVSAMP(split_time_sc, 3), 3) Order rows by 'rstdev_samp' New column name New formula

D trans
RawWrangle true splitId step derive type:single value: ROUND(ROLLINGVARSAMP(split_time_sc, 3), 3) order: splitId as: 'rvar_samp' Formula type Multiple row formula Formula ROUND(ROLLINGVARSAMP(split_time_sc, 3), 3) Order rows by 'rvar_samp' New column name New formula

Results:

When the above transforms have been completed, the results look like the following:

lapquartersplitIdtime_scsplit_time_scrvar_samprstdev_samprvarrstdevrminrmaxravg
10l1q00

11l1q120.09620.096

0020.09620.09620.096
12l1q240.5320.4340.2290.4790.0290.16920.09620.43420.265
13l1q361.03120.5010.1540.3920.0310.17720.09620.50120.344
20l2q081.08720.0560.3150.5610.0390.19820.05620.50120.272
21l2q1101.38320.2960.1420.3760.0290.1720.05620.50120.322
22l2q2122.09220.7090.6170.7860.0590.24220.05620.70920.39
23l2q3141.88619.7940.6210.7880.1130.33719.79420.70920.214
30l3q0162.58120.6950.5790.7610.1390.37319.79420.70920.373
31l3q1183.01820.4370.4430.6660.1380.37119.79420.70920.409
32l3q2203.49320.4750.5370.7330.1130.33619.79420.69520.35
33l3q3222.89319.40.5200.7210.2520.50219.420.69520.252

You can reduce the number of steps by applying a `window` transform such as the following:

D trans
RawWrangle true rollingmax(split_time_sc, 0, 3) Formula6 lap window value: window1 = lap,rollingaverage(split_time_sc, 0, 3), rollingmax(split_time_sc, 0, 3),rollingmin(split_time_sc, 0, 3),round(rollingstdev(split_time_sc, 0, 3), 3),round(rollingvar(split_time_sc, 0, 3), 3) group: lap order: lap Formula1 round(rollingvar(split_time_sc, 0, 3), 3) lap Formula3 round(rollingstdevsamp(split_time_sc, 0, 3), 3) rollingmin(split_time_sc, 0, 3) Window Formula7 Group by step Formula5 lap Formula2 rollingaverage(split_time_sc, 0, 3) round(rollingstdev(split_time_sc, 0, 3), 3) Order by Formula4 round(rollingvarsamp(split_time_sc, 0, 3), 3) Formula8

However, you must rename all of the generated `windowX` columns.