Hola , de tiempo q escribo, pero me había olvidado estos super tips o funcionalidades en los parametros del query de ireport/jasperreeports, aqui vamos:
1) En SQL es muy util el operador de comparación IN en un where, por ejemplo:
select * from mitabla where campo1 IN ('a','x','z')
en ireport el SQL query con el parametro seria de la siguiente forma:
select * from mitabla where $X{IN,campo1,parLetras}
donde parLetras debe ser de tipo java.util.Collection, pongo el código jrxml `para un mejor ejemplo:
<parameter name="parLetras" class="java.util.Collection">
<defaultValueExpression><![CDATA[java.util.Arrays.asList("a")]]></defaultValueExpression>
2) Que sucedería si por algun motivo no puedes construir el IN de la forma anterior y lo unico que quieres/puedes es pasarle un String que contenga los valores del IN, por ejemplo:
String parLetras ="'a','x','z'";
entonces, jasperreports nos da el parametro $P!
en ireport el SQL query con el parametro seria de la siguiente forma:
select * from mitabla where campo1 IN ($P!{parLetras})
el $P! pone el texto tal cual en el query, no solo en where sino donde uds quieran,
tal es asi que se podria hacer lo siguiente:
String parMiQuery = "select * from mitabla where campo1 IN ('a','x','z')";
y en ireport el SQL query con el parametro seria:
$P!{parMiQuery}
sí!! solo eso, nada mas, porque usará el exto tal cual en el query de jasperreports.
Espero hayan entendido y les ayude
Mas info en: https://community.jaspersoft.com/questions/516502/x-and-p
Bytes