Einfachste Berechnung = ungültig
Ich habe ein Berechnungsfeld erstellt mit einer einfachen Mal Rechnung, exakt wie in Eurer Anleitung. Bei mir heisst es aber immer nur "ungültiger Operator "mul". Das Minuten Feld ist eine Auswahlliste mit Zahlen in Zehnerschritten. Was mache ich falsch?
6 Antworten
-
Hallo, die Werte von Auswahlfeldern, auch Ziffernfolgen, werden standardmäßig als Texte übergeben, mit denen keine mathematischen Operationen möglich sind. Wenn du in dem Auswahlfeld nur Ziffern hast, z. B. "10", "20", "30" usw. dann kannst du sie mit number() in numerische Werte umwandeln. Die Formel würde in diesen Fall lauten:
1,7 * number(text(Minuten))
-
Danke, ja so funktioniert es. Ich nehme an "Text" wäre irgend eine Bezeichnung die eingesetzt werden kann? Ich habe es weggelassen, da diese im Zahlenformat hinterlegt ist.
also ist die Formel schliesslich: 1.7 * number(Minuten)
-
Wenn es so funktioniert, wie du es willst, dann ist es ja gut. Um aber Missverständnise zu vermeiden - ich war von folgender Konstellation ausgegangen:
Die Auswahl der zweiten Option ("20") würde normalerweise folgende Ergebnisse bringen:
Minuten = "20" (als Textwert)
text(Minuten) = "20" (als Textwert)
number(Minuten) = 2 (als Zahl)
number(text(Minuten)) = 20 (als Zahl)Die Formel 'number(Minuten) * 1.7' müsste in diesem Beispiel also als Ergebnis 3,4 ergeben.
Der Vollständigkeit halber: Wenn man bei einme Auswahlfeld noch eine Farbe und ein Symbol für den Eintrag wählt, kann man diese mit 'color(Minuten)' bzw. 'icon(Minuten)' abfragen.
-
Stimmt. Das hat mich auch verwirrt, denn 20* müsste ja 17 geben, das Resultat war jedoch 1,7, dann habe ich die Berechnung eben * 17 gemacht. Das Resultat stimmt jetzt, im dem Fall aber nur weil die internet Nummerierung übereinstimmt, was ich natürlich erst Durch Deine Erläuterung verstehe.
Um es korrekt zu machen, wie kann man den wirklichen Wert des Feldes als Zahl übergeben, und nicht die interne Nummerierung?
-
So, wie ich's oben schon geschrieben hatte: Mit 'number(text(Minuten))'. Vorausgesetzt, die Auswahl-Einträge enthalten tatsächlich nur Ziffern. Sonst wird's ein bisschen komplizierter.
Auswahlfelder sind prinzipiell dazu gedacht, dem Nutzer eine Auswahl vorgegebener Optionen zu ermöglichen. Da dies in der Regel Stichworte, Begriffe oder Bezeichnungen sind, z. B. "Geplant", "In Arbeit" und "Erledigt" zur Angabe eines Status, behandelt Ninox alle Optionen prinzipiell als Textwerte. Auch, wenn der Inhalt zufälligerweise nur aus Ziffern besteht. Wir lesen da zwar die Zahl 20, Ninox erkennt aber nur eine Zeichenfolge aus "2" und "0".
Allerdings kann man sich die Ninox-Funktion number() zu Nutze machen, mit der sich Textwerte, die nur aus Ziffern bestehen, in numerische Werte umwandeln lassen. Die Funktion 'number("20")' ergäbe demnach die Zahl 20.
Die Idee, es mit 'number(Minute)' zu versuchen, war im Grunde also keineswegs abwegig. Bei Auswahlfeldern funktioniert das nur leider nicht, weil number() hier dazu gedacht ist, auf die automatisch erzeugten Nummern der Optionen zuzugreifen (was manchmal sinnvoll sein kann), welche aber keinerlei inhaltliche Verbindung zu den jeweiligen Texteinträgen haben.
Die Angabe 'number(Minuten)' ergibt demnach nicht 20, sondern 2, weil es sich um den zweiten Eintrag handelt. Dass man in deinem Fall diesen Wert einfach mit 10 multiplizieren kann, um das richtige Ergebnis zu bekommen, ist reiner Zufall und setzt zudem voraus, dass die Einträge immer in der richtigen Reihenfolge vorgenommen werden. Darauf würde ich nach Möglichkeit keine Formeln oder Scripte aufbauen.
Deshalb muss man hier zwei Schritte machen: Erst mit 'text(Minuten)' explizit den Textwert der gewählten Option auslesen ("20") und diesen dann mit 'number()' in eine Zahl umwandeln (20). Die beiden Schritte lassen sich aber in einem Statement zusammenfassen (die Abarbeitung verschachtelter Funktionen erfolgt in der Regel von innen nach außen bzw. von rechts nach links):
number(text(Minuten))
Die Umwandlung von Text- in Zahlwerte funktioniert allerdings wie eingangs gesagt nur, wenn der Textwert tatsächlich ausschließlich Ziffern enthält. Mit Textwerten wie "12A3" oder "20 Min." könnte die Funktion number() so ohne weiteres erst mal nichts anfangen. Als Ergebnis würde in den meisten Fällen 0 angezeigt.
Ich hoffe, es ist jetzt ein bisschen klarer geworden.
-
Danke. Da habe offenbar ich mich nicht deutlich ausgedrückt. Das war mir alles klar schon aus Deiner ersten Erklärung. Nur dass eines der bereits genannten das richtige script ist, war mir nicht klar. Auf jeden Fall funktioniert es jetzt korrekt mit 1.7
Vielen Dank
Content aside
- vor 6 JahrenZuletzt aktiv
- 6Antworten
- 2538Ansichten