web-dev-qa-db-fra.com

RowNumber pour le groupe dans SSRS 2005

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  
11
FistOfFury

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:

enter image description here

Créer un rapport simple et comparer les approches RowNumber et RunningValue montre que RunningValue donne les résultats requis:

enter image description here

29
Ian Preston

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.

8
Joao Leal

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
0
Glen