KNOWLEDGE BASE

Bei der Anpassung des Zahlenformats werden Zahlen scheinbar falsch gerundet


Veröffentlicht: 15 Oct 2015
Zuletzt geändert am: 10 Nov 2023

Problem

Wenn die Anzahl der angezeigten Dezimalstellen für eine Zahl angepasst wird, kann es den Anschein haben, dass die Zahlen falsch auf- oder abgerundet werden. Beispielsweise kann eine als 40,5 angezeigte Zahl sich in 40 ändern, wenn die Formatierung so geändert wird, dass keine Dezimalstellen angezeigt werden.

Wenn Sie außerdem ROUND() in einer STR()-Funktion verwenden, werden Zahlen bei Verbindung mit einem Extrakt möglicherweise falsch gerundet. Beispiel: STR(ROUND(SUM[Sales]),2)

Umgebung

Tableau Desktop

Lösung

Option 1

Zahlen können in Tableau Desktop mit der Funktion ROUND() gerundet werden. Beim Erstellen der Berechnung muss jedoch die Aggregation berücksichtigt werden, da Tableau die Berechnung relativ zu den angewendeten Aggregationen auswertet. Wenn beispielsweise das Feld SUM([Field]) gerundet werden soll und die Berechnung ROUND([Field]) verwendet wird, interpretiert Tableau diese Berechnung als SUM(Round([Field])

Um dieses Verhalten zu korrigieren, schreiben Sie das oben stehende Berechnungsbeispiel wie folgt um: ROUND(SUM(Field))

Ein konkretes Beispiel finden Sie in der angehängten Arbeitsmappe mit dem Namen Round String.twbx.

Option 2

Verwenden Sie zusätzliche Zeichenfolgenmodifizierer wie LEFT() sowie zusätzliche Rundungswerkzeuge wie CEILING(), um eine genauere Darstellung zu erstellen.
  • Beachten Sie, dass durch diese Änderungen ein langes und nicht besonders leistungsstarkes berechnetes Feld entstehen kann: STR(ROUND(SUM[Sales]),2) = 319,147230000001
  • Unter Verwendung der oben stehenden Änderungen: LEFT(STR((CEILING(SUM([Sales])*100))/100),6) = 319,15

Option 3

Zeigen Sie die zugrunde liegenden Daten an, um die ursprüngliche Zahl zu überprüfen und sicherzustellen, dass sie für das Zahlenformat richtig gerundet wird. Beispielsweise wird ein ursprünglicher Wert von 40,48 richtig auf 40,5 gerundet, wenn eine Dezimalstelle angegeben wird, und auf 40, wenn null Dezimalstellen angegeben werden.

Ursache

Tableau Desktop (Tableau Prep) rundet Zahlen anhand des ursprünglichen Werts in der Datenbank und folgt dabei der Regel, dass nach der Hälfte aufgerundet wird. 

Zusätzliche Informationen

Dies ist kein spezielles Verhalten von Tableau Desktop, sondern hängt damit zusammen, wie Daten auf Computern gespeichert werden, insbesondere Dezimalzahlen. Bei Ganzzahlen kann einfach eine ganze Zahl addiert oder subtrahiert werden. Für binäre Daten gilt das Gleiche: 
  • Dezimal: 4 + 1 = 5 
  • Binär: 100 + 1 = 101 
Einfache Dezimalzahlen können jedoch in einigen Fällen nicht exakt als binäre Zahlen dargestellt werden.

Beispielsweise ist 0,1 eine einfache Dezimalzahl. In der binären Darstellung entspricht diese Zahl sowohl 0,0999999999999999 als auch 0,1000000000000001 und allen Zahlen dazwischen. (Beachten Sie, dass jede Zahl genau 16 Dezimalstellen umfasst.) Für die Anzeige der Zahlenwerte auf der Darstellungsebene kann das Problem gelöst werden. Sollen jedoch Berechnungen anhand der Werte durchgeführt werden oder die Werte in Zeichenfolgen umgewandelt werden, dann kommen die zugrunde liegenden Werte zum Vorschein und dieses Verhalten ändert sich abhängig von verschiedenen Faktoren wie beispielsweise der Datenbank. 

Die folgenden Beispiele/Artikel zeigen, wie sich dieses grundlegende Problem der Informatik in verschiedenen Sprachen auswirkt. 
Weitere Informationen zu diesem Thema und mögliche Problemumgehungen in Tableau Desktop finden Sie in folgendem Community-Foren-Thread: Round and then convert to a string (Runden und anschließendes Konvertieren in eine Zeichenfolge). 

Weitere Informationen zur Funktion ROUND() finden Sie in der folgenden Tableau-Hilfedokumentation: Zahlenfunktionen.


Hat dieser Artikel das Problem gelöst?