[SSRS] Créer un dégradé de couleur pour un groupe de hiérarchie
Dans un l’article précédent : ‘[SSRS] Les groupes de hiérarchies récursives…’ nous avons vu comment remplir récursivement une table avec les données d’une organisation. A cette table, nous avons rajouté un décalage d’une des chaines de caractères en fonction du niveau de la donnée pour une meilleure visualisation des données. C’est bien mais pour aller plus loin et rendre le résultat encore plus lisible il peut être sympa de choisir une couleur par niveau et donc de créer un dégradé.
La méthode la plus simple est sûrement d’utiliser un switch (cf l’article Comment écrire l’instruction switch ) et en fonction du numéro de ‘Level’ d’imposer une couleur. C’est rapide mais pas dynamique ce qui peut poser problème si vous ne connaissez pas à l’avance le nombre de niveau.
En fait, la méthode pour gérer le dégradé n’est pas beaucoup plus compliquée que la méthode switch.
Nous allons pour cela utiliser le code couleur hexadécimal.
Recherchez dans les propriétés de la ligne l’option ‘BackgroundColor’. (= couleur du fond du contrôle)
Saisissez dans ce champ, l’expression suivante :
="#00"+CSTR(Hex(50+level*30))+"00" |
Comme vous le savez le code couleur hexadécimal est du type #RGB Liste des couleurs wikipedia . Chaque composant de la couleur est codé de 00 à FF (en hexa) ou de 0 à 255 (en décimal).
Ici dans mon exemple, j’ai choisi d’imposer un dégradé vert. Mais j’aurais aussi bien pu l’imposer en Rouge, en bleu ou en un mélange de ces trois couleurs.
La fonction Hex() permet de convertir en hexadécimal la valeur qui est donc dans mon cas calculée en fonction du niveau (50+level*30).
Pour être comprise par SSRS, la valeur de BackgroundColor doit être une chaîne de caractère. Je dois donc convertir, à nouveau, l’hexa en string. Puis je le concatène dans mon cas avec les deux autres composantes de la couleur ici égale à zéro.
J’ai donc créé un code hexadécimal du type #00FF00 (vert foncé).
Bien maintenant le problème c’est que je risque de me retrouver avec des couleurs de texte illisibles sur leur fond de couleur. Nous allons modifier à la volée la couleur de la police de caractère.
Dans les propriétés de votre ligne de tableau recherchez la propriété ‘Color’ et saisissez l’expression VB suivante :
= iif(Fields!Level.Value>2,"Black", "White") |
Dans mon cas j’ai estimé qu’au-delà du niveau 2 la couleur de fond de case se sera suffisamment éclaircie pour écrire en Noir. Avant le niveau 2, j’écris par contre en blanc.
Et pour aller encore plus loin, j’ai choisi de mettre en gras les premiers level. Pour cela, recherchez la propriété ‘FontWeigt’ (sous propriété de Font) et saisissez l’expression VB suivante :
= iif(Fields!Level.Value>2, "Normal","Bold") |
Cette expression impose une police Bold pour les niveaux inférieurs à 2. Sinon, ce sera une police normale.
Cela nous permet donc d’obtenir le joli tableau ci-dessus.
3 commentaires sur « [SSRS] Créer un dégradé de couleur pour un groupe de hiérarchie »