Conseils et formations : vos deux atouts pour réussir !
Accueil > Reporting Services > Articles
Matrice et tableaux croisés

Utilisation des tableaux croisés avec Reporting Services

 

Cas d'école :


Nous nous intéressons aux absences prises par une population donnée, et souhaiterions
avoir les totaux des jours prix par motif d'absence (Cp,...) par personne et aussi avoir un
total général par personne (pour tous les motifs) et par motif (pour toutes les personnes).

Extraction des données :


Les données viennent d'une base SQLServer pour laquelle nous avons défini une source de données partagée.
Nous pourrions utiliser la fonction cube de SQLServer qui permet d'obtenir les totaux souhaités ainsi :

    select ABS_PRISE.MOTIF_ABSENCE, ABS_PRISE.NO_PERSONNEL, PERSONNEL.NOM, PERSONNEL.PRENOM,

    SUM(ABS_PRISE.JOUR) AS NbeJours

    from ABS_PRISE inner join

    PERSONNEL ON ABS_PRISE.NO_PERSONNEL = PERSONNEL.NO_PERSONNEL

    where (ABS_PRISE.MOTIF_ABSENCE <> 'ABSNAUTO')

    GROUP BY ABS_PRISE.MOTIF_ABSENCE, ABS_PRISE.NO_PERSONNEL, PERSONNEL.NOM,

    PERSONNEL.PRENOM WITH CUBE



Toutefois, cette façon de faire présente deux inconvénients :

• Il va falloir maitriser les ruptures sur Personnel et motif absence pour repérer les indicateurs NULL sur NO_PERSONNEL et MOTIF_ABSENCE
• Il semble que RS ne voient pas toutes les données (NOM et PRENOM) lors de cette requête, s'agirait-il d'un bug (?)

Donc,...

Nous allons simplifier la requête SQL et laisser RS faire les totaux en ligne et colonnes :

    select ABS_PRISE.MOTIF_ABSENCE, ABS_PRISE.NO_PERSONNEL, SUM(ABS_PRISE.JOUR) AS NbeJours,

    PERSONNEL.NOM, PERSONNEL.PRENOM

    from ABS_PRISE inner join

    PERSONNEL ON ABS_PRISE.NO_PERSONNEL = PERSONNEL.NO_PERSONNEL

    where (ABS_PRISE.MOTIF_ABSENCE <> 'ABSNAUTO')

    GROUP BY ABS_PRISE.MOTIF_ABSENCE, ABS_PRISE.NO_PERSONNEL, PERSONNEL.NOM,

    PERSONNEL.PRENOM

    ORDER BY PERSONNEL.NOM,

    PERSONNEL.PRENOM,ABS_PRISE.NO_PERSONNEL, ABS_PRISE.MOTIF_ABSENCE


(On a supprimé l'option WITH CUBE)

Présentation des données :


Utilisons la matrice d'analyse croisée :


Nous allons choisir de présenter les motifs d'absence en colonnes, et les personnels en lignes : en effet on maîtrisera bien mieux le nombre de motifs d'absences que le nombre de personnels; en particulier par une clause WHERE bien placée (vous aurez noté que l'on filtre déjà certains motifs).
Un premier aperçu est un peu décevant au niveau de l'aspect, corrigeons cela tout de suite :


Nous avons simplement utilisé la propriété BorderStyle en y mettant Solid quand nécessaire....


Il serait bien d'avoir les noms ET les prénoms puisqu'ils sont disponibles dans la source de données; les expressions en source de zone de texte vont nous permettre ceci; dans l'expression de la zone de texte en tête de ligne :



Voici le résultat (après filtrage sur certains motifs) :


Maintenant, comme convenu, nous allons ajouter des totaux en lignes et en colonnes :

 



Les chiffres sont maintenant justes, améliorons la mise en page, par exemple en coloriant de manière alternative les lignes du tableau.

Pour faire ce coloriage, il nous faut une valeur qui s'incrémente ligne de tableau par ligne de tableau et dont la parité nous permettra de faire le coloriage souhaité.
Ajoutons un groupe de lignes :



Le groupage se fera sur une expression 'neutre', par exemple 1=1
(en effet, les groupes s'imbriquent les uns dans les autres) ;
dans l'expression de la nouvelle cellule mettons :



Ce qui signifie : en cours d'exécution (RunningValue) compte moi les triplets distincts (Nom, Prénom, No) que tu as déjà traité.
A noter que le couple (Nom, Prénom) n'est pas un identifiant (homonymies)

Vérifier que les groupes de la matrice se font correctement :

 

 



Effectivement on doit grouper sur le NO_PERSONNEL (La clé primaire) mais trier sur les couples (NOM,PRENOM).


Voyons le résultat :



Parfait, il nous reste le coloriage....

Dans BackgroundColor de la zone de comptage :

 


La colonne de comptage a été cachée en lui mettant une largeur de 0.0 cm.

 

 

Conclusion :

 

Espérons que les futures versions permettront de régler ce problème plus facilement.

 

 ‭(Masqué)‬ WebPart1 Web Part

/SSRS/Matrice et tableaux croisés/