Comment ombrer les lignes alternées dans un rapport SQL Server Reporting Services?
Edit: Il y a un tas de bonnes réponses énumérées ci-dessous - de rapide et simple à complexe et complet . Hélas, je ne peux en choisir qu'un ...
sql-server
reporting-services
formatting
Michael Haren
la source
la source
Réponses:
Accédez à la propriété BackgroundColor de la ligne du tableau et choisissez "Expression ..."
Utilisez cette expression:
Cette astuce peut être appliquée à de nombreuses zones du rapport.
Et dans .NET 3.5+, vous pouvez utiliser:
Je ne cherche pas de représentant - j'ai juste recherché cette question moi-même et j'ai pensé partager.
la source
[rsInvalidColor] The value of the BackgroundColor property for the textbox ‘active’ is “Transparent”, which is not a valid BackgroundColor.
Il semble que l'expression correcte serait=IIf(RowNumber(Nothing) Mod 2 = 0, "Silver", Nothing)
. Merci pour le tuyau, cependant.L'utilisation de IIF (RowNumber ...) peut entraîner des problèmes lorsque les lignes sont groupées et une autre alternative consiste à utiliser une simple fonction VBScript pour déterminer la couleur.
C'est un peu plus d'effort mais quand la solution de base ne suffit pas, c'est une belle alternative.
Fondamentalement, vous ajoutez du code au rapport comme suit ...
Ensuite, sur chaque cellule, définissez le BackgroundColor comme suit:
Tous les détails sont sur cet article de Wrox
la source
J'ai eu l'effet d'échecs lorsque j'ai utilisé la solution de Catch22, je pense que ma matrice a plus d'une colonne en conception. cette expression a bien fonctionné pour moi:
la source
J'ai changé la solution de @ Catch22 Un peu car je n'aime pas l'idée de devoir entrer dans chaque champ si je décide que je veux changer l'une des couleurs. Ceci est particulièrement important dans les rapports dans lesquels de nombreux champs nécessiteraient une modification de la variable de couleur.
Remarqué que j'ai changé la fonction de celle qui accepte les couleurs à celle qui contient les couleurs à utiliser.
Ensuite, dans chaque champ, ajoutez:
C'est beaucoup plus robuste que de changer manuellement la couleur de la couleur d'arrière-plan de chaque champ.
la source
Une chose que j'ai remarquée est qu'aucune des deux méthodes principales n'a la moindre idée de la couleur de la première ligne dans un groupe; le groupe commencera simplement avec la couleur opposée à la dernière ligne du groupe précédent. Je voulais que mes groupes commencent toujours par la même couleur ... la première ligne de chaque groupe devrait toujours être blanche et la ligne suivante colorée.
Le concept de base était de réinitialiser la bascule lorsque chaque groupe démarre, j'ai donc ajouté un peu de code:
J'ai donc trois types différents d'arrière-plans de cellules maintenant:
Cela fonctionne pour moi. Si vous voulez que la ligne de regroupement soit non colorée ou d'une couleur différente, il devrait être assez évident de la changer.
N'hésitez pas à ajouter des commentaires sur ce qui pourrait être fait pour améliorer ce code: je suis tout nouveau à la fois dans SSRS et VB, donc je soupçonne fortement qu'il y a beaucoup de place pour l'amélioration, mais l'idée de base semble bonne (et c'était utile pour moi) alors je voulais le jeter ici.
la source
pour les en-têtes / pieds de page de groupe:
Vous pouvez également l'utiliser pour «réinitialiser» le nombre de couleurs de ligne dans chaque groupe. Je voulais que la première ligne de détail de chaque sous-groupe commence par White et cette solution (lorsqu'elle est utilisée sur la ligne de détail) a permis que cela se produise:
Voir: http://msdn.microsoft.com/en-us/library/ms159136(v=sql.100).aspx
la source
La solution de Michael Haren fonctionne très bien pour moi. Cependant, j'ai reçu un avertissement disant que "Transparent" n'est pas un BackgroundColor valide lors de la prévisualisation. Nous avons trouvé une solution rapide à partir de la définition de BackgroundColor des éléments de rapport dans SSRS . N'utilisez rien au lieu de "Transparent"
la source
Le seul moyen efficace de résoudre ce problème sans utiliser VB est de "stocker" la valeur du module de groupement de lignes dans le groupement de lignes (et en dehors du groupement de colonnes) et de la référencer explicitement dans ton groupement de colonnes. J'ai trouvé cette solution à
http://ankeet1.blogspot.com/2009/02/alternating-row-background-color-for.html
Mais Ankeet n'est pas le meilleur travail pour expliquer ce qui se passe, et sa solution recommande l'étape inutile de créer un regroupement sur une valeur constante, alors voici mon processus étape par étape pour une matrice avec un seul groupe de lignes RowGroup1:
Définissez la valeur de la zone de texte de RowGroupColor sur
=iif(RunningValue(Fields![RowGroupField].Value ,CountDistinct,Nothing) Mod 2, "LightSteelBlue", "White")
Définissez la propriété BackgroundColor de toutes vos cellules de ligne sur
"=ReportItems!RowGroupColor.Value"
Voila! Cela résout également de nombreux problèmes mentionnés dans ce fil:
Ce serait génial si SSRS exposait des propriétés en plus de Value sur les zones de texte. Vous pouvez simplement remplir ce type de calcul dans une propriété BackgroundColor des zones de texte du groupe de lignes, puis le référencer comme ReportItems! RowGroup.BackgroundColor dans toutes les autres cellules.
Ahh bien, on peut rêver ...
la source
Mon problème était que je voulais que toutes les colonnes d'affilée aient le même arrière-plan. J'ai regroupé à la fois par ligne et par colonne, et avec les deux premières solutions ici, j'ai obtenu toutes les lignes de la colonne 1 avec un fond coloré, toutes les lignes de la colonne 2 avec un fond blanc, toutes les lignes de la colonne 3 avec un fond coloré , etc. C'est comme si
RowNumber
etbOddRow
(de la solution de Catch22) faites attention à mon groupe de colonnes au lieu d'ignorer cela et d'alterner uniquement avec une nouvelle ligne.Ce que je voulais, c'est que toutes les colonnes de la ligne 1 aient un fond blanc, puis toutes les colonnes de la ligne 2 aient un fond coloré, puis toutes les colonnes de la ligne 3 aient un fond blanc, et ainsi de suite. J'ai obtenu cet effet en utilisant la réponse sélectionnée mais au lieu de passer
Nothing
àRowNumber
, j'ai passé le nom de mon groupe de colonnes, par exempleJ'ai pensé que cela pourrait être utile à quelqu'un d'autre.
la source
Je pense que cette astuce n'est pas discutée ici. Alors voilà,
Dans tout type de matrice complexe, lorsque vous voulez des couleurs de cellule alternatives, soit par ligne, soit par colonne, la solution de travail est la suivante:
Si vous voulez une couleur alternative de cellules, alors,
C'est tout.
Idem pour la ligne de couleur alternative, il vous suffit de modifier la solution en conséquence.
REMARQUE: Ici, vous devez parfois définir la bordure des cellules en conséquence, généralement elle disparaît.
N'oubliez pas non plus de supprimer la valeur 1 dans le rapport qui est entrée en photo lorsque vous avez créé un faux groupe parent.
la source
Si, pour l'ensemble du rapport, vous avez besoin d'une couleur alternative, vous pouvez utiliser le DataSet auquel votre tableau matriciel est lié pour un numéro de ligne d'identité à l'échelle du rapport sur le rapport et l'utiliser dans la fonction RowNumber ...
la source
La réponse de @ Aditya est excellente, mais il y a des cas où la mise en forme sera rejetée si la toute première cellule de la ligne (pour la mise en forme de l'arrière-plan de la ligne) a une valeur manquante (dans les tableaux complexes avec des groupes de colonnes / lignes et des valeurs manquantes).
La solution de @ Aditya exploite intelligemment le
countDistinct
résultat de larunningValue
fonction pour identifier les numéros de ligne dans un groupe de tableaux matriciels (lignes). Si vous avez des lignes de tableau matriciel avec une valeur manquante dans la première cellule,runningValue
n'incrémentera pas lecountDistinct
résultat et renverra le numéro de la ligne précédente (et, par conséquent, affectera la mise en forme de cette cellule). Pour tenir compte de cela, vous devrez ajouter un terme supplémentaire pour compenser lacountDistinct
valeur. Ma prise était de vérifier la première valeur courante dans le groupe de lignes lui-même (voir la ligne 3 de l'extrait ci-dessous):J'espère que cela t'aides.
la source
Quelqu'un pourrait-il expliquer la logique derrière la transformation du reste des champs en faux dans le code ci-dessous (à partir du post ci-dessus)
Une chose que j'ai remarquée est qu'aucune des deux méthodes principales n'a la moindre idée de la couleur de la première ligne dans un groupe; le groupe commencera simplement avec la couleur opposée à la dernière ligne du groupe précédent. Je voulais que mes groupes commencent toujours par la même couleur ... la première ligne de chaque groupe doit toujours être blanche et la ligne suivante colorée.
Le concept de base était de réinitialiser la bascule lorsque chaque groupe démarre, j'ai donc ajouté un peu de code:
J'ai donc trois types différents d'arrière-plans de cellules maintenant:
Cela fonctionne pour moi. Si vous voulez que la ligne de regroupement soit non colorée ou d'une couleur différente, il devrait être assez évident de la changer.
N'hésitez pas à ajouter des commentaires sur ce qui pourrait être fait pour améliorer ce code: je suis tout nouveau à la fois dans SSRS et VB, donc je soupçonne fortement qu'il y a beaucoup de place pour l'amélioration, mais l'idée de base semble bonne (et c'était utile pour moi) alors je voulais le jeter ici.
la source
J'ai essayé toutes ces solutions sur un tableau matriciel groupé avec des espaces de ligne et aucune n'a fonctionné dans tout le rapport. Le résultat était des lignes colorées en double et d'autres solutions ont donné lieu à des colonnes alternées!
Voici la fonction que j'ai écrite qui a fonctionné pour moi en utilisant un nombre de colonnes:
Pour un tableau à 7 colonnes, j'utilise cette expression pour Backcolour de ligne (de cellules):
la source
Juste parce qu'aucune des réponses ci-dessus ne semble fonctionner dans ma matrice, je poste ceci ici:
http://reportingservicestnt.blogspot.com/2011/09/alternate-colors-in-matrixpivot-table.html
la source
Mes données matricielles contenaient des valeurs manquantes, je n'ai donc pas pu faire fonctionner la solution d'Ahmad, mais cette solution a fonctionné pour moi
L'idée de base est de créer un groupe enfant et un champ sur votre groupe le plus interne contenant la couleur. Définissez ensuite la couleur de chaque cellule de la ligne en fonction de la valeur de ce champ.
la source
Légère modification des autres réponses d'ici qui ont fonctionné pour moi. Mon groupe a deux valeurs sur lesquelles regrouper, donc j'ai pu simplement les mettre toutes les deux dans le premier argument avec un + pour qu'il alterne correctement
la source
Lors de l'utilisation des deux groupes de lignes et de colonnes, j'ai eu un problème où les couleurs alternaient entre les colonnes même s'il s'agissait de la même ligne. J'ai résolu cela en utilisant une variable globale qui alterne uniquement lorsque la ligne change:
Maintenant, dans la première colonne de la ligne que vous souhaitez alterner, définissez l'expression de couleur sur:
-
Dans les colonnes restantes, définissez-les toutes sur:
Cela devrait faire alterner les couleurs seulement après le dessin de la première colonne.
Cela peut également (de manière non vérifiable) améliorer les performances, car il n'est pas nécessaire de faire un calcul mathématique pour chaque colonne.
la source