J'ai une table dans un rapport SSRS qui affiche uniquement un groupe, pas les détails de la table. Je souhaite connaître le numéro de ligne des éléments affichés pour pouvoir utiliser la bande de couleur. J'ai essayé d'utiliser "Rowcount (Nothing)", mais j'ai plutôt le numéro de la ligne de la table de détails.
Mes données sous-jacentes sont quelque chose comme
ROwId Team Fan
1 Yankees John
2 Yankees Russ
3 Red Socks Mark
4 Red Socks Mary
...
8 Orioles Elliot
...
29 Dodgers Jim
...
43 Giants Harry
Mon tableau montrant uniquement les groupes ressemble à ceci:
ROwId Team
2 Yankees
3 Red Socks
8 Orioles
29 Dodgers
43 Giants
Je veux qu'il ressemble
ROwId Team
1 Yankees
2 Red Socks
3 Orioles
4 Dodgers
5 Giants
Vous pouvez faire cela avec un RunningValue expression, quelque chose comme:
=RunningValue(Fields!Team.Value, CountDistinct, "DataSet1")
DataSet1
étant le nom de l'ensemble de données sous-jacent.
Considérez les données:
Créer un rapport simple et comparer les approches RowNumber
et RunningValue
montre que RunningValue
donne les résultats requis:
Vous pouvez facilement y parvenir avec un peu de vbcode. Allez à Rapport - Propriétés - code et tapez quelque chose comme:
Dim rownumber = 0
Function writeRow()
rownumber = rownumber + 1
return rownumber
End Function
Puis sur votre cellulaire, appelez cette fonction en utilisant =Code.writeRow()
Dès que vous commencez à utiliser des groupes dans les tables, les fonctions RowNumber et RunningGroup commencent à avoir des comportements étranges. Il est donc plus facile d'écrire un peu de code pour faire ce que vous voulez.
Je ne suis pas convaincu que toutes les suggestions ci-dessus constituent une solution unique. Mon scénario est que j'ai un groupe qui a plusieurs colonnes. Je ne pouvais pas utiliser la solution convenue RunningValue car je n'avais pas une seule colonne à utiliser dans la fonction, sauf si je les combinais (par exemple une colonne calculée) pour créer une seule colonne.
Je ne pouvais pas utiliser la fonction de code VBA en l'état pour la même raison et je devais utiliser la même valeur sur plusieurs colonnes et plusieurs propriétés à moins que j'utilise un autre type d'intelligence où, si je connaissais le nombre d'utilisations (disons N column * M properties), je ne pouvais donc mettre à jour le RowNumber que sur tous les appels NxM; toutefois, je ne pouvais voir aucune fonction de décompte des colonnes. Par conséquent, si j’ajoutais une colonne, il faudrait également augmenter ma constante N Je ne voulais pas non plus ajouter une nouvelle colonne, comme le suggérait également mon groupe, car je ne savais pas comment le cacher et je ne pouvais pas écrire de système vba où je pouvais appeler la fonction A qui ne renvoie rien mais met à jour la valeur Une seule fois par ligne de groupe), appelez ensuite une autre fonction GetRowNumber qui renvoie simplement la variable de numéro d’arrivée car la coloration a été effectuée avant l’appel, de sorte que j’ai toujours eu une colonne désynchronisée par rapport au reste.
Mes deux autres solutions auxquelles je pouvais penser sont de mettre la colonne combinée comme mentionné précédemment dans la requête elle-même ou d'utiliser DENSE_RANK et de trier toutes les colonnes du groupe, c'est-à-dire.
DENSE_RANK() OVER (ORDER BY GroupCol1, GroupCol2, ...) AS RowNumber