Bonjour. J'ai un problème TRES ardu sur lequel je travaille depuis deux semaines.
Je cherche à réaliser un tableau au principe simple : plusieurs niveaux imbriqués (dans mon cas, 5, dans le cas général, une infinité), et des agrégations calculées sur chaque niveau (je n'utilise pas le niveau de détail).
L'objectif, c'est que ce tableau soit paramétrable pour que l'utilisateur puisse choisir d'afficher ou non chaque niveau. Difficulté supplémentaire : les valeurs doivent être triées au sein des niveaux affichés (selon un critère sur l'une des agrégations), ce qui interdit de faire un simple tableau avec des critères de visibilité sur les colonnes, car si on cache le niveau supérieur, les données affichées seront quand même triées au sein des ruptures (masquées) relatives à ce niveau.
Un exemple :
Le tableau ci-dessus possède trois niveaux de rupture ; les différents niveaux sont triés par valeur décroissante. Maintenant, si on masque le niveau 2, avec un tableau classique, on obtiendrait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 niveau 1 |niveau 2 |niveau 3 |valeur ----------|----------|----------|---------- fruit |pomme |golden |10 | |gala |3 | |----------|---------- | |t. pomme |13 |----------|----------|---------- |poire |commis |5 | |williams |2 | |----------|---------- | |t. poire |7 |----------|----------|---------- |t. fruit |20 ----------|----------|----------|---------- légume |chou |normal |8 | |super |4 | |----------|---------- | |t. chou |12 |----------|----------|---------- |poireau |blanc |5 | |rouge |1 | |----------|---------- | |t. poireau|6 |----------|----------|---------- |t. légume |18 ----------|----------|----------|----------
Ici, les types de niveau 3 ne sont pas triés selon leur valeur car ils restent triés selon les catégories de niveau 2. La cible à obtenir est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 niveau 1 |niveau 3 |valeur ----------|----------|---------- fruit |golden |10 |gala |3 |commis |5 |williams |2 |----------|---------- |t. fruit |20 ----------|----------|---------- légume |normal |8 |super |4 |blanc |5 |rouge |1 |----------|---------- |t. légume |18 ----------|----------|----------
Vous pouvez voir que les pommes doivent être mélangées avec les poires, les choux avec les poireaux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 niveau 1 |niveau 3 |valeur ----------|----------|---------- fruit |golden |10 |commis |5 |gala |3 |williams |2 |----------|---------- |t. fruit |20 ----------|----------|---------- légume |normal |8 |blanc |5 |super |4 |rouge |1 |----------|---------- |t. légume |18 ----------|----------|----------
Déjà, quelque soit la solution adoptée (tableau ou tableau croisé), je ne vois pas comment ne pas dupliquer les éléments selon l'affichage que je veux (pour les tableaux, à cause de ce tri invisible inévitable ; pour les tableaux croisés, parce que je ne connais aucun moyen de masquer un niveau). Donc à l'heure actuelle je suis obligé d'avoir 2^5 = 32 éléments (tableau ou tableau croisé) dans mon état, ce qui est très mauvais.
Même en acceptant cela, j'ai bien plusieurs solutions possibles, mais chacune a au moins un inconvénient majeur :
- Les tableaux : les propriétés "drop" permettant l'affichage des catégories une fois par rupture et non une fois par ligne, buggent dès qu'un saut de page se place au sein de la zone d'un drop ; les lignes suivantes seront mal affichées (en général, la cellule en dessous de la cellule droppée est effacée, celles à sa droite sont décalées vers la gauche).
- Les tableaux croisés : je suis incapable d'utiliser une agrégation définie sur un niveau qui n'est pas affiché dans le tableau. C'est très mauvais, car l'une de mes agrégations est une moyenne d'une valeur sur mon niveau le plus bas, qu'il soit affiché ou non. C'est possible avec les tableaux normaux, pas avec les tableaux croisés.
Pour la solution des tableaux, j'ai commencé à mettre en place un palliatif à base de javascript, simulant le drop sans l'utiliser. J'ai encore des problèmes. J'ai commencé cette discussion sur le forum de birt-exchange à cette adresse. Vous trouverez notamment un état d'exemple ou je mets des exemples des différentes possibilités.
Pour la solution des tableaux croisés, je cherche actuellement à définir une agrégation utilisable à tous les niveaux, même quand le niveau concerné n'est pas affiché. Je cherche toujours un moyen de masquer un niveau.
Merci de votre aide et désolé pour le mal de tête probable que ça va vous coûter.
Partager