2010-08-16 13 views
0

J'essaye de créer une table avec deux groupes dans un rapport de BIRT.Comment afficher des entrées vides dans un sous-groupe Table BIRT?

Je groupe d'abord par année, puis par critère dans une deuxième colonne. Disons que ce critère est l'un de [A, B, C, D]. S'il n'existe pas de critère pour une année, la valeur par défaut dans BIRT est vide. Par exemple, si 2011 n'a pas eu aucun critère B ou D, mon rapport ressemblerait à ceci:

2010 
---- 
A 1 
B 2 
C 3 
D 4 

2011 
---- 
A 5 
C 6 

Cependant, je veux tous les critères possibles pour montrer, même si elles n'ont pas entrées pour une année particulière.

J'ai essayé de définir la propriété sous advanced-> section-> show si blank = true, mais cela n'a rien fait.

Des idées?

(J'utilise BIRT 2.6.0)

La requête SQL (connexion à une source de données mysql) est assez simple:

SELECT year_field, decision_field, sales_field 
FROM databaseName 

Le rapport est http://bit.ly/9SDbNI

et produit une rapporter comme:

alt text

+0

Ce n'est pas un problème BIRT - c'est un problème de jeu de données. Quel genre de source de données (SQL, autre) utilisez-vous? Si SQL, quel RDBMS utilisez-vous? –

+0

Si vous utilisez SQL, pouvez-vous inclure la requête utilisée dans le rapport? –

+0

Bien sûr - Je me demande s'il serait logique de simplement définir le deuxième groupe (les critères de décision) explicitement dans le rapport, au lieu d'utiliser le regroupement. –

Répondre

2

Comme je l'ai déjà commenté, il s'agit d'un problème de jeu de données et non d'un problème BIRT. Le problème est que l'ensemble de données n'inclut pas les lignes où il n'y avait pas de ventes pour ces codes de décision, dans ces années. J'espérais plutôt qu'il y aurait des tables séparées pour les années et les codes de décision, mais il semble qu'il y ait une seule table pour tout. Par conséquent, je suggère la requête suivante (en fonction de la requête dans le fichier rptdesign, plutôt que la question):

select y.year_field, d.decision_field, t.sales_field 
from 
(select distinct year_field from databaseTable) y 
cross join (select distinct decision_field from databaseTable) d 
left join databaseTable t 
on y.year_field = t.year_field and d.decision_field = t.decision_field 

Aussi, modifiez la définition de la colonne Count pour un compte du domaine de la vente, plutôt que le champ de décision.

+0

Merci - cela a résolu parfaitement, et éclairci ce qui se passait! Une base de données plus normalisée arrive dans le futur, comme solution temporaire, nous lisons une base de données "excel" dans une structure de table plate. Merci pour les commentaires! –

0

J'ai remarqué que vous utilisez MySQL. Utilisez SELECT IFNULL(<MyCol>,0) from my_table; pour remplacer les valeurs nulles par 0.