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 26/07/2011, 10h35   #1
Invité de passage
 
Inscription : novembre 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 25
Points : 3
Points : 3
Par défaut Utiliser le résultat d'une requête pour définir un dataset

Bonjour à tous,
Débutant sous Birt et Java, j'ai grand besoin de votre aide. Voici mon problème :

J'ai créé un rapport qui présente sous forme d'arborescence un ensemble d'enregistrements dépendants hiérarchiquements.

C'est-à-dire que ma table de données comprend les champs suivants:
Code - Intitulé - Parent

et les enregistrements sont liés par le champ Parent. Par exemple, la ligne 2 est enfant de la ligne 1 :
Code Intitulé Parent
---------------------------
Code1 Intitulé1
Code2 Intitulé2 Code1

Le rapport fonctionne bien mais je voudrais complexifier un peu la chose .
Je voudrais que lorsqu'on saisit en paramètre d'entrée n'importe quel code, le rapport recherche le code de l'enregistrement de sommet (le parent de tous les autres) et qu'il se base sur cet enregistrement pour construire la hiérarchie.

En fait, quelque chose de ce genre :

On exécute de manière itérative la requête pour obtenir le parent le plus élevé
Code :
1
2
3
4
5
 
Do until ficheParent == null
   ficheSommet.setQuery("select parent from maTable where code = '" + codeSaisiEnParametre + "'");
   ficheParent = ficheSommet.get("parent")
Loop
Et après j'utilise le contenu de la variable ficheParent pour exécuter ma requête principale.

La difficulté est que je ne sais pas comment rédiger ce bout de code ni où le placer (dans quelle méthode, sur une méthode du dataset ou autre, ... ?).

J'espère avoir été clair dans mes explications...
Pouvez vous m'aider svp ?
bastaji est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 15h19   #2
Membre Expert
 
Inscription : avril 2008
Messages : 1 053
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 1 053
Points : 1 156
Points : 1 156
Par défaut 2 choix

Vous avez 2 choix.

1. SQL : faire du SQL recursif pour trouver le 'parent'. ( Nested Loops ).
http://blog.postgresql.fr/index.php?post/drupal/74 pour Postgres par exemple.

2. Java dans BIRT.

Coder un array Java sur le OnFetch du dataset afin d'y stocker toutes les valeurs.
Coder une petite routine pour trouver le Parent sur le BeforeFactory du rapport
en utilisant l'array.
Filtrer le tableau par rapport au parent trouvé dans le BeforeFactory du Tableau.

En fonction du volume de données, privilègier l'un ou l'autre.

Sur une grosse volumétrie , ce sera très pénalisant. Il va falloir alors denormaliser le modèle en dépliant cette table sur plusieurs colonnes supplémentaires.
__________________
BIRT / Actuate

Nouveau ! : Actuate v11 LIVE avec cubes en mémoire, dashboard analythique, accès mobile et exports Office intélligents! Télécharger Evaluation ici : http://www.birt-exchange.com/be/downloads/

Nouveau ! : Tutoriel/Formation sur comment installer et utiliser la version d'évaluation Actuate v11 Vous former ici : http://www.birt-exchange.org/org/wik...h_BIRT_iServer
Stefan C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 14h34   #3
Invité de passage
 
Inscription : novembre 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 25
Points : 3
Points : 3
Bonjour et merci pour cette réponse rapide.

J'ai essayé de mettre en oeuvre la seconde solution mais je ne suis arrivé à rien

Mon rapport utilise un scripted data set. Dans un premier temps j'ai essayé de stocker les données ramenées par le dataset dans un tableau pour ensuite simplement les afficher mais cela n'a pas marché.

Voici la méthode open :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
//Ces 2 lignes proviennent d'un modèle tout prêt à partir duquel mon rapport est construit
mxDataSet = MXReportDataSetProvider.create(this.getDataSource().getName(), this.getName());
mxDataSet.open();
 
var sqlText = new String();
sqlText = "select pmnum, description, parent from pm where parent = 'AS10285'";
 
mxDataSet.setQuery(sqlText);
 
currentrow = 0;
et la méthode fetch :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
if (currentrow >= totalrows) {
	return (false);
}
 
var ligne_dataSet = mxDataSet.get(currentrow);
 
var Pmnum = ligne_dataSet[0];
var Description = ligne_dataSet[1];
var Parent = ligne_dataSet[2];
 
row["pmnum"] = Pmnum;	
row["description"] = Description;	
row["parent"] = Parent;	
 
currentrow = currentrow + 1;
 
return (true);
Depuis je me casse la tête dessus sans aucun résultat .

Je ne vois pas bien non plus comment mettre en oeuvre la suite de la solution. Pourriez m'expliquer un peu plus en détail comment faire, et éventuellement me donner un exemple ?

Merci pour votre aide.
bastaji est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web