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 03/10/2011, 15h51   #1
Invité de passage
 
Inscription : décembre 2008
Messages : 10
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : décembre 2008
Messages : 10
Points : 2
Points : 2
Par défaut Colonne calculée dans un dataset

Bonjour,
Mon rapport BIRT utilise un dataset qui contient les colonnes suivantes:

Id
DateDebut
Etat

Les données sont par exemple (c'est une sorte d'historique):
N1, 01/02/2011, Creation
N2, 02/02/2011, Creation
N1, 07/02/2011, Execution
N2, 09/02/2011, Execution

Je souhaiterais ajouter une colonne calculée à mon dataset qui me permettrait d'avoir une date de fin d'un état. Ce qui donnerait (Id, DateDebut, DateFin, Etat):

N1, 01/02/2011, 07/02/2011, Creation ==> 07/02/2011 car N1 passe à l'état Execution à cette date là.
N2, 02/02/2011, 09/02/2011, Creation ==> 09/02/2011 car N2 passe à l'état Execution à cette date là.
N1, 07/02/2011, 03/10/2011, Execution ==> 03/10/2011 date du jour car N1 toujours en execution.
N2, 09/02/2011, 03/10/2011, Execution ==> 03/10/2011 date du jour car N2 toujours en execution.

J'ajoute une colonne calculée dans le dataset, pas de pb. Mais dans l'expression javascript, j'ai essayé une expression du style mais sans succès:

Total.first(DateDebut ,Id =row["Id"] && Etat!=row["Etat"] && DateDebut>row["DateDebut"]);

Autrement dit, je voudrais que la DateFin contienne:
la première DateDebut dont la ligne a le même id que la ligne courante, un Etat différent de celui de la ligne courante, et une DateDebut supérieure à la DateDebut de la ligne courante. Tout ceci, si on considère que les enregistrements sont lus dans le sens chrono comme le fourni le fichier de données (fichiers cvs).

Mais la colonne calculée est vide.

Auriez-vous une idée ? et est-ce possible ?
valouee est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 18h59   #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
Salut valouee,

A mon avis c'est plutôt un traitement de type alimentation de données, les outils de restit détestent ce genre de choses C'est vrai que dans certains cas on n'a pas trop le choix.

Ton expression avec Total est une très bonne idée, mais je crains que les aggrégats soient évalués par Birt aprés le chargement des lignes et non pas à chaque ligne, ce qui empêche d'utiliser un filtre du type Id =row["Id"]. J'espère me tromper.

Sinon, si tu as la main sur la manière dont le fichier est trié (1er critère: Id 2em critère: DateDebut par ordre décroissant) tu peux t'en sortir assez facilement en stockant dans 2 variables globales l'Id et la DateDebut de la ligne précédente, et une expression du type:

Code :
1
2
3
4
5
6
7
8
if (Id_prec==row["Id"]){//il existe un même Id postérieur à l'Id courant
  return DateDebut_prec;
else{
  Id_prec = row["Id"];
  DateDebut_prec = row["Id"];
  return BirtDateTime.today();
  ...
}
Si tu n'as pas de possibilité de contrôler le tri du fichier source, je sèche
donino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 18h19   #3
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
Mea culpa, avec un joined dataset tu peux mettre les différents états (création, exécution, fin) sur une même ligne et donc facilement calculer la date de fin de chaque état, totalement indépendamment de l'ordre du fichier.

Bon courage A+
donino 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 19h20.


 
 
 
 
Partenaires

Hébergement Web