Sequentielle vs parallele Ausführung von SSRS Datasets

13. Januar 2016

Wie allgemein bekannt, werden die einzelnen Datasets in SSRS parallel ausgewertet, soweit eine Parallelisierung überhaupt möglich ist.

Wenn ein Dataset von einem Parameter abhängt, der von einem anderen Dataset ermittelt wird, ist selbstverständlich nur eine sequentielle Ausführung möglich. Auf dem Screenshot unten (SQL Server Profiler Log für einen einfachen Bericht, der Internet Sales aus der Adventure Works Datenbank nach Farbe und Größe anzeigt) sieht man, dass die SQL-Abfragen in der Tat gleichzeitig ausgeführt werden.

image

Manchmal braucht man allerdings eine sequentielle Ausführung der DataSets, wenn die Abfragen Nebeneffekte haben. Klassisches Beispiel: Man möchte in der Abfrage des ersten Datasets die Zwischenergebnisse vorberechnen und in der Datenbank persistieren, die von mehreren Datasets des Reports wiederverwendet werden. Dafür kann man eine wenig bekannte Eigenschaft der SSRS Datasources nutzen – Use Single Transaction. Dann werden die Datasets in der Reihenfolge abgefragt, in der sie im Report stehen (bei Bedarf die Reihenfolge in der .rdl Datei im Editor anpassen). Das Ergebnis sieht man auf dem Screenshot unten.

image

Aufpassen muss man mit der Preview-Funktion in SSTDT-BI (aka BIDS). Sie führt nämlich die Abfragen immer sequentiell aus und ist aus diesem Grund zum Testen der Abfragen mit Nebeneffekten oder Performanzmessungen nicht geeignet.