2016-07-26 13 views
17

Wenn wir SSRS zum Erstellen von Berichten verwenden, können wir das Abfragefeld im Dataset-Fenster verwenden, um benutzerdefinierte Abfragen zu erstellen. Aber in lokalen Berichten (.RDLC), wenn wir Berichte erstellen möchten, sollten wir ein entworfenes Dataset für den Bericht festlegen.Verwenden von Dataset für Microsoft-Berichte

enter image description here

Das Problem ist, wenn wir 100 Berichte haben auch 100 haben wir sollten Datasets.Currently verwenden wir einen Datensatz mit diesen Feldern (F1, F2, F3, ..., F100) und vor unserer Datentabelle verbindlich zu den Berichten ändern wir den Namen der Datentabellenspalten. aber die Lesbarkeit ist gering.

Ich möchte fragen, gibt es bessere Möglichkeit, dieses Problem zu lösen?

Dank

+0

Sie mit einer Lösung in Ordnung sind, die für Ihre Berichte dynmaic Datensätze zur Laufzeit und legen Sie es als Datenquelle herstellte? – lokusking

+0

Ich kann deine Frage nicht wirklich beantworten. Möchten Sie wissen, ob Ihre GUI zu kompiliert ist oder ob die Lesbarkeit Ihres Codes etwas erhöht werden könnte? In jedem Fall würde es mit einigen Code-Schnipsel und Screenshots helfen. – Megajin

Antwort

1

ich mehr Informationen, um zu helfen, benötigen - sind Sie wirklich sagen, dass Sie Datensätze mit Feldern markiert haben F1, F2, F3, ... und dass Sie jetzt die Notwendigkeit zu binden tatsächliche Tabellen mit Spalten, die (zB) Id, CustType, IsActive, ...?

Wenn dies der Fall ist, würde ich vorschlagen, Ansichten zu verwenden, die jeden Feldnamen Alias ​​F1, F2, ... Dies klingt wie genau so viel Arbeit wie Ihr ursprüngliches Problem, aber alles kann automatisiert werden.

Das Erstellen dieser 100 Ansichten kann über ein Skript erreicht werden. Dieses Skript kann erstellt werden, indem Smart T-SQL ausgeführt wird, das die in SQL Server gespeicherten Schemadaten abruft und das erforderliche Skript ausgibt.

Werfen Sie einen Blick auf How can I get column names from a table in SQL Server?, um loszulegen.

Sie müssen wahrscheinlich Cursor in Ihrem T-SQL verwenden, um die Schemadaten durchzulaufen und das Skript auszugeben, um die Ansichten zu erstellen.

Schließlich, wenn Sie jeden Ihrer 100 SSRS-Berichte auf die gleiche Weise ändern müssen, dann vergessen Sie nicht, dass jeder in Report Definition Language (XML) gespeichert ist, so dass Sie in der Lage sein können, ein kleines Dienstprogramm zu schreiben XML-Datei und führt die notwendigen Änderungen durch. Vergessen Sie nicht, diese Dateien zuerst zu sichern, bevor Sie ein neues Dienstprogramm darauf loslassen.

Ich hoffe, all dies hilft und die Antwort ist nicht zu spät angekommen.

+0

Danke, aber ich weiß alles was du gesagt hast und ich probiere einige von ihnen aus. Also suche ich nach einer besseren Lösung – Arian

3

Die beste Lösung ist die Gruppierung der Datensätze. Sie können Datensätze nach Geschäftsbereichen gruppieren. Zum Beispiel POLICY.xsd, USER.xsd, INVOICE.xsd und fügen Sie ein anderes Dataset in die xsd-Datei ein.

Zum Beispiel In Visual Studio sehen Sie 10 Dataset-Datei. Aber jedes Element hat verschiedene Databases.

Zweites Upgrade wird Sie besser t-sql schreiben. Wenn Sie Ihre Spalte für einen ähnlichen Bericht allgemein auswählen, verwenden Sie dieselben Databases.

Zum Beispiel umfasst ein Bericht 5 columsn A1, A2, A3, A4, A5 B Bericht umfassen 6-Säule A1, A2, A3, A4, A5, A6

für diese melden Sie B Bericht verwenden Datentabelle

0

Ich muss gestehen, dass ich das Problem mit den bisher gelieferten Informationen nicht vollständig verstehe, aber hier ist eine Lösung, die für Sie ein großer Vorteil sein könnte.

Haben Sie versucht, Berichte aus gespeicherten Prozeduren zu erstellen?Wenn Sie diese Schritte ausführen, enthält Ihre RDLC-Datei keine Abfrage, sondern die Definition der Abfrage in der gespeicherten Prozedur und erstellt ein Dataset in der RDLC-Datei. Zur Laufzeit führen Sie dann die gespeicherte Prozedur in Code aus und übergeben die zurückgegebenen Daten zur Ausführung an die RDLC-Datei.

Die Vorteile dabei sind, dass die Abfragen als Datenbankobjekte verkapselt werden, Sie nicht mit einer Million Datasets in Ihrem Projekt enden, und Sie können die Abfrage vom Bericht trennen, wenn Sie das tun hatte 6 Versionen des gleichen Berichts, die alle die gleichen Felder verwendeten, aber unterschiedliche WHERE-Klauseln verwendeten, zum Beispiel konnten Sie nur einen einzelnen Bericht verwenden (und den relevanten gespeicherten Prozess zur Laufzeit aufrufen).

0

Obwohl es schön wäre, eine Minimal, Complete, and Verifiable example zu sehen, gebe ich es auch eine Chance.

Was Sie tun können, ist, erstellen Sie eine Tabelle in Ihrer Datenbank, legen Sie die Daten, die Sie benötigen in Verbindung mit jedem DataSet und durchlaufen Sie diese Daten.

dh

ID ............. Felder ........................ .................. QueryType .............. SqlQuery/StoredProcedure

1 ......... ...... ProducID, ProductName ............ 0 ............................ ..SP_GetBasicProductInfo

2 ............... Bestell-ID, Produkt-ID ..................... 0 .. ............................ SP_GetOrderIdsByProduct

3 ... ............ Kundennummer, Kundenname .... 1 .............................. wählen Sie CustomerID, Kundenname Von Northwind.Customers

usw.

auf diese Weise können Sie die Felder erhalten werden abgebildet und sQL-Abfrage ausgeführt werden. Sie können diese Information am Ende an Ihre Data Access Layer übergeben, um die Abfrage auszuführen und das benötigte DataSet auszufüllen.

Sie können versuchen, alles zu Zeichenfolge konvertieren oder sogar ein Trennzeichen für jede dieser Art verwenden, wie int|ProductID,string|ProductName