Blog Zenika

#CodeTheWorld

Java

BIRT : Gestion des paramètres à valeurs multiples

Afin d’optimiser les performances, il est important de filtrer les données avant de les consommer au sein d’un rapport. BIRT propose différents niveaux de filtres : sur une table, une DataSet, une requête. Bien évidemment, le moyen le plus efficace est d’agir directement sur la requête afin de remonter le minimum de données possibles. Il est très facile de mettre en place des paramètres dans des rapports afin de filtrer les données au niveau de la requête.
Une illustration de cette exemple est expliquée par Virgil Dodson, évangéliste BIRT : BIRT Parameter Example
Cependant, la mise en place d’un filtre sur plusieurs valeurs est beaucoup moins évident que sur une valeur. Nous verrons donc dans ce billet, comment mettre en place un paramètre à valeurs multiples et en fonction des valeurs sélectionnées, comment filtrer au niveau de la requête.
Afin de mieux comprendre ce mécanisme, nous allons établir un rapport permettant d’afficher dans un tableau des clients en fonction des pays sélectionnés.
La DataSource qui sera utilisée n’est autre que celle embarquée dans le BIRT Designer : Classic Models Inc. Sample Database

1. Définition de la DataSet Country

Afin d’alimenter le paramètre à valeurs multiples (voir étape suivante), nous allons tout d’abord créer une DataSet “Country” permettant de renvoyer tout simplement tous les pays disponibles dans la table.
CountryDataSet

2. Définition du paramètre à valeurs multiples

A partir de la DataSet “Country”, nous allons mettre en place un paramètre “ParameterCountry” permettant de sélectionner un ou plusieurs pays parmi les pays disponibles en base.
Cette DataSet va nous permettre d’alimenter la liste de sélection du “ParameterCountry”. Bien entendu, il ne faut pas oublier de cocher l’option Allow Multiples Values pour autoriser la multi-sélection.
CountryParameter

3. Définition de la DataSet Customers

Une fois que le paramètre “ParameterCountry” a été défini, il suffit de créer une DataSet permettant de récupérer le nom, la ville et le pays des clients stockés en base selon les pays sélectionnés du paramètre “ParameterCountry”.
Voici la requete permettant de récupérer les informations :

  1. SELECT CLASSICMODELS.CUSTOMERS.CUSTOMERNAME,CLASSICMODELS.CUSTOMERS.CITY,CLASSICMODELS.CUSTOMERS.COUNTRY
  2. FROM CLASSICMODELS.CUSTOMERS

Pour prendre en compte la sélection du paramètre “ParameterCountry”, il suffit d’ajouter du script au niveau de la DataSet “Customers” à l’étape beforeOpen afin de modifier la requête :

  1. // Recuperation de CountryParameter : join() permet de concatener
  2. // toutes les valeurs selectionnees de la selection effectuee
  3. var list = params[“CountryParameter”].value.join();
  4. // On remplace les simples , par des ‘,’ pour typer les valeurs en String
  5. list = list.replace(/,/g,“‘,'”);
  6. // On modifie la requete afin de filtrer sur plusieurs valeurs a l’aide d’un IN
  7. this.queryText = “SELECT CLASSICMODELS.CUSTOMERS.CUSTOMERNAME,CLASSICMODELS.CUSTOMERS.CITY,”
  8. +“CLASSICMODELS.CUSTOMERS.COUNTRY FROM CLASSICMODELS.CUSTOMERS”;
  9. this.queryText = this.queryText + ” WHERE CLASSICMODELS.CUSTOMERS.COUNTRY IN (‘”+list+“‘)”;

Ce code permet de changer la requete avant l’ouverture de la DataSet en prenant en compte les valeurs sélectionnées de “ParameterCountry”.
Comme on peut le constater, on récupère le contenu de “ParameterCountry” qui est sous forme de tableau et on concatène les valeurs sélectionnées. Les valeurs sélectionnées étant des String, il nous faut mettre des quotes sur chacune de ces valeurs. Ensuite, on modifie la requête en filtrant sur les pays sélectionnés à l’aide d’un IN.
Vous pourrez trouver en pièce jointe le rapport illustrant cet exemple.

Auteur/Autrice

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.