2017-05-12 2 views
1

J'utilise la requête sqlJdbs en tant que fournisseur de données pour mes contrôles CCC. J'utilise la requête géospatiale dans ma requête, c'est pourquoi je cache mes résultats (Cache = True). Sinon, la demande est longue.Filtre la requête sqlJdbs mise en cache dans Pentaho CE

Cela fonctionne très bien. Cependant, je dois utiliser des paramètres dans ma requête pour filtrer les lignes résultantes: SELECT ... FROM ... WHERE someField IN (${aoi_param})

Y at-il un moyen de mettre en cache ensemble complet de lignes, puis appliquer WHERE aux résultats mises en cache sans reconstruire nouveau cache pour chaque ensemble de valeurs dans le ${aoi_param}?

Quelle est la meilleure pratique?

Répondre

0

Donc, je ne suis pas vraiment sûr que c'est la meilleure pratique, mais je résolu mon problème de cette façon:

  1. I inclus aoi_param aux auditeurs et Paramètres de mon contrôle graphique

  2. Je filtré ensemble de données dans post Fetch:

function f(data){ 
 
    var _aoi_param = this.dashboard.getParameterValue('${p:aoi_param}'); 
 
    
 
    function isInArray(myValue, myArray) { 
 
     var arrayLength = myArray.length; 
 
     for (var i = 0; i < arrayLength; i++) { 
 
      if (myValue == myArray[i]) return true; 
 
     } 
 
     return false; 
 
    } 
 
     
 
    function getFiltered(cdaData, filterArray) { 
 
     var allCdaData = cdaData; 
 
     cdaData = { 
 
      metadata: allCdaData.metadata, 
 
      resultset: allCdaData.resultset.filter(function(row){ 
 
\t \t \t \t \t // 2nd column is an AOI id in my dataset 
 
        return isInArray(row[2], filterArray); 
 
       }) 
 
     }; 
 
    
 
     return cdaData; 
 
    } 
 
    
 
    var dataFiltered = getFiltered(data, _aoi_param); 
 
    return dataFiltered; 
 
}

  1. exclus WHERE someField IN (${aoi_param}) de la requête de mon sql sur sqlJdbc composant