Samstag, 9. April 2011

Fehler bei Verwendung von Unterberichten

Gestern habe ich zum ersten Mal einen Anwendungsfall für den Einsatz von Unterberichten mit Reporting Services gesehen. Bisher konnte ich - im Unterschied zum Arbeiten mit Access - alle Berichtsanforderungen mit dem Tablix-Element abdecken. Nun aber hatte ein Kunde die Anforderung, Formblätter zu erstellen. Bei Formblättern ist die Anordnung der Ausgabefelder abhängig vom Typ des zu dokumentierenden Objekts.
Überträgt man diese Anforderung auf die AdventureWorks Datenbank, könnte man sich folgende Aufgabenstellung vorstellen: Zu jeder Rechnungsposition sollen Detailinformationen dargestellt werden. Das Layout der Detailinformationen von Fahrrädern soll völlig anders gestaltet sein als das Layout der Detailinformationen von Bekleidung.
Die Idee
In einem Listenelement wird abhängig davon, ob die Detailinformationen zu "Bikes" oder "Clothing" gehört, ein Unterbericht dargestellt.

Listenelement mit zwei Unterberichten
So weit, so gut. Nun wollten wir nur noch über die Eigenschaft "Hidden" eines jeden Unterberichts mit Hilfe einer Expression dafür sorgen, dass immer nur einer dieser Unterberichte im Bericht angezeigt wird.
Die Überraschung
Das funktioniert nicht! Die Steuerung der Sichtbarkeit funktioniert immer nur für den ersten Unterbericht - der zweite wird nie sichtbar.
Die Lösung
Wir haben über eine "AND" Bedingung in der WHERE Klausel des Subreport-Datasets dafür gesorgt, dass das Dataset im Unterbericht "Bikes" keine Datensätze enthält, wenn die Rechnungsposition kein "Bike" ist. Ebenso haben wir dafür gesorgt, dass das Dataset im Unterbericht "Clothing" keine Datensätze enthält, wenn die Rechnungsposition kein "Clothing" ist.
Auf diese Weise rendert SSRS den Bericht wie gewünscht.