[SSRS] Fusion verticale de cellules


ssrs_fusion_verticale_etape1

Lors de nos différentes missions, il peut arriver que les exigences des clients ne soient pas directement couvertes par les outils de la suite SQL Server. Il est néanmoins rare qu’il soit impossible de répondre à une exigence. Il faut néanmoins toujours essayer de bien positionner le curseur entre complexité et maintenabilité. L’objet de cet article est de présenter la faisabilité de grouper des niveaux supérieurs dans les colonnes de gauche d’un tableau.

Qu’entend-on par fusion verticale dans le titre ?

Dans SSRS, la fusion verticale est opéré par le regroupement de lignes (Row Group). La fusion horizontale, quant à elle, se fait par l’intermédiaire de regroupement de colonnes (Column Group) dans des matrices.

Initialement Reporting Services est conçu pour répondre à des besoins de reporting agrégeant hiérarchiquement des mesures par rapports à des colonnes. Ce qui donne des représentations de ce type :

ssrs_tableau_reporting_normal

Cependant cette représentation ne permet pas de répondre au besoin de mon client. Et n’oublions pas le client est roi et si nous voulons travailler ensemble il va falloir trouver une solution made-in Microsoft.

Le besoin de mon client est la production de synthèse avec des tableaux selon une mise en page souple avec des regroupements de données sortant de la hiérarchie parent-enfant habituel. La représentation attendue est un truc dans le genre :

SSRS fusion verticale non hierarchique

 

La solution : les régions de données liées

Bien que l’outil ne soit pas prévu pour gérer directement ce type de regroupement, nous allons grâce aux regions de données liées (nested data regions).
Nous utiliserons le tableau (Tablix) en tant que region de données avec une logique d’imbrication afin de gérer les niveaux de regroupement inversées (de gauche à droite).
ssrs_fusion_verticale_etape1

ssrs_fusion_verticale_etape2

ssrs_fusion_verticale_etape3

Une fois avoir trouvé une méthode, que l’on peut qualifier dans ce cas de “Work Around”, nous sommes confronté à un problème majeur. Il n’est pas possible d’ajuster la taille du tableau dans la région inférieur. Ceci cause des décalages dans le tableau.
La propriété CanGrow défini à True permet d’ajuster la taille des cellules en fonctions du contenu. Cependant si les niveaux des regions supérieurs “grossissent” plus que celles des niveaux inférieurs le décalage se créé en dépit de la valeur de la propriété CanGrow.

On pourra ajouter des lignes (VbCrLf) au niveau feuille en fonction du nombre de ligne des niveaux supérieures, obtenu par le biais d’un calcul compliqué mettant en jeu le nombre de caractère, la taille de la police et la largeur de la cellule. Ceci permettra de rendre le niveau feuille toujours plus gros que les niveaux supérieur et d’aligner toutes les cellules.

Cette méthode est d’une élégance discutable mais permet de couvrir le besoin sur la base d’une utilisation exotique de Reporting Services.
Une implémentation chronophage … comme souvent pour les rapports complexes avec Reporting Services …

Commentez cet article