Neuerungen in Analysis Services Stored Procedures 1.3.7

29. Oktober 2012

Das ASSP (Analysis Services Stored Procedures) Projekt  ist schon länger in MS BI Kreisen bekannt. Hauptsächlich von Greg Galloway  entwickelt, stellt ASSP eine Reihe von nützlichen Erweiterungen für SQL Server Analysis Services (2005-2012) bereit.

Eine wichtige in ASSP implementierte Funktionalität ist für die Analyse von Performanzproblemen in MDX-Abfragen unverzichtbar. Und zwar interessiert man sich oft für die "cold cache"-Zeiten einer MDX-Abfrage, da aber SSAS gerne die Zwischenergebnisse in Formula bzw. Storage Engine Cache speichert, ist es manchmal nicht ganz leicht, die gleichen Rahmenbedingungen für unterschiedliche Varianten einer Abfrage zu konstruieren (wenn man Windows Standby Cache  berücksichtigt, wird das Ganze noch komplizierter).

ASSP bietet mit ClearFileSystemCache()/ClearCache()/ClearAllCaches() Funktionen Abhilfe. Ein typischer Ablauf sieht dann so aus:

   1: CALL ASSP.ClearAllCaches() --Natürlich nur auf einem Dev/Test System 

   2:  

   3: select {} on 0 from MyCube --Reinitialisiere MDX-Skript 

   4:  

   5: --MDX Abfrage, die man testet.

Abschließend/gleichzeitig kann man die Ausführung und Instrumentierungsdaten im Profiler (z.B. Resource Usage Event), Performance Monitor oder MDX Studio beobachten.

Eine weitere nützliche Funktion im Arsenal von ASSP heißt GetCubeLastProcessedDate(). Mit dieser Funktion kann man sehr elegant den Endanwendern die Möglichkeit geben, das Datum der letzten Cubebeladung zu sehen:

   1: --Cube MDX Skript

   2:  

   3: CREATE MEMBER CurrentCube.[Measures].[Cube Last Processed] AS 

   4:     ASSP.GetCubeLastProcessedDate() 

   5:     ,DISPLAY_FOLDER = 'System' 

   6:     ,VISIBLE = 1; 

Die definierte berechnete Kennzahl kann man sich dann in der Excel Pivot-Tabelle anzeigen lassen.

CubeLastProcessed

Leider hat die Funktion GetCubeLastProcessedDate() eine unschöne Besonderheit, dass der Zeitstempel nicht aktualisiert wird, wenn man nicht den ganzen Cube, sondern lediglich eine Partition verarbeitet hat (was bei großen Cubes mit inkrementeller Beladung der Normalfall ist). Auch nach der Ausführung von ProcessUpdate auf einer Dimension wird der Wert nicht aktualisiert. Die Version 1.3.7 von ASSP enthält eine neue Funktion GetLastProcessedDateOverPartitions(), die den aktuellsten Beladungszeitpunkt anzeigt (optional auf Cube/MeasureGroup/Partition eingeschränkt).