OSBI.FR - Open Source Business Intelligence

TechTip: passage de paramètres multi-valués à Birt depuis Pentaho

Sur le wiki de Pentaho, on trouve une documentation plutôt sympa permettant de « tourner » des rapports BIRT en passant des paramètres depuis Pentaho :

  • Mise en place des paramètres du rapport dans Eclipse BIRT
  • Création d’une action séquence permettant de lancer le rapport BIRT avec le passage des paramètres
  • Configuration du driver JDBC de BIRT pour la connexion à la base de données source
  • Mise à jour du moteur de rapport BIRT dans Pentaho 3.0 (voir l’article sur ce blog à ce sujet)

Cette documentation est parfaite à la seule condition d’utiliser des paramètres mono-valués.

Dès lors que l’on veut sélectionner plusieurs valeurs pour un même paramètre (ie case à cocher « Allow Multiple Values » dans Birt), il faut utiliser une petite ruse que je vous indique ici.

Je prendrai l’exemple d’un paramètre {zone} qui permettra de filtrer une liste de clients en fonction de la sélection d’une ou plusieurs zones (NA, EMEA, APAC, …) dans un champ HTML de type « Multi-Select ». (je précise que le rapport s’appuie sur les données de la base hypersonic SampleData de Pentaho, il faudra donc rajouter le driver Hsql comme décrit dans la procédure ici)

1. Tout d’abord dans BIRT, le paramètre multi-valué sera de type « Text Box » et le filtre positionné sur le Data Set de récupération des données s’appuiera sur un paramètre avec comme valeur calculée params[« zone »].value.split(‘|’)

2. Dans l’xaction Pentaho, on créera un <input> de type string-list qui permettra de sélectionner au travers d’un Prompt-Secure Filter, la ou les valeur(s) choisie(s) pour le paramètre {zone}. Une simple règle javascript permettra alors de concaténer l’ensemble des valeurs avec un « | » comme séparateur et de ainsi passer le paramètre {zone} comme simple String à BIRT  (et non un java Object) :

zone="";
if (typeof zoneSelected == 'string'){
 // Une seule valeur est sélectionnée: l'objet passé est de type String
 zone = zoneSelected;
 
} else {
 // Plusieurs valeurs sont sélectionnées: l'objet est un tableau de String ('array')
	for ( i = 0; i &lt; zoneSelected.length; i++ ) {
		zone = zone  + "|" + zoneSelected[i];
	}
}

jsbirt_rule

Attention le nom des paramètres dans l’xaction et le rapport birt doivent toujours être identiques !

Si vous voulez tester, voici-ci joint l’xaction (pentaho v3.0) et le fichier birt rptdesign (Birt v2.5)

ListingClientsBirtMultivaluetedParams.xaction

ListingClientsBirtMultivaluatedParams.rptdesign