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 04/01/2008, 11h20   #1
Invité de passage
 
Inscription : décembre 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 5
Points : 2
Points : 2
Par défaut Est il possible de créer une liste (avec groupement) de crosstab ?

Voici mon problème sur lequel je m'arrache les cheveux depuis quelques jours:

Je souhaite construire un rapport qui aura la forme suivante:

pour agence1:

crosstab


pour agence2:

crosstab


pour agence3:

crosstab

...

Bien entendu chaque crosstab n'incluant que les données relatives à l'agence en cours

Ce type de structure est elle réalisable ?

Dans le cas d'un dataset classique, ca ne pose pas de souci, mais quand il s'agit de faire les regroupements par agence à partir d'un data cube, les choses se corsent...

Merci de m'aider !!

Merci
tony.liebaert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 12h14   #2
Membre du Club
 
Avatar de rotsilaina
 
Homme Mijoro Rakotonirina
Inscription : octobre 2007
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Mijoro Rakotonirina
Âge : 28
Localisation : Madagascar

Informations forums :
Inscription : octobre 2007
Messages : 59
Points : 47
Points : 47
Bonjour!

Si je comprends très bien, vous voulez créer un seul report incluant 3 crosstab différents. Si oui, c'est possible.
Vous n'avez qu'à créer votre propre template avec 3 crosstab.
Puis, vous allez créer 3 datasets différents ayant chacun sa propre requette.
Avec les 3 nouveaux datacubes, vous allez paramettrer chaque ligne et chaque colonne des crosstabs.

Cordialement rotsilaina.
rotsilaina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2008, 14h16   #3
Invité de passage
 
Inscription : décembre 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 5
Points : 2
Points : 2
Merci pour votre réponse, mais je pense que je n'ai pas été assez clair dans la description de mon probleme:

Il n'y a qu'un seul dataset qui renvoi

un client, une type , une agence, un montant.

mon cross tab a sur un axe le client et sur l'autre axe le type. le montant étant la mesure.

Je n'ai pas 3 crosstab a créer.
Ils doivent etre générés dynamiquement.
Si il y a 3 agences alors il y aura 3 crosstab, si il y a 10 agences, il y aura 10 crosstabs (1 par agence).

Pour gérer cette itération, le composant list me parait adapté.

La dimension agence est une dimension de mon data cube, mais qui n'est pas utilisé dans mon cross tab, je veux m'en servir comme regroupement.
Cependant j'ai l'impression que Birt gere mal, pour ne pas dire pas du tout, les listes (regroupements) à partir de cubes.
Cela provient peut etre du fait que les cross tab n'ont été ajoutés que récemment...

Si quelqu'un à une idée
tony.liebaert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2008, 17h31   #4
Membre Expert
 
Avatar de lazarel
 
Homme
Consultant informatique
Inscription : mai 2007
Messages : 893
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : mai 2007
Messages : 893
Points : 1 360
Points : 1 360
Bonjour,

Bon alors ...
Citation:
Il n'y a qu'un seul dataset qui renvoi

un client, une type , une agence, un montant.
C'est une obligation pour toi .... soit mais tu risque de pas aller trés loin

Citation:
Pour gérer cette itération, le composant list me parait adapté.
Oui ok nous sommes d'accord

Pour le reste c'est extrèment simple il n'existe pas de liaison possible pour les Data Cube utilisé dans BIRT (en 2.2.0) . Pas de paramètre passé implique pas de possibilité de rafraichir ton tableaux croisés à chaque itération de ta liste.

Conclusion dans l'absolue cela risque d'être dur, la solution consiste à utiliser JasperReports qui est la solution idéale !!! pour les tableaux croisés dynamique, avec l'imbriquation d'un sous-rapport contenant le tableaux croisés.

Par contre si tes colonnes "type" sont prédéfinies (statique), et que tes "clients" sont non prédéfini (dynamique) il te suffit d'utiliser un tableaux classique. Ca marche trés bien et le résultat sera identique

Cordialement Lazarel
lazarel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 12h03   #5
Invité de passage
 
Inscription : décembre 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 5
Points : 2
Points : 2
J'ai réussi a résoudre le problème en passant pas une variable JavaScript.

Il faut créer une variable dans la méthode initialize du rapport (onglet script)
ex: codeAgence=null

Créer une table à partir d'un dataSet puis définir de manière classique le binding et le groupe.

Insérer ensuite le cross tab dans la table. (Bien entendu, a cette étape, il n'y a aucun lien entre le groupe de la liste et le cross tab. On aura alors un cross tab pour chaque rupture de la liste (mais a chaque fois identique).

Selectionner la ligne de la table dans laquelle se situe le cross tab et dans la méthode onRender affecter à la variable créée la valeur du champs qui sert de regroupement dans la table

ex: codeAgence = row["DTW_ID_AGENCE"]

Ca y est le tour est joué !!

Merci a tous de votre aide !!
tony.liebaert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2008, 10h01   #6
Membre éclairé
 
Inscription : novembre 2005
Messages : 385
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 385
Points : 362
Points : 362
Peux-tu décrire précisément la procédure que tu as mis en place ?

J'ai exactement le même problème. J'ai 2 listes imbriquées (ANNEE et LIEU) et à l'intérieur de la seconde liste, je souhaite afficher un tableau croisé.

J'ai crée un dataset me retournant pour chaque [ANNEE, LIEU, CATEGORIE D'ENTITE] le nombre d'entité correspondant.

