wake-up-neo.com

Zeilennummer für Gruppe in SSRS 2005

Ich habe eine Tabelle in einem SSRS-Bericht, die nur eine Gruppe anzeigt, nicht die Tabellendetails. Ich möchte die Zeilennummer der angezeigten Elemente herausfinden, damit ich Farbstreifen verwenden kann. Ich habe versucht, "Rowcount (Nothing)" zu verwenden, aber stattdessen bekomme ich die Zeilennummer der Detailtabelle. 

Meine zugrunde liegenden Daten sind so etwas 

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 

Meine Tabelle, die nur die Gruppen zeigt, sieht folgendermaßen aus:

ROwId   Team
2       Yankees
3       Red Socks   
8       Orioles
29      Dodgers 
43      Giants  

Ich möchte, dass es so aussieht

ROwId   Team
1       Yankees
2       Red Socks   
3       Orioles
4       Dodgers 
5       Giants  
11
FistOfFury

Sie können dies mit einem RunningValue Ausdruck tun, etwa wie:

=RunningValue(Fields!Team.Value, CountDistinct, "DataSet1")

DataSet1 ist der Name der zugrunde liegenden Datenmenge.

Betrachten Sie die Daten:

enter image description here

Das Erstellen eines einfachen Berichts und das Vergleichen der Ansätze RowNumber und RunningValue zeigt, dass RunningValue die gewünschten Ergebnisse liefert:

enter image description here

29
Ian Preston

Sie können dies leicht mit etwas vbcode erreichen. Gehen Sie zu Bericht - Eigenschaften - Code und geben Sie Folgendes ein:

Dim rownumber = 0
Function writeRow()
  rownumber = rownumber + 1
  return rownumber
End Function

Rufen Sie dann in Ihrer Zelle diese Funktion mit =Code.writeRow() auf.

Sobald Sie mit der Verwendung von Gruppen in den Tabellen beginnen, erhalten die RowNumber- und RunningGroup-Funktionen seltsame Verhaltensweisen. Daher ist es einfacher, nur ein wenig Code zu schreiben, um das zu tun, was Sie möchten.

8
Joao Leal

Ich bin nicht überzeugt, dass alle oben genannten Vorschläge eine für alle Lösungen sind. Mein Szenario ist, dass ich eine Gruppierung mit mehreren Spalten habe. Ich konnte die vereinbarte Lösung RunningValue nicht verwenden, da ich keine einzige Spalte in der Funktion verwenden kann, es sei denn, ich kombiniere sie (z. B. eine berechnete Spalte), um eine einzige eindeutige Spalte zu erstellen. 

Ich konnte die VBA-Codefunktion nicht aus demselben Grund verwenden, und ich musste den gleichen Wert für mehrere Spalten und mehrere Eigenschaften verwenden, es sei denn, ich verwende andere Arten von intelligenten Anwendungen, bei denen ich die Anzahl der Verwendungen kannte (z. B. N Spalten * M Eigenschaften) dann konnte ich die RowNumber nur bei jedem NxM-Aufruf aktualisieren. Ich konnte jedoch keine Funktion für die Anzahl der Spalten sehen. Wenn ich also eine Spalte hinzufügte, würde ich auch meine N-Konstante erhöhen müssen. Ich wollte auch keine neue Spalte hinzufügen, da diese auch meiner Gruppierung nahegelegt wurde, da ich nicht herausfinden konnte, wie sie ausgeblendet werden sollte, und ich konnte kein vba-System schreiben, in dem ich Funktion A aufrufen konnte, die nichts zurückgibt, sondern den Wert aktualisiert (dh aufgerufen) nur einmal pro Gruppenzeile) dann rufen Sie eine andere Funktion GetRowNumber auf, die einfach die Rownumber-Variable zurückgibt, da die Färbung vor dem Aufruf durchgeführt wurde. Daher hatte ich immer eine Spalte, die nicht mit dem Rest synchron war.

Meine einzigen anderen 2 Lösungen, die ich mir vorstellen kann, sind die kombinierte Spalte, wie bereits erwähnt, in der Abfrage selbst oder DENSE_RANK und die Sortierung nach allen Gruppenspalten, d. H.

DENSE_RANK() OVER (ORDER BY GroupCol1, GroupCol2, ...) AS RowNumber
0
Glen