Si tu reporte imprime una cantidad fija de detalles en cada hoja, sería tan fácil como dividir el número de registros entre este número y aproximar al entero mayor.
Si es un reporte ya mas o menos complejo, quizás con subtotales, o cuyas líneas varían de altura dependiendo de la cantidad de texto o de otras condiciones, indudablemente resulta mucho mas rápido (al menos de programar) hacer la doble pasada por el reporte.
Otra cosa que puede estar afectando la velocidad, es que realices cálculos tardados, por ejemplo, en el evento OnCalcFields del DataSet asociado, que al recorrerse dos veces, obligará a que los cálculos se realicen innecesariamente 2 veces.
Podrías hacer los cálculos una sola vez, mantenerlos en memoria (tipo cache) y así evitar el desperdicio de tiempo.
Hasta luego.
