Analysten kennen das Phänomen: Es gibt ein Analysetool mit Sprungmarken von einem zum nächsten Bericht und alles ist auf einander eingespielt. Plötzlich kommt die Anforderung eine neue Analyse zu erstellen und Sie wissen sofort, dass die Hälfte der neuen Anforderung bereits in vorhandenen Berichten erfüllt ist. Nur kann man nicht einfach einen neuen verknüpften Bericht hinzufügen, weil die Parameterübergaben nicht passen.

In Microsoft SQL Server Reporting Services gibt es dafür die Möglichkeit Parameter bei Verweisen zu einem Unterbericht bedingt zu übergeben, je nachdem, ob die Parameter im Unterbericht existieren oder nicht. Es muss ein Ausdruck in der Eigenschaft Auslassen (engl. Omit) hinterlegt werden, der bestimmt, ob ein Parameter übergeben werden soll oder eben nicht. Somit wird das „Anbauen“ sehr vereinfacht. Bei Diagrammen gibt es jedoch einen Fehler (betrifft mindestens die Versionen 2005, 2008 und 2008 R2), der verhindert, dass der Ausdruck übernommen wird…

 

Das Fallbeispiel

Für das Beispiel in diesem Blogeintrag gibt es im Dataset ein Feld Reason Type und die Werte Internet Sales aus dem Beispielcube „Adventure Works DW 2008R2“. Es soll von einem Bericht Parent aus je nach Reason Type auf den Unterbericht Brother (mit Parameter paraBrother) oder Sister (mit Parameter paraSister) verwiesen werden.

Dafür gibt es im Bericht eine Tabelle und ein Diagramm. Die Einträge der ersten Spalte und die Säulen des Diagramms sollen die Verweise beinhalten.

Tabelle und Diagramm mit Verlinkungen

Um die Verweise einzubauen, müssen wie gewohnt die Action-Eigenschaften der Tabellenzelle bzw. der Diagrammsäulen gesetzt werden. Im Normalfall werden Parameter bedingt übergeben, wenn es mindestens zwei potentielle Zielberichte gibt. Das heißt, dass die Zielberichte abhängig vom Reason Type ausgewählt werden.

Ausdruck für den Unterberichtverweis

Bis hier her gibt es kein Problem und alles funktioniert wie erwartet.

Das Problem

Beide Berichte haben unterschiedliche Parameter paraBrother und paraSister. Diese übergeben in diesem Fall eine einfache Zeichenkette, sagen wir beispielhaft „brother“ und „sister“. Das bedeutet, dass die Ausdrücke für die Auslassen-Eigenschaft angepasst werden müssen, um dem Unterbericht Brother nicht den Parameter paraSister mit zu übergeben.

Die Auslassen-Eigenschaft

Setzen der Auslassen-Eigenschaft

Nachdem die Ausdrücke in der Tabellenzelle und den Diagrammsäulen gesetzt wurden, wird getestet:

Die Verlinkungen in den Tabellenzellen funktionieren. Die Berichte werden wie gewünscht ohne Fehler verlinkt und ausgeführt.

Die Verlinkungen in den Diagrammsäulen hingegen werfen Fehler. Reporting Services behauptet, dass der jeweils auszulassende Parameter nicht definiert sei. Aber wir haben doch extra die Eigenschaft Auslassen gesetzt?! Ein Blick in diese Eigenschaft verrät: Die Ausdrücke wurden nicht übernommen! Das passiert, wenn die Zielberichte dynamisch bestimmt werden.

Die Abhilfe

Was nun? Es gibt einen Workaround, mit dem Reporting Services eine Ausdrucksänderung doch akzeptiert:

  1. Öffnen Sie den Ausdruck für den Zielbericht und kopieren Sie ihn in einen Texteditor. Diesen Ausdruck brauchen wir später wieder.
  2. Ändern Sie den Ausdruck mit Hilfe des Auswahllistenfeldes zu einem der angebotenen Berichte.
  3. Ändern Sie jetzt die Ausdrücke der Auslassen-Eigenschaften der Parameter.
  4. Klicken Sie OK, speichern Sie den Bericht.
  5. Prüfen Sie, ob die Ausdrücke tatsächlich geändert wurden. Falls es nicht der Fall ist, ändern sie den Zielbericht nochmals mit Hilfe des Auswahllistenfeldes und passen Sie die Eigenschaft Auslassen wiederholt an. Dann funktioniert es.
  6. Jetzt kann der Ausdruck für den Zielbericht wieder (mit dem kopierten Text) zurückgesetzt werden.

Ein folgender Test zeigt, dass die Verlinkungen korrekt eingerichtet sind und die gewünschten Parameter übergeben werden.

Dieser Workaround ist etwas mühselig, aber er funktioniert. Viel Erfolg!