if you only want 20 records, you either need to suppress them, filter them out, or not get them in the first place.
suppression would be on the row via some condition (already printed 20).
filtering would be the recordset and via some condition (who knows)
not getting them would be using a stored proc that only returns the data that you want, and not the 'other' records.
for most, the first option is the easiest. create a formula with a shared variable to count each row of displayed data, put the formula in that row or in a duplicate section row above the one to display (details a for the formula and details b for the actual data, suppress details a). in the row of the data go to the section expert and add a formula to suppress if the shared variable is >20. in the group header (if there is one) put a formula that resets the shared variable back to 0.
voila only 20 records per section.
NOTE: if aggregate functions are to be used, you will need to create formulas to handle them as running totals will include the suppressed data as will other aggregate functions in Crystal