1. Die Anforderung ist simpel:
„Die Linien innerhalb der Matrix sollen Grau und die untere Zeile soll bitte schwarz sein.“
Die meisten Reportdesigner schreiben sich solch ein Anliegen gar nicht auf, sondern setzen schlicht die Rahmenfarbe der Zeilen auf Grau und die des Subtotals auf Schwarz und reichen den Report zufrieden weiter.
Ergebnis:
2. Die Anforderung erweitert sich „gering“:
„Sehr geehrter Reportdesigner, die senkrechten Linien gefallen uns nicht, könnten Sie stattdessen einen Abstand zwischen die Länderspalten einbauen?“
Noch kommt keine Unruhe auf, flugs wird folgendes Design umgesetzt:
Auf den Zeilen wird eine neue Gruppe mit derselben Gruppierung wie die vorhergehende und im Detailfeld der Matrix einfach eine weitere Spalte eingefügt.
Die Rahmen der eingefügten Abstandsspalten bleiben unsichtbar, die Rahmenfarbe des Subtotals bleibt weiterhin schwarz.
Ergebnis:
Die Linie des Subtotals zieht sich leider über alle Spalten hinweg. Dies mag dem einen oder anderen nicht der Rede wert erscheinen, ärgerlich und unschön bleibt es trotzdem.
Konsequenz des pfiffigen Reportdesigners:
Ausblenden der Rahmen des Subtotals und Formatierung der Rahmenfarbe der Zeilengruppen und des Detailfeldes!
Dies kann durch folgende Ausdrücke erreicht werden (bei BorderStyle, Bottom=Solid)
Für die Zeilengruppen (Textbox Product) gilt:
BorderColor=IIF(RowNumber(„MyDataSetName“)=CountRows(„MyDataSetName“), „Black“,“Silver“)
d.h.:
Wenn die letzte Zeile des Datasets erreicht ist, färbe die Rahmen bitte Schwarz ein, sonst Silber.
Für die Zeile funktioniert das prima, für das Detailfeld muss aber auf die letzte Zeile der Spaltengruppe verwiesen werden, da das Scope („MyDataSetName“) auf Detailebene nicht gültig ist.
Für das Detailfeld (Textbox mit Wertfeld) muss also gelten:
BorderColor=IIF(RowNumber(„MyColumnGroupName„)=CountRows(„MyColumnGroupName „),“Black“,“Silver“)
Und genau an dieser Stelle fängt der Ã?rger an.
Nehmen wir an, der Reportdesigner ist ein sparsamer Mensch und möchte sich im Dataset die leeren Zeilen für den OrderCount in Australien und Frankreich sparen und filtert diese Zeilen heraus.
MDX:
SELECT
NON
EMPTY
{
[Measures].[Reseller Order Count]
} ON
COLUMNS,
NON
EMPTY — > !! FILTERT LEERZEILEN
{ (STRTOSET(@countryCountry,CONSTRAINED) ,
STRTOSET(@productProduct,CONSTRAINED))} ON
ROWS
FROM [Adventure Works]
Das Dataset sieht dann wie folgt aus:
Ergebnis im bereitgestellten Report: (Die Vorschau im VisualStudio zählt natürlich NICHT!)
Das Problem wird schnell klar, natürlich ist die letzte Zeile in der Ländergruppe für Australien auch die einzige,
der o.g. Ausdruck sorgt für eine schwarze Färbung und alle
nachfolgenden, vom Report zu rendernden Elemente übernehmen die Formatierung des letzten Elementes, welches noch einen direkten Bezug zur Datasetzeile bzw. den Zeilen der angegebenen Gruppe besitzt. Das Phänomen kann sowohl auf Zeilen wie auch auf Spaltengruppen beobachtet werden.
Ein weiterer Versuch, die Ausdrücke für die Rahmenfarbe anders zu formulieren:
BorderColor=IIF(InScope(„matrix1_RowGroup1″),“Silver“,“Black“)zeigte gar kein Ergebnis für die Spalten:
Damit bleibt leider kein anderer Schluss, als die Leerzeilen für die Ländergruppierung mit ins Dataset aufzunehmen:
SELECT
NON
EMPTY
{
[Measures].[Reseller Order Count]
} ON
COLUMNS,
–non empty auskommentiert
{ (STRTOSET(@countryCountry,CONSTRAINED) ,
STRTOSET(@productProduct,CONSTRAINED))} ON
ROWS
FROM [Adventure Works]
Dataset:
Gewünschtes Ergebnis im Report: