Seleccionar multiples valores de un mismo parametro y filtrar segun lo seleccionado

Muchas veces se tiene una tabla que se quiere filtrar de acuerdo a un parámetro que permite la múltiple selección de valores sobre el mismo.

Una opción sería traer todos los registros del dataset y filtrar de acuerdo a si es igual a los valores del parámetro en cuestión. Esto si bien es una solución buena cuando hay pocos registros en el dataset, cuando hay muchos registros es terriblemente ineficiente, porque trae todo a memoria y luego filtra.

La opción que se presenta aquí es delegar ese trabajo al motor de o3 o al de la base de datos dependiendo la fuente de datos.

El ejemplo esta hecho sobre el cubo de cronos.

Generar un data set para obtener los valores posibles del parametro:

Definir el parámetro:

Luego de esto hay que definir el dataset que va a ser el que muestre la tabla con la información que se quiere.

Notar que se le pasa un valor a contratos, totalmente aleatorio, pero necesario para generar la estructura de la tabla(columnas).

Luego en el script beforeopen del dataset ese valor sera reemplazado de la siguiente forma:

Aqui el texto para poder copiarse

var query=this.queryText;
var largovalores=params["Contratos"].value.length;
var texto="";
for(i=0; i<largovalores;i++)
{
    text=texto+ "[Contratos].["+params["Contratos"].value[i]+"],";
}
texto=texto.substring(0,texto.length-1);//Se remueve la coma ultima
query = query.replace("[Contratos].[Cerrado]",texto);
this.queryText=query;

 

 

 

Asi la consulta es totalmente dinámica, y se construye la misma, una vez seleccionados los parámetros.

De forma análoga se puede hacer con sql:

Definir la consulta del dataset asi

select *
from Clientes cli
where --reemplazoContratos

Luego en el beforeopen de ese dataset

var consulta=this.queryText;
//Reemplazo de contratos
var contratosarray=params["Contrato"].value;
var contratoLength = contratosarray.length;
var contratos='';
for (var i = 0; i < contratoLength ; i++) {
    if(i==0)
    {
        contratos=contratosarray[i];
    }
    else
    {
        contratos=contratos+','+contratosarray[i];
    }
}
var areemplazar = 'cli.IdContrato in ('+ contratos+ ')';
consulta = consulta.replace('--reemplazoContratos',areemplazar);