Form 2 processes through all records in the recordset performing the transform function only on those pairs of adjacent records where all the expressions in the fieldlist match (indicating duplicate records) and passing through all other records to the output. This form allows you to use the same kind of EXCEPT field exclusion logic available to DEDUP.
Example:
rec := {STRING1 str1,STRING1 str2,STRING1 str3}; ds := DATASET([{'a', 'b', 'c'},{'a', 'b', 'c'}, {'a', 'c', 'c'},{'a', 'c', 'd'}], rec); rec tr(rec L, rec R) := TRANSFORM SELF := L; END; Cat(STRING1 L, STRING1 R) := L + R; r1 := ROLLUP(ds, tr(LEFT, RIGHT), str1, str2); //equivalent to LEFT.str1 = RIGHT.str1 AND // LEFT.str2 = RIGHT.str2 r2 := ROLLUP(ds, tr(LEFT, RIGHT), WHOLE RECORD, EXCEPT str3); //equivalent to LEFT.str1 = RIGHT.str1 AND // LEFT.str2 = RIGHT.str2 r3 := ROLLUP(ds, tr(LEFT, RIGHT), RECORD, EXCEPT str3); //equivalent to LEFT.str1 = RIGHT.str1 AND // LEFT.str2 = RIGHT.str2 r4 := ROLLUP(ds, tr(LEFT, RIGHT), RECORD, EXCEPT str2,str3); //equivalent to LEFT.str1 = RIGHT.str1 r5 := ROLLUP(ds, tr(LEFT, RIGHT), RECORD); //equivalent to LEFT.str1 = RIGHT.str1 AND // LEFT.str2 = RIGHT.str2 AND // LEFT.str3 = RIGHT.str3 r6 := ROLLUP(ds, tr(LEFT, RIGHT), str1 + str2); //equivalent to LEFT.str1+LEFT.str2 = RIGHT.str1+RIGHT.str2 r7 := ROLLUP(ds, tr(LEFT, RIGHT), Cat(str1,str2)); //equivalent to Cat(LEFT.str1,LEFT.str2) = // Cat(RIGHT.str1,RIGHT.str2 )