2010-03-30 7 views
0

ContexteSynchronize Imprimer Lorsque Expression et Champ de texte Expression

Les totaux section dans l'image ci-dessous montre des résultats étranges pour la tendance colonne. Le texte doit être vrai lorsque la valeur sous la colonne précédente est égale à la valeur sous la colonne actuelle.

Imprimer Lorsque Expression & Champ de texte Expression

Les expressions sont évaluées en utilisant le code identique:

new java.lang.Boolean(
    $V{LAST_WEEK_TALLY_0}.add(
    $V{LAST_WEEK_TALLY_1}).add(
    $V{LAST_WEEK_TALLY_2}).add(
    $V{LAST_WEEK_TALLY_3}).longValue() == 
    $V{THIS_WEEK_TALLY_0}.add(
    $V{THIS_WEEK_TALLY_1}).add(
    $V{THIS_WEEK_TALLY_2}).add(
    $V{THIS_WEEK_TALLY_3}).longValue() 
) 

Le Evalutation Temps pour le champ texte est défini Bande.

Problème

Il semble que l'Imprimer Lorsque Expression code est en cours d'évaluation pour les valeurs sous la Précédent et actuelles colonnes d'une ligne trop tard. La valeur imprimée est correcte pour cette ligne. Cela signifie que le temps d'évaluation pour Imprimer lorsque l'expression et Expression de champ de texte n'évaluent pas en même temps.

Question

Que dois-je faire pour Imprimer Lorsque Expression et Champ de texte Expression évaluer au même résultat en même temps? Cela produirait alors le mot vrai pour les totaux detendance colonne chaque fois Previous == Current.

Répondre

0

Une inélégante, mais la solution fonctionnelle est de fusionner les champs de texte statiques ensemble, et éviter d'avoir à synchroniser Imprimer Lorsque Expression et Champ de texte Expression en faveur de tout ce dernier.

($V{LAST_WEEK_TALLY_0}.add(
    $V{LAST_WEEK_TALLY_1}).add(
    $V{LAST_WEEK_TALLY_2}).add(
    $V{LAST_WEEK_TALLY_3}).longValue() == 
$V{THIS_WEEK_TALLY_0}.add(
    $V{THIS_WEEK_TALLY_1}).add(
    $V{THIS_WEEK_TALLY_2}).add(
    $V{THIS_WEEK_TALLY_3}).longValue()) ? "-" : 
($V{LAST_WEEK_TALLY_0}.add(
    $V{LAST_WEEK_TALLY_1}).add(
    $V{LAST_WEEK_TALLY_2}).add(
    $V{LAST_WEEK_TALLY_3}).longValue() < 
$V{THIS_WEEK_TALLY_0}.add(
    $V{THIS_WEEK_TALLY_1}).add(
    $V{THIS_WEEK_TALLY_2}).add(
    $V{THIS_WEEK_TALLY_3}).longValue()) ? "Up" : "Down" 
1

J'ai deux suggestions, pas sûr que ce soit Travaillera:

1. Utilisation de sommation de iReport
En supposant que vous utilisez la table de croix, il y a une fonction pour résumer le total sur la ligne ou sur la colonne. Faire le total précédent, égal au nombre de totaux précédents, et il en va de même pour le total actuel.
ensuite dans la colonne Tendance, écrire une expression comme Current_Value - Previous_value ==0

2. Trouver les sommes dans Query
Ceci est la solution plus robuste, peut-être un peu plus compliqué cependant. Je ne compte généralement pas beaucoup sur iReport, et je lui donne toujours des données prêtes.
Si vous générez vos données de rapport en Java, il sera facile de remplir toutes les valeurs avant d'appeler le rapport.

+0

La recherche des sommes dans la requête serait difficile. En raison de la nature des données, je ne pouvais pas facilement utiliser un rapport de tableau croisé. Merci pour la réponse! –