Im Anschluss an den Microsoft Launch Event vom 19.-21. Februar in Frankfurt, auf dem ich ja über die Neuerungen von Analysis Services 2008 referieren durfte, hat es einige Fragen zu den ominösen „Blockberechnungen“ gegeben, die ich ja beim Vortrag in einem kurzen Beispiel vorgestellt hatte. Bevor die DVD mit den Folien der Vorträge verschickt wird, werde ich daher hier mal das mühevoll gefundene Statement veröffentlichen, mit dem man den Effekt von Block Calculation auf der AdventureWorks-Datenbank demonstrieren kann:
WITH
MEMBER Measures.Umsatzanteil AS
[Measures].[Reseller Sales Amount]/
([Measures].[Reseller Sales Amount], [Geography].[Country].CurrentMember.Parent)
, FORMAT_STRING =
„Percent“
SELECT {
[Geography].[Country].[France]
, [Geography].[Country].[Germany]
, [Geography].[Country].[United Kingdom]
} ON
COLUMNS,
{[Date].[Calendar].&[2001]:[Date].[Calendar].&[2003]} ON
ROWS
FROM [Adventure Works]
WHERE [Measures].[Umsatzanteil]
Der Trick dabei ist, dass es für alle drei Länder im Jahr 2001 keine Umsätze gibt, in Deutschland sogar auch nicht in 2002. Analysis Services 2008 erkennt dies, berechnet nur die gefüllten 5 Zellen (von insgesamt 9) und gibt die verbleibenden Zellen als leer aus.
Im Vortrag habe ich dieses mit Hilfe des Performance Monitor Counters MSAS 2005:MDX:Cells calculated demonstriert, der auf jedem Rechner zur Verfügung steht (in Deutsch heißt er „Berechnete Zellen gesamt„). Diesen zu überwachen ist etwas mühsam, denn er wird nur beim Neustart von SSAS auf null gesetzt und zählt ansonsten bei jeder MDX-Berechnung, die der Server ausführt, mit. Man sollte sich also eine eigene Testmaschine suchen! Auf dieser sieht man dann, dass der Zähler nach Beendigung der Abfrage um 9 Zellen erhöht ist; denkbar wäre ja auch 5 (denn so viele Zellen sind gefüllt), aber Cells calculated enthält immer mindestens so viele Zellen, wie ausgegeben werden.
Wer diese Abfrage auf Analysis Services 2005 ausführt und ebenfalls Cells calculated beobachtet, der sieht am Ende eine Erhöhung des Counters um 27! Warum er nun diese neun Zellen dreimal evaluiert, kann ich nur raten: Weil es drei Jahre sind? Weil drei Länder angezeigt werden? Egal: man sieht deutlich, welche Ersparnis schon bei diesem reichlich konstruierten Beispiel erzielt wird. In der wirklichen Welt sind Cubes oftmals viel weniger gefüllt als AdventureWorks; viel mehr sparse, wie der Engländer sagt. Die Performance-Beschleunigung, die man ja teilweise und mit viel Mühe auch schon mit Analysis Services 2005 Service Pack 2 erreichen kann, ist also gewaltig.