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 14/12/2010, 01h03   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 7
Points : 0
Points : 0
Par défaut Affichage données d'un calcul dans la colonne d'un tableau

Bonjour, je suis nouveau sur le forum et nouvel utilisateur de BIRT également et je bloque sur un petit problème j'imagine.

Voila, je suis parti d'un fichier XML, tout va bien, j'arrive à afficher les données que je veux provenant de ce fichier, mais je voudrais ajouter une colonne.

Dans cette colonne, je voudrais faire un calcul selon plusieurs critères : Ce que je veux, c'est que par rapport à la valeur contenue dans une autre colonne, je fasse un calcul précis

J'ai pour cela fait un switch sur mes différentes valeurs. Cependant, je n'arrive pas à faire en sorte d'afficher les calculs que je veux dans ma colonne d'arrivée. Voici mon code (si ça peut vous aider) :

Citation:
switch (row["colA"]) {
case 'A':
dataSetRow["colB"] = 1.8*row["colC"];
case 'B':
dataSetRow["colB"] = 1.6*row["colC"];
case 'C':
dataSetRow["colB"] = 1.4*row["colC"];
case 'D':
dataSetRow["colB"] = 1.2*row["colC"];
case 'E':
dataSetRow["colB"] = 1*row["colC"];
default:
dataSetRow["colB"] = 0;
}
Donc selon les données de la colonne A, on injecte dans la colonne B (qui contient lui même ce code, mais c'est là que ça pêche) le calcul entre un nombre réel et la donnée contenue dans la colonne C (considéré comme un réel, même si ça n'est qu'un entier).

Je n'arrive pas à afficher dans la colonne d'arrivée le résultat de ce calcul. Pouvez-vous m'aider ?

Merci par avance.
CamusS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 11h02   #2
Membre confirmé
 
Nicolas Vives
Inscription : avril 2010
Messages : 178
Détails du profil
Informations personnelles :
Nom : Nicolas Vives

Informations forums :
Inscription : avril 2010
Messages : 178
Points : 212
Points : 212
Bonjour,

Ton problème est simple mais il va falloir être précis sur les objets BIRT que tu utilises pour implémenter ta règle de gestion.
Tu peux la mettre à plusieurs endroits, mais d'après ce que tu as dit, je pense que le plus simple est d'utiliser ton data set tel quel dans un tableau, et de rajouter un data binding avec ta règle, dans le tableau.

Ca donne ça :
  • Tu crées ton data set, tu ne t'occupes pas de ta règle, mais tu disposes bien des colonnes "colA" et "colC" ;
  • Tu crées un tableau, tu l'associes à ton data set ;
  • Tu rajoutes dans le tableau (via la section "binding" dans les propriétés, ou en faisant un glisser-déposer de l'objet "data" de la palette) une nouvelle donnée, tu la nommes, tu la types, et tu lui mets ce code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
if(BirtComp.equalTo(dataSetRow["colA"],"A")) {
1.8*row["colC"];
} else if(BirtComp.equalTo(dataSetRow["colA"],"B")) {
1.6*row["colC"];
} else if(BirtComp.equalTo(dataSetRow["colA"],"C")) {
1.4*row["colC"];
} else if(BirtComp.equalTo(dataSetRow["colA"],"D")) {
1.2*row["colC"];
} else if(BirtComp.equalTo(dataSetRow["colA"],"E")) {
row["colC"];
} else {
0;
}
Commentaires :
  • J'ai viré le switch, je ne sais pas s'il marche correctement avec les objets BIRT. Libre à toi d'essayer de l'utiliser quand même.
  • La comparaison est plus fiable avec la méthode BirtComp.equalTo(). D'une manière générale, dés que tu utilises des données BIRT (dataSetRow ou autre), préfères les méthodes spécifiques BIRT aux méthodes javascript ;
  • Il n'y a pas de syntaxe "dataSetRow["colB"] = monResultat;" ; c'est normal, la convention veut que le résultat de ton bout de code soit la dernière expression indiquée ;
  • Remarque : ton code correspond à écrire en dur des constantes (1.2, 1.4...) dans le code au lieu de les avoir dans le data set. Je serais toi, je ferais en sorte d'avoir une colonne avec ces valeurs et je ferais une simple multiplication.

Ca devrait suffire à ton problème, si tu as d'autres questions n'hésite pas.
nicolas.1.vives est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 12h01   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 7
Points : 0
Points : 0
Merci beaucoup de la réponse, effectivement ça fonctionne mieux comme ça.

J'ai maintenant un autre soucis (oui oui, je suis un jeune utilisateur de l'outil), et j'aimerais savoir comment agréger les données pour en faire des sommes ?

Je m'explique :

Dans mon tableau de départ, j'ai des éléments qui se répètent selon les lignes. En fait, pour 2 colonnes, les données sont les mêmes, et c'est pour les colonnes suivantes qu'elles changent.

Ce que je voudrais, c'est que pour les mêmes valeurs des deux premières colonnes (qui sont symétriques, les valeurs sont reliées), on fasse la somme du calcul que vous m'avez aidé à implémenter.

Je ne sais pas si c'est très clair, si vous voulez plus de détails pour de l'aide, j'essaierai de vous donner un exemple de ce que je veux.

Merci !
CamusS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 13h24   #4
Membre confirmé
 
Nicolas Vives
Inscription : avril 2010
Messages : 178
Détails du profil
Informations personnelles :
Nom : Nicolas Vives

Informations forums :
Inscription : avril 2010
Messages : 178
Points : 212
Points : 212
Ok, ce sont deux notions des tableaux (pas des data set) que tu dois utiliser : les groupes et les agrégations.

Tu as ton tableau associé a ton data set. Dessus, tu définis un ou plusieurs groupes : les groupes sont des ruptures effectuées parmi les lignes de détail, en groupant ces lignes selon un critère que tu définis (la valeur d'une colonne, la concaténation de plusieurs valeurs, etc). Pour chaque groupe ton tableau sera agrémenté de lignes de "header" et "footer" de groupe ; ces lignes ne sont créées qu'une fois par groupe, ça te permet d'afficher les totaux.

Pour le calcul des sommes, utilises les agrégations fais un glisser-déposer de l'objet "aggregation" de la palette sur ton tableau. Tu définis ton agrégation sur une donnée du data set, en choisissant une opération à appliquer (somme, moyenne), et en choisissant le niveau de groupe à appliquer à l'agrégation : si tu choisis tout le tableau, tu n'auras qu'une valeur pour tout le tableau ; si tu choisis un groupe, tu auras une valeur par instance différente du groupe.

T'inquiètes, en bidouillant, tu verras vite, c'est très visuel.
nicolas.1.vives est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 14h38   #5
Invité de passage
 
Inscription : décembre 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 7
Points : 0
Points : 0
Ok, ça fonctionne merci beaucoup !
CamusS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 17h39   #6
Invité de passage
 
Inscription : décembre 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 7
Points : 0
Points : 0
J'ai une autre petite question.

J'ai créé un groupement de mes lignes selon une condition et j'ai demandé de faire des calculs dessus (j'ai compté le nombre de valeurs qu'il y avait dans une colonne et fait une addition des valeurs qu'il y avait dans une autre colonne selon que les lignes aient les mêmes expressions dans une troisième colonne). Bref, un agrégat.

Petite chose importante, j'ai retiré les lignes où j'avais mes données brutes, parce que ça n'est que la somme qui m'intéresse.

Donc voila ce que je voudrais :
Je voudrais que pour mes agrégats, faire un calcul qui serait le suivant :
Selon la valeur qu'il y a dans l'agrégat de ma colonne où je fait le dénombrement, j'aimerais donner un coefficient multiplicateur à l'agrégat de la colonne où je fais la somme des valeurs.

En gros : si("colA"==4), alors colB*3.7, sinon si("colA"==2), alors colB*7.1, sinon colB. (style algorithmique)

Mais seulement pour les valeurs des agrégats, sinon je n'ai aucun résultat.

Merci d'avance pour ceux qui se pencheront sur mon problème.

Bonne année au passage.
CamusS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 18h05   #7
Membre confirmé
 
Nicolas Vives
Inscription : avril 2010
Messages : 178
Détails du profil
Informations personnelles :
Nom : Nicolas Vives

Informations forums :
Inscription : avril 2010
Messages : 178
Points : 212
Points : 212
Salut.
C'est simple : tu peux réutiliser tes agrégations dans d'autres données (objets "data").

Ce que tu dois changer :
  • Dans ta colonne B, vire ton agrégation de somme. IMPORTANT : l'agrégation existera encore dans le data binding de ton tableau. Vérifie.
  • Crée une nouvelle donnée dans la case de ta colonne B. Nommes la, type la, et implémente ton algorithme en utilisant tes deux agrégations déjà définies (le compteur et la somme). Ces agrégations sont disponibles dans "l'expression builder", la fenêtre où tu définis la formule de ta donnée, dans la section "Available Column Bindings". C'est comme pour ton switch de l'autre fois sauf que tu ne cherches pas dans la section "Available Data Sets".
nicolas.1.vives est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 18h48   #8
Invité de passage
 
Inscription : décembre 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 7
Points : 0
Points : 0
Parfait merci beaucoup. Nouvelle petite question, n'est-il possible de ranger les agrégats seulement selon l'ordre croissant ou décroissant de ce que l'on groupe, ou bien il est possible de trier selon un ordre précis, comme par exemple l'ordre dans lequel on a entré les valeurs via xml ?

Pour être plus clair : Dans mon fichier xml, dans la partie que l'on triera, je vais avoir, dans cet ordre :
A, C, E, G, B, D, F, H.

Lorsque je fais mon agrégat, il me range ça soit dans l'ordre croissant, soit dans l'ordre décroissant. Pourtant j'aimerais garder cet ordre là. Est-ce possible ?

Merci pour tout !
CamusS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 10h07   #9
Membre confirmé
 
Nicolas Vives
Inscription : avril 2010
Messages : 178
Détails du profil
Informations personnelles :
Nom : Nicolas Vives

Informations forums :
Inscription : avril 2010
Messages : 178
Points : 212
Points : 212
Le tri est une notion relative aux groupes, pas aux agrégats. Quand tu crées un groupe, dans la fenêtre où tu définis ce groupe (notamment le critère de groupement), en bas de la fenêtre, tu as une section "sorting". A toi de définir le critère de tri. Par contre, je ne pense pas que tu arriveras à obtenir le critère "ordre d'écriture dans le fichier xml". Dans ton cas, ça correspond à l'ordre alphabétique, tant mieux, mais sans ça je ne pense pas que tu en aurais été capable.
nicolas.1.vives est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 18h31   #10
Invité de passage
 
Inscription : décembre 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 7
Points : 0
Points : 0
Ok tant pis, merci beaucoup du temps que tu as pris pour me répondre.

Bonne fin de semaine !
CamusS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2011, 10h12   #11
Membre confirmé
 
Nicolas Vives
Inscription : avril 2010
Messages : 178
Détails du profil
Informations personnelles :
Nom : Nicolas Vives

Informations forums :
Inscription : avril 2010
Messages : 178
Points : 212
Points : 212
Euh, désolé si je n'ai pas été clair : si tes données sont écrites dans ton fichier dans l'ordre alphabétique (A, B, C...), alors ton tri est faisable. Va dans la section tri dont j'ai parlé, et fais un tri sur ton champ qui contient ta lettre, basta.
nicolas.1.vives est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2011, 10h11   #12
Invité de passage
 
Inscription : décembre 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 7
Points : 0
Points : 0
Justement non, ça suit un ordre chronologique, pas un ordre alphabétique.
CamusS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 11h29   #13
Membre confirmé
 
Nicolas Vives
Inscription : avril 2010
Messages : 178
Détails du profil
Informations personnelles :
Nom : Nicolas Vives

Informations forums :
Inscription : avril 2010
Messages : 178
Points : 212
Points : 212
Et bien rajoute la date dans ton fichier xml. Non ?
nicolas.1.vives 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 00h51.


 
 
 
 
Partenaires

Hébergement Web