Dinora,
en caso de este tipo de reporte donde el usuario quiere que muestres datos agrupados ..
Puedes crear una tabla temporal oracle ( "CREATE GLOBAL TEMPORARY TABLE ....") con la estructura del tu detalle de reporte donde se muestran los datos agrupados como deseas.
tendrias que crear un procedimiento de BD donde le pases los parametros necesarios para que realices el cursor con los datos para poblar tu tabla temporal. La cantidad de registros a agrupar seria un parámetro que supongo tienes una tabla de parametros el cual tendria el valor de 9 (ya que se agruparia cada 9 facturas como mencionas) y se calcularia la sumatoria cada 9 registros... luego el usuario te pedirá que lop agrupes cada 21, ...luego 30 ,,etc...
Ejemplo:
Create or replace procedurde XXXX (p_anio aaa , p_mes bbb p_tienda ccc ) is
Cada vez que ejecutes el reporte debes eliminar los registros de la tabla temporal para volverlos a cargar de acuerdo como crees la tabla temporal
Luego que crees los registros en la tabla temporal, puedes ejecutar tu sentencia select y listo se mostraran los datos como quieres... agrupado o como lo desees,,, No te olvides de definir la estrucura de tu tabla temporal de manera que te permita hacer la agrupacion de ultimo nivel que tu reporte lo requiere ...
El ejemplo, es solo una idea...que te puede orientar a lo que se quiere lograr...
Espero que te haya orientado...
Cualquier consulta me la haces..
Saludos
Luis Pablo