Dienstag, 6. Januar 2015

Spaltenüberschriften auf jeder Seite wiederholen

Es ist eine typische Anforderung an einen Bericht, dass die Spaltenüberschriften einer langen Tabelle sich auf jeder Seite wiederholen. Dafür bietet Reporting Services eine scheinbar einfach zu verwendende Eigenschaft, die nach einem Rechtsklick auf die Tabelle und Auswahl von "Tablix Properties" zu sehen ist. Sie heißt "Column Headers" und bietet zwei Checkboxen. Die erste dient zum Wiederholen der Spaltenüberschriften auf jeder Seite und die zweite blendet die Spaltenüberschriften auch dann am oberen Bildrand ein, wenn Sie eine lange Seite im Browser herunterscrollen.

Diese Option hat bei Tabellen keine Auswirkung
Allerdings hat diese Eigenschaft bei Tabellen einen entscheidenden Nachteil: Sie funktioniert nicht. Die Spaltenüberschriften werden NICHT wiederholt, unabhängig davon, ob Sie den Haken setzen oder nicht.

Mit einer Matrix geht's

So ganz wirkungslos sind diese Checkboxen allerdings nicht. Wenn Sie mit einer Matrix anstelle einer Tabelle arbeiten, dann werden die Spaltenüberschriften sehr wohl wiederholt.


Bei einer Matrix werden die Spaltenüberschriften wiederholt
 
Was ist hier anders? Die Matrix zeichnet sich ja dadurch aus, dass die Anzahl der Spalten von den Daten im Dataset bestimmt wird. Im Beispiel gibt es Daten für die Jahre 2005 bis 2008. Gäbe es darüber hinaus noch Daten für das Jahr 2009, würde der Matrix automatisch eine entsprechende Spalte hinzugefügt. Man könnte auch sagen, dass bei der Matrix die Spalten dynamisch sind. Die Eigenschaft "Repeat header columns on each page" bezieht sich also auf dynamische Spalten.

Die Lösung für Tabellen

In einer Tabelle hingegen sind die Spalten statisch. Zur Entwurfszeit legen Sie fest, welche Spalten der Tabelle im Bericht angezeigt werden sollen. Und für statische Spalten gilt die Eigenschaft "Repeat header columns on each page" eben nicht.
Die Lösung für statische Spalten ist leider nicht so einfach, aber dafür zeigt sie uns tiefer liegende Eigenarten von Reporting Services. Es wird also spannend.
Schauen wir uns zunächst das Problem genauer an. Dazu habe ich einen Bericht erstellt, der eine Tabelle mit Umsatzzahlen pro Monat darstellt. Jedes Jahr beginnt auf einer neuen Seite. Die statischen Spaltenüberschriften (Order Year, Order Month und Sales Amount) werden auf der ersten Seite angezeigt, aber auf den Folgeseiten nicht mehr.
 
Bei einer Tabelle werden die statischen Spaltenüberschriften nicht wiederholt
 
Um die Eigenschaften der statischen Spaltenüberschriften zu sehen, brauchen Sie das wohl am besten versteckte Bedienelement der Visual Studio Oberfläche: rechts unten, im Bereich der Gruppenkonfiguration, finden Sie bei genauem Hinsehen einen kleinen Pfeil.
Dieser unscheinbare Pfeil (rot umrandet) ist der Schlüssel zur Lösung
Nach Klicken auf den Pfeil können Sie den "Advanced Mode" einschalten. Diese Betriebsart stellt in den beiden Fenstern der Gruppenkonfiguration (Row Groups und Column Groups) auch die statischen Elemente dar.

Nach Anklicken eines "Static" Eintrags wird das entsprechende Feld in der Tabelle dick umrandet
Was Sie jetzt noch brauchen, ist nach dem Anklicken des ersten "Static" Elements in der Row Group das "Eigenschaften" Fenster, um die Eigenschaften dieses statischen Elements zu sehen. Falls das Fenster nicht schon in Visual Studio angezeigt wird, können Sie es über den Menüpunkt "Ansicht" - "Eigenschaftenfenster" oder mit der Taste [F4] einblenden. Wenn Sie die Eigenschaft "KeepWithGroup" auf "After" einstellen und die Eigenschaft "RepeatOnNewPage" auf "True", dann erreichen Sie den gewünschten Effekt.

Die Eigenschaften KeepWithGroup und RepeatOnNewPage der statischen Spaltenüberschrift führen zur Lösung
Interessanterweise funktioniert das nur dann, wenn Sie diese Einstellung bei der ersten statischen Spaltenüberschrift durchführen.

Spaltenüberschriften beim Scrollen immer anzeigen

Am Anfang dieses Beitrags hatte ich noch eine weitere Eigenschaft erwähnt, die bei dynamischen Spaltenüberschriften möglich ist: "Keep header visible while scrolling". Auch bei statischen Überschriften können Sie das konfigurieren, allerdings heißt die entsprechende Eigenschaft im Eigenschaften-Fenster "FixedData".

Die (gelb hinterlegten) Spaltenüberschriften bleiben auch beim Scrollen am oberen Bildrand sichtbar
Übrigens finden Sie eine Beschreibung dieses Verhaltens auch in der MSDN Dokumentation. Allerdings in einer Form, die für mich nicht so offensichtlich war. Ich musste mich einige Zeit mit diesem Thema beschäftigen, bevor mir die Hintergründe klar wurden. Von daher hoffe ich, dass dieser Beitrag Ihnen das Arbeiten mit statischen Spaltenüberschriften in Reporting Services etwas einfacher macht.