Creación filtro dinámico entre dos tablas
Contexto
Tomar un valor o elemento de una tabla para filtrar otra. El ejemplo de este wiki es para filtrar una tabla con el primer elemento de otra.
Ejemplo
Crear las vistas de las tablas a usar en el reporte.
La primer vista contiene los vendedores y sus ventas, ordenados de mayor a menor.
La segunda vista tiene los mismos vendedores y sus clientes con sus ventas.
Una vez creadas las vistas, se crea la Data Source y los Data Sets (vistas creadas) en O3 Report.
Insertar en el Layout del reporte las dos tablas.
En la primer tabla (la que está ordenada), agregar en la fila "footer", una Aggregation.
La agregación se hace por vendedor y la función es "FIRST" para obtener el primer vendedor (porque ya está ordenado). En este caso el nombre de la agregación es "primervendedor".
Teniendo seleccionada la celda de la "Aggregation", seleccionar la pestaña "Script" del reporte.
En ella, seleccionar de la lista desplegable de "Script" - "onCreate" y pegar el siguiente texto:
var primervendedor=this.getValue();
reportContext.setPersistentGlobalVariable("primervendedor", primervendedor);
donde primervendedor es el nombre que le damos al valor que toma la agregación y "primervendedor" es la agregación en sí.
Luego, seleccionar la segunda tabla (la que va a ser filtrada). Dentro de las propiedades de la tabla, seleccionar la pestaña "Filters".
Hacer click en "Add...", seleccionar la fila de "Vendedores", la función "Equal to" y "Build expression".
Creamos la expresión:
reportContext.getPersistentGlobalVariable("primervendedor");
que nos va a traer el nombre del vendedor que se encuentra en la primer posición.
El resultado del reporte será el siguiente: