Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > BIRT
BIRT Forum d'entraide sur BIRT (Business Intelligence and Reporting Tools). Avant de poster --> FAQ BIRT,Tutoriels BIRT
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/01/2012, 18h21   #1
Futur Membre du Club
 
Asma
Consultante en BI
Inscription : juillet 2010
Messages : 87
Détails du profil
Informations personnelles :
Nom : Asma
Localisation : Maroc

Informations professionnelles :
Activité : Consultante en BI

Informations forums :
Inscription : juillet 2010
Messages : 87
Points : 16
Points : 16
Par défaut Paramètres sur BIRT

Bonjour,

Je suis en train d'apprendre à travailler avec BIRT. J'ai un petit souci par rapport à l'utilisation de paramètre (liste dynamique).

Je souhaite que si l'utilisateur n'a pas choisi une valeur précise à partir de la liste déroulante, le rapport affiche toutes les valeurs sans appliquer le paramètre.

Merci d'avance
dehasmae est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 12h05   #2
Membre confirmé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2009
Messages : 186
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2009
Messages : 186
Points : 289
Points : 289
Bonjour, effectivement ce point est très important, je ne connais pas moi non plus la bonne méthode à appliquer. Pour dépanner en voici 2 que j'utilise, ce serait bien que tout le monde donne son avis sur la meilleure manière de gérer les paramètres facultatifs dans Birt. Imaginons un dataset qui donne la répartition des ventes par client, avec un paramètre facultatif sur un produit:

Code :
1
2
3
4
select idClient, sum(ventes)
from ventes
where idProduit=?
group by idClient
1ere méthode:beforeOpen

Sélectionner le dataset, puis cliquer sur script->évènement beforeOpen.
L'idée est de tester si le paramètre "Produit" est non renseigné, et si c'est le cas de remplacer le filtre "idProduit=?" par une condition qui sera toujours vraie, et qui contient obligatoirement le '?' sinon Birt est pas d'accord. Donc par exemple, si on suppose ici que idProduit est un integer:

Code :
1
2
3
	if(params["Produit"]==null)  {
		this.queryText = this.queryText.replace("idProduit=?", "-1<>?");
 	};
2eme méthode: property Binding
Cette méthode construit la requête dynamiquement. Il faut retirer les '?' et les paramètres du dataset, la requête de la section "query" ne sert plus qu'à tester et à extraire les champs en output du dataset. Dans la section "property bindings" du dataset, on crée un script du type:

Code :
1
2
3
4
5
6
7
8
9
var select = "select idClient, sum(ventes)\n";
var from = "from ventes\n";
var where = "";
var groupBy="group by idClient\n";
if(params["Produit"]!=null){
   where="where idProduit="+params["Produit"].value+"\n";
}
//retourner la requête construite:
select+from+where+groupBy;
Cette méthode oblige à une double maintenance de la requête (section query+section property binding), et est réputée être beaucoup plus vulnérable aux injections SQL.

Voilà, si on plein d'avis différents et d'autres méthodes on pourra au final mettre à jour la FAQ, pour que tout le monde utilise plus ou moins la même méthode pour gérer les paramètres facultatifs.
donino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 12h26   #3
Futur Membre du Club
 
Asma
Consultante en BI
Inscription : juillet 2010
Messages : 87
Détails du profil
Informations personnelles :
Nom : Asma
Localisation : Maroc

Informations professionnelles :
Activité : Consultante en BI

Informations forums :
Inscription : juillet 2010
Messages : 87
Points : 16
Points : 16
Bonjour,

Je te remercie pour ta réponse. Au fait, j'ai trouvé une autre solution en suivant les étapes ci-dessous:

1: j'ai mis la requête suivante pour construire le Dataset 'Ds_Pays' qui sert à alimenter la liste déroulante du paramètre:
Code :
1
2
3
4
5
 
select distinct  SCOTT.PERSONNE.PAYS
from SCOTT.PERSONNE
union
select 'Tout' from dual
2: J'ai créé un paramètre obligatoire en choisissant Ds_Pays comme Dataset.
3: La requête de Dataset du rapport qui sera généré est la suivante:
Code :
1
2
3
4
5
6
7
 
select SCOTT.PERSONNE.PAYS, SCOTT.PERSONNE.SITUTAION_FAMILIALE, SCOTT.PERSONNE.GENRE, SCOTT.PERSONNE.DATE_NAISSANCE
from SCOTT.PERSONNE
where SCOTT.PERSONNE.PAYS=
( case when ? ='Tout' then  SCOTT.PERSONNE.PAYS
else ?
end )
De cette façon, si l'utilisateur souhaite afficher le rapport sans appliquer le paramètre 'Pays', il doit choisir à partir de la liste déroulante 'Tout' qui peut être désigné comme valeur par défaut.
dehasmae est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 14h20   #4
Membre confirmé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2009
Messages : 186
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2009
Messages : 186
Points : 289
Points : 289
Effectivement c'est pas mal non plus le coup du "union", simple et efficace

A+
donino est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h01.


 
 
 
 
Partenaires

Hébergement Web