Serverbasierte Berichterstattung

Werbung
SONDERDRUCK AUS COMPUTERWORLD NR. 3/2006 VOM 20. JANUAR
DEVELOPERWORLD
Serverbasierte
Berichterstattung
Mit den Reporting Services, der serverseitigen Reporting-Lösung des SQL Servers,
lassen sich flexible Lösungen für das Berichtswesen im Unternehmen aufbauen.
VON HARALD ALFERI*
M
it Crystal Reports bot Microsoft in
Visual Studio bislang eine Lösung
für Windows-basierte ReportingAnwendungen. Spätestens nach der Übernahme von Crystal durch Business Objects
im Jahre 2003, der Ausrichtung von Microsoft in Richtung Business Intelligence und
dem wachsenden Bedarf von Enterprise-Reporting-Lösungen schien für die Redmonder
die Zeit reif zu sein für eine eigene, auf Unternehmensanforderungen ausgerichtete
Reporting-Lösung. Im Januar 2004 lancierte
der Softwaremulti mit Reporting Services
als Add-on zum SQL Server 2000 dann
prompt eine eigene Anwendung für die Abwicklung von Berichten. Mit dem Release
von SQL Server 2005 im November letzten
Jahres gibt es nun bereits die zweite Fassung
der Reporting-Dienste, welche eine ganze
Palette von interessanten Neuerungen bereithält.
Server-basiertes Reporting
Die grosse Stärke der Reporting Services
(RS) ist der serverbasierte Ansatz: Reports
werden serverseitig mit Daten versorgt, aufWEITERE INFORMATIONEN
Neuerungen der SQL Server
2005 Reporting Services
Entwickler
– Expression Editor im Report Designer
– Custom Report Items
– Verbessertes Dundas-Chart-Control
– Analysis Services Query Designer
– .NET Report Viewer Controls (ASP.NET 2.0
und WinForms 2.0)
– Integration mit SQL Server Management Studio
– Report Builder Model Designer
Anwender
– Report Builder (Ad-hoc-Report-Designer für
Endanwender)
– Multivalued Parameters
– Sortierung für Enduser
– Direktes Client-Printing
50 WWW.COMPUTERWORLD.CH / 20. JANUAR 2006
bereitet und das Ergebnis im gewünschten
Format (HTML, PDF, TIFF, Excel, XML, etc.)
an den Anwender weitergereicht. Das sorgt
einerseits für eine schnelle Reporterstellung
und erspart andererseits das Deployment
eines Client-Tools. Die zweite Stärke ist das
offene Format in dem ein Report definiert
wird. So lassen sich Berichte dank der XMLbasierenden Report Definition Language
(RDL) [1] nicht nur mit dem mitgelieferten
Report Designer, sondern auch mit Werkzeugen von Drittanbietern erstellen.
Reports können nach dem Pull-Prinzip
(On-Demand) abgerufen oder per Abonnement im Push-Verfahren per E-Mail oder
File-Share ausgeliefert werden. Die Subscription-Reports basieren auf so genannten
Snapshots der ihnen zugrunde liegenden
Daten und sind somit nur noch eingeschränkt parametrisierbar. Dafür geeignet
sind üblicherweise Informationen, die einem breiten Publikum regelmässig zugestellt werden.
mindestens fünf Komponenten erforderlich: Datenquellen, Report-Designer, Report-Management-Tool, Report-Prozessor
und Report-Betrachter (siehe auch Diagramm «Die Reporting Services Architektur»). Als Datenquellen können SQL-Server- und Oracle-Datenbanken, AnalysisServices-Würfel, OLE-DB-, ODBC- und
XML-Datenquellen, sowie neuerdings das
ReportServer-Modell verwendet werden.
Als Designer-Tool gibt es den Reporting
Services Designer für Visual Studio (Screen 1)
mit diversen Wizards zur einfachen Reporterstellung. Da die Reports auf dem offenen
XML-basierten RDL-Format beruhen, lassen sich diese auch mit Werkzeugen von
Drittanbietern erstellen und über das WebService-Interface der Reporting Services
auf den Server ausliefern. Für die Verwaltung und Ausführung der Berichte steht der
Report Manager (Screen 2) zur Verfügung.
Dabei handelt es sich um eine Web-Anwendung, die auf ASP.NET und den Management-Web-Services der Reporting Services
Reporting Services
basiert. Für die eigentliche Verarbeitung
der Berichte ist der Report-Processor, das
Serverseitiges Reporting unterstützt den
eigentliche Herzstück des Report-Servers,
Design-Ansatz «Separation of Concerns»:
zuständig. Für On-Demand-Reports holt
Jede Komponente konzentriert sich auf
sich der Report-Prozessor die in der Reporihre Stärke mit klar abgegrenzten Aufgating-Service-Datenbank (SQL Server) abbenbereichen. Nach diesem Grundsatz sind
gespeicherte RDL-Definition, führt die Anfrage
gegen die Datenquelle
durch und kombiniert
das Resultat in ein Zwischenformat. Dieses
kann, abhängig von der
Art und Security des Reports, im Cache oder als
Report-Snapshot abgelegt werden. Mit Hilfe
von so genannten Rendering Extensions wird
der Bericht im gewünschten Format gerendert und an den User
Screen 1: Berichte lassen sich mit dem Report Designer direkt in Visual
Studio 2005 kreieren.
weitergereicht. Als Re-
Reporting Services
port-Betrachter kommen der Report Manager oder die Reporting-Services-Web-Parts
für SharePoint in Frage. Ab der 2005er-Version steht je ein ReportViewer-Control für
WinForms 2.0 und ASP.NET 2.0 zur Verfügung, welches die Integration von Berichten in eigene .NET-Anwendungen erleichtert. Da Report-Prozessor und -Betrachter
nicht auf derselben Maschine laufen müssen, ist ein Interface notwendig, um die
Berichte vom Server zum Client zu übertragen. Diese Aufgabe wird von den ReportServer Web Service Endpoints wahrgenommen (Screen 3).
Erweiterungsmöglichkeiten
Die Reporting Services bieten eine Reihe
von Ansatzpunkten für individuelle Erweiterungen. So gibt es beispielsweise eine
Delivery Extension, mit der sich Subscription-Reports direkt in einer SharePoint Document Library ablegen lassen. Oder es
lassen sich eigene Front-Ends erstellen, die
mit Hilfe der Web Service Endpoints, die
Reporting-Funktionen des Servers nutzen.
Das folgende Codebeispiel zeigt, wie sich
mit Hilfe der RS Web Services ein Bericht
(«Product Line Sales» im Ordner «Sample»)
als PDF-Dokument rendern lässt. Zunächst
wird der Web Service initialisiert und der
Report mit Hilfe der Methode «Render» als
PDF-Byte-Array von den Reporting Services
zurückgeliefert. Zuletzt wird das Byte-Array
als PDF-Datei gespeichert (Listing 1).
Praxiserfahrungen
Die grössten Problembereiche sind erfahrungsgemäss der Report-Designer und das
Seitenumbruchverhalten beim PDF-Rendering. Man sollte daher peinlichst genau auf
die Masse von Body und Seite achten. Oft
hilft das Einfärben von Objekten zum Auffinden der eigentlichen Problemstellen. Im
Report Designer sollte man insbesondere
die folgenden Dinge beachten: Die Reporting Services sind case-sensitiv; dies gilt
insbesondere für die Namen der Datenfelder. Den Query-Designer sollte man nicht
überbeanspruchen. Stattdessen empfiehlt
sich für komplexe Queries ein passendes
Objekt in der Datenquelle zu implementieren (Stichwort: Kapselung). Die Code-Ansicht hilft an vielen Stellen weiter, beispielsweise zum Kopieren des Style-Tags als Ersatz
für das Pinseltool. Filter sollte man nur gezielt und nicht an zu vielen Stellen einset-
Screen 2: Berichte werden mit dem auf ASP.NET-basierenden Report Manager verwaltet.
zen, sonst sind diese später nur schwer auffindbar.
Fazit
Serverseitiges Reporting bietet neben einer
hohen Geschwindigkeit bei der Erstellung
von Reports, zusätzliche Skalierungs- und
Security-Möglichkeiten, die clientseitiges
Reporting nicht bieten kann. Den Preis, den
man dafür zahlen muss, ist die Bereitschaft
sich in die scheinbar komplexen Komponenten von Reporting Services einzuarbeiten
– doch der Aufwand lohnt sich. ■
* Harald Alferi ist Senior Consultant bei Trivadis mit
Schwerpunkt Microsoft Server Technologien.
WEITERE INFORMATIONEN
Verweise und Links
[1] Report Definition Language Specification
http://www.microsoft.com/sql/technologies/reporting/rdlspec.mspx
[2] Dundas Chart for Reporting Services
http://www.dundasreporting.com/products/
chart/features/
[3] SQL Server 2005 Reporting Services http://
www.microsoft.com/technet/prodtechnol/
sql/2005/2005ssrs.mspx
Screen 3: Die Reporting Services beruhen auf einer modularen Architektur.
Die gelben Kästchen zeigen die Ansatzpunkte für eigene Erweiterungen.
Listing1
// init web service proxy class
ReportingService rs = new ReportingService();
rs.Url = “http://localhost/ReportServer/ReportService.asmx”;
rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
// init render output parameters
string encoding; // encoding returned
string mimeType; // mime type returned
ParameterValue[ ] parametersUsed; // parameters used for rendering
Warning[ ] warnings; // warnings issued during processing
string[ ] streamIDs; // id’s of child streams, e.g. images, css
// render report with default parameters as PDF, 600 dpi resolution
byte[ ] result = rs.Render(“/Sample/Product Line Sales”, “PDF”, null,
“<DeviceInfo><DpiX>600</DpiX><DpiY>600</DpiY></DeviceInfo>”,
null, null, null, out encoding, out mimeType,
out parametersUsed, out warnings, out streamIDs);
FileStream stream = File.OpenWrite(@”c:\ProductLineSales.pdf”);
stream.Write(result, 0, result.Length);
stream.Close();
WWW.COMPUTERWORLD.CH / 20. JANUAR 2006
51
Herunterladen