J'ai crée un datacube basé sur ce dataset.

J'ai crée un crossstab basé sur ce datacube.

J'utilise 2 variables javascript : CURRENT_ANNEE et CURRENT_LIEU_COD. Ces variables sont fonctionnels car j'arrive à afficher des tableaux basé sur des requêtes paramétrées.

Comment as-tu paramétré ton dataset, ton datacube, ton crosstab ?

merci
erwan.bodere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2008, 15h49   #7
Invité de passage
 
Inscription : décembre 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 5
Points : 2
Points : 2
Si j'ai bien compris ton problème, tu as deux listes imbriquées et ton crosstab est a chaque fois identique car tu n'arrives pas a le lier aux elements de ta listes.

IL faut que tu initialises tes variables dans le initialize comme écrit dans le post précédent.

Ensuite que tu affectes à ces variables la valeur de tes listes (dans la méthode onRender de ta table, dans le detail, la ou se trouve ton crosstab
ex: var1 = ???
var2 = ??? , voir post précédent)
et enfin, il faut que tu appliques un filtre sur ton crosstab afin de ne "laisser passer" que les données égales à tes 2 variables (j'ai oublié de le préciser ds le post précédent).

Bon courage !
tony.liebaert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2008, 16h40   #8
Membre éclairé
 
Inscription : novembre 2005
Messages : 385
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 385
Points : 362
Points : 362
Merci.

Ça fonctionne.

Par contre j'ai un maintenant autre problème.

Comme je l'ai dit, j'ai 2 listes imbriquées : la première itère sur les années et la seconde sur des lieux.

Mon crosstab représente l'évolution du nombre d'entités par type d'entités (ligne) pour le lieu courant. Les entêtes de colonnes sont donc des années. Par exemple, si je suis sur l'année 2005 dans la liste, le crosstab va afficher l'évolution de 1995 à 2005 ([année courante - 10; année courante]).

Code :
1
2
3
4
5
6
7
8
9
10
 
TYPE     | 1995 | 1996 | .... | 2005
--------------------------------------
A        |    5 |    6 | .... |   14
B        |    7 |    3 | .... |    8
.
.
.
--------------------------------------
TOTAL    |  100 |   96 | .... |  108
Dans cette configuration, je ne peux pas filtrer les données du crosstab pour le lieu courant car cette information n'est pas affichée dans le crosstab. Ppar contre, cette information est dans le dataset et dans le datacube !

Du coup, j'ai ajouté le lieu dans la dimension "type" et je rend le champ lieu invisible. Ainsi, je peux filtrer les données pour le lieu courante. Et là, c'est un peu moche car la colonne contenant le champ lieu s'affiche (sans la valeur du lieu), ce qui décale le type d'entités assez grossièrement.

Le composant "Datacube" est relativement jeune, ce qui peut expliquer ses manques. J'espère que dans les prochaines versions, ce composant sera enrichie de nouvelles fonctionnalités.

Merci encore tony pour ton aide
erwan.bodere est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2008, 09h05   #9
Membre éclairé
 
Inscription : novembre 2005
Messages : 385
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 385
Points : 362
Points : 362
Finallement en cachant (visibility = false) les niveaux à filtrer et en définissant la largeur des cellules à 0 cela donne l'affichage escompté.

Voici la structure :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
[LIST:YEAR]
--[LIST:COUNTRY]
 
                                         | [CUSTOMER_TYP] | TOTAL
      ------------------------------------------------------------------
      [YEAR] | [COUNTRY] | [PRODUCT_TYP] |     [NB_SALES] | 
      ------------------------------------------------------------------
      TOTAL                              |                |
 
--[/LIST:COUNTRY]
[/LIST:YEAR]
Je filtre le crosstab sur les niveaux YEAR et COUNTRY avec les valeurs courantes de la liste. Je rends invisible ces 2 libellés et je définie la largeur des cellules dans lesquelles sont situées ces libellés à 0.

Et le tour est joué

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
[LIST:YEAR = 2005]
--[LIST:COUNTRY = 'FR']
 
                | Entreprise | Individuel | TOTAL
      --------------------------------------------
      Jeux      |         50 |         70 |   120
      Livres    |         20 |         75 |    95
      --------------------------------------------
      TOTAL     |         70 |        145 |   215
 
--[/LIST:COUNTRY]
[/LIST:YEAR]
erwan.bodere 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 17h08.


 
 
 
 
Partenaires

Hébergement Web