2009-12-01 8 views
8

Ich bin zurück mit einer anderen SSRS Frage :-)SSRS Zeilengruppe + Spaltengruppe = Zeilennummer Problem

Ich habe mit Umfragedaten zu tun. Ich habe eine Prozedur, die die Antwort einer Organisation zurückgibt, die pro Frage zählt. Daher ist mein Bericht als Gruppe für Organisation für Zeile und Gruppe für Antwort für Spalten definiert. Sowohl die Anzahl der Organisationen als auch die Antworten sind variabel. Das funktioniert wie erwartet. Ich habe versucht, einen RowCount neben der Organisation hinzuzufügen, damit ich den Rang anzeigen kann, aber die Tatsache, dass jede Organisation eine Zeile pro Frage hat, bedeutet, dass ich acht Zeilen pro Organisation erhalte.

Hier ist ein Beispiel:
Chart

Hier mein Bericht Definition lautet:
Chart
Der Ausdruck Rang ist zur Zeit: =RowNumber(Nothing)

Idealerweise würde der Rang 1, 2, 3, 4 , etc ... Ich habe versucht, Bereich zu der Zeilengruppe, Spaltengruppe und nichts. Keine Hilfe.

Jede Hilfe wäre sehr willkommen!

Antwort

1

Ich habe eine Lösung gefunden, aber es fühlt sich an wie ein Hack ... Ich lasse das unbeantwortet, um zu sehen, ob jemand anderes eine bessere Lösung anbieten kann (weniger hashish).

Mein Rang Expression ist jetzt:
=RowNumber(Nothing)/Count(Fields!AnswerText.Value)

Alles scheint in Ordnung zu sein. Ich glaube, ich sollte IIf (Count ... = 0, dann RowNumber, sonst, was ich habe ...

+0

Da nichts anderes auftaucht, funktioniert dieser Ansatz, obwohl es wie ein Hack aussieht. Wenn es aggregierte Daten anzeigt, sollte es RowNumber für das Aggregat NICHT die Rohdaten ... –

+0

Hinweis: Diese Lösung funktioniert nur, wenn jede Gruppe die gleiche Anzahl von Detaildatensätzen enthält. – Dan

0

Das Beste, was hier zu tun ist, ist der Rang Spalte gleich = RowCount()/8

Da Ihr sicher, dass jede sichtbare Zeile enthält insgesamt 8 Reihen machen, sollte dies gut funktionieren.

+0

Jon, vielen Dank für die Antwort. Das Problem ist, dass ich vergessen habe zu erwähnen, dass die Anzahl der Antworten variabel ist ... Ich habe es versäumt, das zu erwähnen ... –

0

Fügen Sie eine weitere Rangspalte neben der vorhandenen hinzu und fügen Sie einen anderen Ausdruck in diesen ein, der den Wert vom Rang (rowcount?) Übernimmt und durch 8 dividiert. Dann machen Sie die alte Rangspalte unsichtbar.

0

Sind Sie absolut sicher, dass RowNumber("NameOfOrganizationGroup") mit nicht funktioniert?

Klicken Sie auf die Matrix, Klicken Sie auf das Auswahlfeld oben links, um das gesamte Objekt auszuwählen, klicken Sie dann mit der rechten Maustaste auf den Auswahlrahmen und wählen Sie Eigenschaften. Wechseln Sie zur Registerkarte Gruppen und sehen Sie sich die Namen der Gruppen im Bereich Zeilen an der Bereich der Funktion RowNumber()

Wenn Sie das bereits wissen und es ausprobiert haben, entschuldigen Sie bitte - ich wollte nicht annehmen, dass Sie es nicht wussten, es ist einfach nicht 100% klar von Ihrem Qu Es ist zu bedenken, dass dies nicht die Lösung ist.

2

Versuchen verwendet:

runningvalue(Fields!AnswerText.Value,CountDistinct,"NameOfOrganizationGroup") 

Wenn seine eine Matrix, an die Matrix Umfang den Namen des Bereichs von der Zeilen Umfang ändern.

24

Hatte das gleiche frustrierende Problem; viel Zeit verschwendet.Schließlich ist diese Lösung auch geholfen:

=RunningValue(CountDistinct("YourTableName"),Count,"YourTableName") 

Trick hier ist nicht den Namen der Gruppe, die sich in der Tabelle/Matrix, aber der Name der Tabelle zu verwenden. Und ja, man könnte denken, dass die Verwendung des Tabellennamens für den Bereich in der Funktion RowNumber funktionieren sollte, aber nicht.

+0

Danke, das sortierte ein Problem, das seit Tagen meine Nuss macht. –

+0

+1 für diese .. das half, Wunder zu tun !! der Tabellenname für mich ist der Name von DataSet – Irfan

+0

Ich denke, wir sollten DataSetName anstelle von "YourTableName" eingeben - so wäre es etwa wie: = RunningValue (CountDistinct ("YourTableName"), Count, "YourDataSetName") – pedram

2

Ich mache mit benutzerdefinierten Code.

Fügen Sie diesen Codeabschnitt auf Bericht config:

Dim private count as integer = 0 
Dim private iniRow as integer = 0 
Public function nroFila(Byval rowNum as integer) as integer 
    if iniRow = 0 then 
     iniRow = rowNum 
    end if 

    if rowNum = iniRow then 
     count = 0 
    end if 

    count = count + 1 
    Return count 
End function 

Dann rufen Sie die Funktion in einer Zelle innerhalb der Gruppe:

=Code.nroFila(RowNumber(Nothing))