Essbase verarbeitet alle Zahlen mit 15-stelliger Genauigkeit, das wissen Sie vielleicht schon. Bei einem Kunden haben wir jetzt Version 11.1.2.4 und trafen auf einen besonderen Sachverhalt. Wir importierten Daten in Essbase als 5.6e-002 oder 0.056, doch wenn wir uns diese nach einem DATAEXPORT in der Datei ansehen, dann sahen wir die Zahl 5.599999999999999e-002. Dieses verwirrte mich und ich bin der Sache auf den Grund gegangen.
Die Basis für die Berechnungen und wie Zahlen in Essbase gespeichert werden liegen in dem Standard „754-2008 – IEEE Standard for Floating-Point Arithmetic“ URL: http://ieeexplore.ieee.org/document/4610935/. Um hier Klartext zu schreiben, möchte ich mich auf einfachere Beispiele konzentrieren und zeigen, dass die oben geschilderte Situation eine doch minimale Abweichung ist und so hingenommen werden muss.
Computerberechnungen sind nicht ganz wie Mathematik. Es wird ein Unterschied gemacht zwischen Nachkommastellen und signifikante Ziffern. Dieses ist vielleicht am besten an der Zahl „Pi“ (π) zu erklären. Ich habe die ersten 20 Ziffern dieser interessanten Zahl hier dargestellt. Grün sind die ersten 15 signifikanten Ziffern, danach kommen noch 5 weitere die rot gekennzeichnet sind.
3.1415926535897932384
Essbase kann nur mit 15 Ziffern korrekt rechnen. Essbase kann 16 Ziffern vorhalten, wie hiernach gezeigt wird, und die weiteren Ziffern werden abgeschnitten.
Importdatei
Abbildung 1: Zahlen die in eine Essbase Datenbank hochgeladen wurden.
Export aus Essbase
Abbildung 2: Zahlen die aus einer Essbase Datenbank exportiert wurden.
Wir sehen, 16 Ziffern wurden gespeichert, die weiteren Ziffern wurden abgeschnitten. Übrigens, hierzu gab es keine Nachricht in der Logdatei.
Wir sehen auch wie dieses sich auf die Nachkommastellen auswirkt. Wenn wir die Zahlen mal in Excel untereinander stellen, und 15 Nachkommastellen anzeigen, dann sehen wir dass die obere Zahl weitere Ziffern in der Form von Nullen bekommt. Dieses ist eine Ungenauigkeit.
Abbildung 3. Darstellung der Zahlen in Excel mit 15 Nachkommastellen.
Was passiert denn, wenn wir die Zahlen aggregieren? In der Abbildung 4 sehen sie das Ergebnis. Die Gesamte Zahl von ACC_69 wird berücksichtigt in der Abrundung auf die 15 signifikante Ziffern.
Abbildung 4. Aggregation der Zahlen in Excel mit 15 Nachkommastellen.
3,14159265358979 wird zur 3,14159265 aber gerechnet wird mit der ganzen Zahl und daher aufgerundet und nicht mathematisch abgerundet. Excel macht dieses genauso wie in Abbildung 5 zu sehen ist.
Abbildung 5: Aggregation in Excel ist gleich der Zahl ACC_262 die aus der Essbase Datenbank kommt.
Essbase ist also nur genau, bis zu der letzten Ziffer hinter dem Komma der größten Zahl. In dem Beispiel hier oben hat das ACC_464 nur 8 Dezimalstellen. Daher kann das Ergebnis aus dieser Zahl immer auch nur bis zur 9. Dezimalstelle genau sein.
Jetzt denken sie, aber wenn ich sehr viele Zahlen mit unterschiedlichsten Dezimalstellen addiere, dann „läppert sich das doch zusammen“ in einen signifikaten Unterschied? Das scheint nicht so zu sein, denn Essbase verwendet einen Algoritmus mit dem Namen „Kahan’s Summation Algorithm“ welches im Hintergrund die „verlorenen“ Nachkommastellen beibehält und wenn notwendig, wieder berücksichtigt. Hierdurch wächst die Abweichung nicht linear, mit der Aggregation.
Wenn sie in einem Calc Skript eine Logik mit einem Vergleich von Zahlen schreiben möchten, dann sollten sie dieses beachten.
Nun wieder zu meinem Problem
Ich lade eine 5.6e-002 oder 0.056 in die Datenbank und bekomme eine 5.599999999999999e-002 zurück. Wie groß ist jetzt meine Abweichung? Etwas kleiner als ich auf den ersten Blick dachte… es sind ganze 0,0000000000000001.
Ich muss zugeben, dieses ist eine ausreichende Genauigkeit und man sollte sich nicht nur die ersten Zahlen ansehen.
Warum gibt es aber einen Unterschied zu älteren Essbase Versionen?
Hier muss ich mutmaßen, aber der Essbase Kernel ist neu in Java geschrieben worden. Hierin sind Optimierungen und Verbesserungen eingeflossen. Dann kann es zu diesen kleinen Abweichungen kommen.
Weitere Dokumente:
The Limits of Data Precision in Essbase (Doc ID 1311188.1)
Ihr Philip Hulsebosch.
Schreibe einen Kommentar
Du musst angemeldet sein, um einen Kommentar abzugeben.