Wir haben unser Frühbucherangebot für die Inspire 2023 verlängert! Die Sonderpreise gelten bis zum 24. Februar - sichern Sie sich Ihren Platz!

Free Trial

Blog - Deutsch

Erkenntnisse und Ideen von den besten Analytics-Experten.
RolandSchubert
16 - Nebula
16 - Nebula

Meine erste Begegnung mit Rundung in Alteryx verlief nicht so ganz ... nennen wir es "harmonisch". Ich wollte auf zwei Nachkommastellen runden und für mich als Excel-Intensivnutzer war natürlich ganz klar, wie das geht - mit der ROUND-Funktion. Und wenn eine Funktion ROUND schon mal existiert, dann gibt doch bestimmt der erste Parameter den zu rundenden Wert an, der zweite dann die Anzahl Dezimalstellen. Und da das nicht nur in Excel, sondern zum Beispiel auch in  SQL so funktioniert, sah ich nun wirklich keine Veranlassung, die entsprechende Dokumentation zu lesen (okay, die Veranlassung sehe ich häufiger mal nicht).

 

Also - ein FORMULA Tool auf den Canvas gezogen, mit dem entsprechenden INPUT DATA Tool verbunden, ein neues Feld [gerundeter Wert] angelegt und die folgende Formel eingetragen:

 

 

ROUND([Wert], 2)

 

 

Das Ergebnis war allerdings für meinen Geschmack sehr befremdlich:

 

P03.png

 

Von zwei Nachkommastellen war da nichts zu sehen. Hatte ich da vielleicht irrtümlich bei dem neuen Feld einen Integer-Datentyp gewählt?  Aber selbst in diesem Fall -  warum wird 36.891535 auf 36 abgerundet, aber 21.352254 auf 22 aufgerundet? 

 

War Alteryx doch nicht so toll, wie ich glaubte? Doch, war es.  Wie so häufig saß die Fehlerquelle vor dem Rechner und nach einem Blick in die Hilfe war auch klar, was Alteryx getan hatte. Genau das, was ich in der Formel gesagt hatte - war nur leider nicht, was ich wollte ...

 

Und wie geht es nun wirklich?

 

Also - wie teilt man Alteryx in diesem Fall denn seine Wünsche mit? Schauen wir uns doch ein Beispiel an. Unser Ausgangspunkt ist dabei eine Tabelle mit Dezimalzahlen.

 

P01.png

 

Um jetzt diese Zahlen auf zwei Dezimaslstellen zu runden, ist tatsächlich ein FORMULA Tool mit der Funktion ROUND eine gute Idee. Aber - die Paramter sollte man nicht raten, sondern nachschauen:

 

 

ROUND(x, mult)

 

 

Der erste Parameter ist tatsächlich der zu rundende Wert (also richtig geraten)

 

Der zweite ist allerdings nicht die Anzahl Dezimalstellen, sondern der Multiplikator, auf dessen Vielfaches gerundet wird. Die klassische Rundung auf zwei Stellen erreicht man also mit

 

 

ROUND([Wert], 0.01)

 

  

Gerundet wird dann auf das Vielfache von 0.01, also auf Hundertstel. Die Rundung selbst folgt dem klassischen Prinzip - ab 0.5 wird aufgerundet, bis dahin wird abgerundet. 

 

0.015 wird also zu 0.02, während 0.0149 zu 0.01 gerundet wird.

 

P02.png

 

Jetzt sehen wir das erwartete Ergebnis. analog kann natürlich auf eine (oder drei/vier/fünf) Nachkommastellen gerundet werden; für eine Dezimalstelle sieht die Formel so aus:

 

 

ROUND([Wert], 0.1)

 

 

Auf ganzzahlige Werte wird dann so gerundet:

 

 

ROUND([Wert], 1)

 

 

Übrigens erklärt das auch die merkwürdigen Ergebnisse aus meinem ersten Versuch - Alteryx hat hier schlichtweg auf Vielfache von "2" gerundet. Dabei entspricht die Logik wieder der "kaufmännischen Rundung":  Wenn die Hälfte des Multipliers erreicht ist, wird aufgerundet.

 

P04.png

Die Hälfte ist in diesem Fall "1" - ab hier wird also auf "2" gerundet, während "0.99" zu 0 abgerundet wird.

 

Diese Gestaltung der Parameter gibt also zusätzliche Flexibilität,  die gibt es bei einfacher Angabe von Dezimalstellen natürlich nicht.

 

Wozu führt dann die folgende Formel?

 

Round([Wert],0.5)

 

Es wird jeweils auch das nächstliegende Vielfache von 0.5 gerundet, alle gerundeten Werte sind also entweder ganzzahlig oder enden auf 0.50.

 

P07.png

 

Wieder ist sehr schön zu erkennen, wie geundet wird - wenn die Dezimalstellen ".75" erreichen oder überschreiten, wird auf die nächste ganze Zahl aufgerundet, wenn sie unter ".25" liegen, wird auf die vorherige ganze Zahl abgerundet, alles dazwischen wird zu .5".

 

 

Der "einfache" Weg

 

Eine etwa "rustikalere" Form der Rundung kann natürlich auch durch die Anpassung des Datentyps erreicht werden. Bei der Umstellung auf einen FixedDecimal (oder Integer) Datentyp im SELECT Tool wird auch gleich gerundet (auf die entsprechende Anzahl von Dezimalstellen oder den ganzzahligen Wert).

 

P05.png

 

Aber Vorsicht: Der Fixed Decimal Datentyp kann nur maximal 50 Stellen aufnehmen (einschließlich Dezimalpunkt und ggf. Vorzeichen) - wenn der Aufgangswert ein Double ist, kann das schon mal zu Problemen führen. Zudem finde ich persönlich die Vorgehensweise über eine explizite Rundung "transparenter" - aber das ist Geschmackssache. Flexibler ist die Rundung über die ROUND Funktion auf jeden Fall.

 

 

Ein paar kleine Lücken ...

 

Auch ein paar Spezialfälle sind damit noch nicht abgebildet. In manchen Fällen sollen bei der Rundung die folgenden Dezimalstellen einfach abgeschnitten werden (in SQL steuert man das über den dritten Parameter, den gibt es in Alteryx nicht). Aber auch das lässt sich mit einem kleinen Trick lösen.

 

Dazu multiplizieren wir einfach den Wert mit einem Faktor, der der Anzahl der Dezimalstellen entspricht (für 2 Dezimalstellen etwa 100). Mit der Funktion FLOOR runden wir dann auf den nächsten ganzzahligen Wert ab, schneiden also die folgenden Dezimalstellen ab (im Original ab der dritten Nachkommastelle) und dividieren wieder durch 100.  

 

P06.png

 

Also auch das geht - wenn auch über einen kleinen Umweg.

 

 

 

Weitere Tipps Tuesday Beiträge:

 

Dieser Eintrag ist Teil der Tipps Tuesday-Serie, alle Einträge dieser Serie findest du in unserem Index aufgelistet.

Beschriftungen