Ich arbeite an einem ziemlich komplexen Bericht in Sql Server Reporting Services. Mein SP gibt eine dynamische Anzahl von Spalten zurück, von denen jede dynamisch benannt ist.
Im Grunde denken Sie an eine zeitaufwendige Anwendung. Jede Spalte, die dynamisch ist, stellt einen Zeitabschnitt dar, für den die Zeit für dieses Team berechnet wurde. Wenn diesem Bucket für den Zeitraum, den der Bericht abdeckt, keine Zeit in Rechnung gestellt wurde, wird dies nicht angezeigt. Jeder Bucket hat eine eigene Kennung, die ich als Spaltenüberschriften benötige.
Ich habe einen SP, der das alles zurückgibt. Es tut es, indem Sie ein wenig dynamisches SQL mit einer exec-Anweisung (hässlich ich weiß, aber ich bin auf SQL 2000, so dass eine PIVOT-Option nicht funktionieren würde)
Ich kann eine unbegrenzte Anzahl von Buckets haben und alle oder alle anzeigen.
Ich fand das - Ссылка - was hilfreich ist, aber im Beispiel hat er eine Endlichkeit Anzahl der Spalten und er verbirgt oder zeigt sie nur nach welchen Werten. In meinem Fall habe ich eine variable Anzahl von Spalten, also brauche ich irgendwie den Bericht, um Spalten hinzuzufügen.
Irgendwelche Gedanken?
Solange Sie eine maximale Anzahl von Spalten kennen, ist es möglich, dies nach einer Mode zu tun.
Benennen Sie zuerst die Spalten mit einem Ergebnis aus Ihrer Abfrage, damit Sie sie entweder an die Abfrage übergeben oder dort ableiten können. Zweitens, erstellen Sie den Bericht so, als ob er die maximale Anzahl an Spalten hätte, und blenden Sie ihn aus, falls sie leer sind.
Ich musste zum Beispiel einen Bericht erstellen, der monatliche Verkaufszahlen für bis zu einem Jahr angibt, aber die Monate begannen nicht unbedingt im Januar. Ich gab den Monatsnamen in einer Spalte zurück, gefolgt von den Zahlen für meinen Bericht. Auf der .rdl-Datei habe ich 12 Spaltensätze erstellt, eine für jeden möglichen Monat, und einfach einen Ausdruck verwendet, um die Spalte zu verbergen, wenn sie leer war. Das Ergebnis ist, dass der Bericht auf die Anzahl der benötigten Spalten erweitert wird.
Natürlich ist es nicht wirklich dynamisch in dem Sinne, dass es sich so weit ausdehnen kann, wie Sie brauchen, ohne die obere Grenze zu kennen.
Dies kann gemacht werden. Ich habe das gemacht und es funktioniert gut. Sie müssen nicht die maximale Anzahl von Spalten kennen oder Spalten in meinem Ansatz ein- und ausblenden. Verwenden Sie eine Matrix und ändern Sie Ihre SP, um dynamische Daten an die in diesem Blogpost erwähnte Struktur zurückzugeben Ссылка
Erstellen Sie 2 verknüpfte Datensätze, der erste für den Berichtsinhalt und der zweite für die Liste der Spaltenbezeichnungen.
Der Datensatz des Berichtsinhaltes muss eine feste Anzahl von Spalten und Namen haben. Sie können eine maximale Anzahl von Spalten zuweisen.
In diesem Beispiel habe ich die ersten beiden Spalten als fest oder immer sichtbar und maximal vier Spalten, die wahlweise über einen mehrwertigen Parameter oder abhängig von den Abfragebedingungen angezeigt werden können. Und wie immer können wir auch eine Summe haben. So könnte es aussehen:
%Vor%Das zweite Dataset mit seinen Werten sieht wie folgt aus:
%Vor%Ich habe das vierte Label weggelassen, um zu zeigen, dass nicht alle Spalten von einer bestimmten Abfragebedingung verwendet werden. Denken Sie daran, dass beide Datasets mit derselben Abfrage verknüpft sein sollen.
Erstellen Sie nun einen Parameter namens @columns; Füllen Sie die verfügbaren Werte und Standardwerte mit dem zweiten Datensatz.
Legen Sie für jede dieser vier dynamischen Spalten die Spaltensichtbarkeit mit dem folgenden Ausdruck fest:
%Vor%Und verwenden Sie für jeden ihrer Spaltenüberschrift-Textfelder den folgenden Ausdruck:
%Vor%Wie für die Summe, hier ist der Ausdruck für seine Sichtbarkeit:
%Vor%Und hier ist für seine Werte:
%Vor%Das ist alles, hoffe es hilft.
Bonus, dieses zweite Dataset, dsColumns
, kann auch andere Spaltenattribute wie Farbe, Breite, Schriftarten usw. enthalten.
Ich denke, der beste Weg, dies zu tun, ist, alle Spalten in Ihrer Tabelle hinzuzufügen und die Sichtbarkeitseigenschaft davon mit Hilfe von Argumenten zu bearbeiten, die Sie von Ihrem SP erhalten. Dies wird den Zweck der dynamischen Spalte lösen, aber beim Betrachten Im Bericht erhalten Sie eine Menge Leerraum, den Sie mit SSRS - Behalten Sie beim gleichzeitigen Ausblenden von Spalten eine Tabelle gleich breit? und Ihr Bericht ist fertig.
Ich hatte das Bedürfnis, dies in der Vergangenheit zu tun, und die Schlussfolgerung, zu der ich kam, ist "Du kannst nicht", aber ich bin nicht davon überzeugt. Wenn Sie eine Lösung finden, würde ich lieben davon hören.
Ein Problem, das Ihnen in den Sinn kommt, ist, dass Sie den Bericht unter Verwendung der Namen der Spalten definieren müssen, die Sie aus dem gespeicherten Prozess zurückbekommen, und wenn Sie diese Namen nicht kennen oder wissen, wie viele davon existieren , wie können Sie den Bericht definieren?
Die einzige Idee, die ich dabei hatte, ist, die Berichtsdefinition (.rdl-Datei) dynamisch über C # zu erstellen, aber zu diesem Zeitpunkt konnte ich keine MS-API dafür finden, und ich bezweifle es Eins existiert jetzt. Ich habe einen Open Source gefunden, aber ich habe diesen Weg nicht verfolgt.
Tags und Links reporting-services sql-server-2000