Фильтр кэшированных запросов sqlJdbs в Pentaho CE

Я использую запрос sqlJdbs в качестве поставщика данных для своих элементов управления CCC. Я использую геопространственный запрос в своем запросе, поэтому я кеширую свои результаты (Cache=True). В противном случае запрос сделан долго.

Работает нормально. Однако я должен использовать параметры в своем запросе для фильтрации результирующих строк:SELECT ... FROM ... WHERE someField IN (${aoi_param})

Есть ли способ кешировать полный набор строк, а затем применить WHERE кэшировать результаты, не перестраивая новый кэш для каждого набора значений в ${aoi_param}?

Какова лучшая практика?

1 ответ

Решение

Итак, я не совсем уверен, что это лучшая практика, но я решил свою проблему следующим образом:

  1. я включен aoi_param к слушателям и параметрам моего контроля диаграммы

  2. Затем я отфильтровал набор данных в 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){
     // 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. не входит WHERE someField IN (${aoi_param}) из запроса моего sql над компонентом sqlJdbc
Другие вопросы по тегам