Formeln erstellen

Formeln werden an mehreren Stellen in Ninox verwendet. Formeln können mit Hilfe des visuellen Formeleditors erstellt werden, der im Folgenden beschrieben wird.

Darüberhinaus können Formeln auch als Text eingegeben, werden. Die Texteingabe ist für fortgeschrittene Benutzer bei umfangreicheren Formeln hilfreich. Sie bietet zudem erweiterte Möglichkeiten. Eine englischsprachige Einführung in die Formelsprache finden Sie unter: NX-Language-Tutorial.

Der nachfolgende Screenshot zeigt die Definition eines Berechnungs-Feldes in einer Tabelle.

function_editor

a) Wie jedes andere Feld auch, hat ein Berechnungsfeld einen Namen, der im Eingabeformular oder als Tabellenspalte angezeigt wird.

b) Durch Tippen auf das Feld Berechnung / Formel wird der Formeleditor geöffnet.

c) Wenn die Formel einen Zahlenwert zurückgibt, kann ein Zahlenformat für das Ergebnis eingestellt werden. So können Sie sich Zahlen z. B. als Geldbetrag anzeigen lassen.

d) Auch für Formeln kann eine Feldbreite für das Eingabeformular festgelegt werden.

Der Formeleditor

Der Formeleditor öffnet sich in der unteren Bildschirmhälfte. Er ist ein drei Bereiche eingeteilt: In dem großen weißen Feld befindet sich die eingegebene Formel, darunter befindet sich eine Auflistung der Elemente – also Datenfelder, Rechenoperationen etc. – die Sie zur Formel hinzufügen können. Wenn die Formel unvollständig oder fehlerhaft ist, wird eine entsprechende Meldung oberhalb der Formel eingeblendet.

Um Elemente zur Formel hinzuzufügen, ziehen Sie diese aus dem unteren Bereich in das weiße Formelfeld. Die Stelle, an der das Element eingefügt wird, leuchtet rot auf.

Um ein Element aus der Formel zu entfernen, ziehen Sie es nach oben aus dem weißen Feld heraus.

e) Das Formeldfeld

f) Fügen Sie neue Elemente per Drag & Drop hinzu.

l) Bricht die Eingabe der Formel ab

m) Bestätigt die Formeleingabe. Die Eingabe kann nur bestätigt werden, wenn keine Formelfehler angezeigt werden.

Formelelemente

g) Felder

Unter Felder werden alle (für Formeln relevante) Felder der aktuellen Tabelle aufgelistet. In der ersten Zeile steht der Tabellenname. Darunter folgen die Datenfelder.

Eine Besonderheit stellen Tabellenverknüpfungen dar: Tabellenverknüpfungen werden blau hinterlegt; Sie können diese nicht direkt in die Formel ziehen. Tippen Sie stattdessen auf die Verknüpfung. Nun werden alle relevanten Felder aus der verknüpften Tabelle angezeigt. In der ersten Zeile können Sie wieder zurücknavigieren.

Wenn Sie einer umgekehrten Verknüpfung folgen (<=), dann können Sie deren Datenfelder (wieder blau hinterlegt) nicht direkt in die Formel ziehen. Tippen Sie auf das Datenfeld, um eine Auflistung der möglichen Aggregationen des Datenfeldes zu sehen: Summe, Durchschnitt, Minimum, Maximum, Anzahl etc.

h) Rechnen

Der Karteireiter Rechnen birgt alle verfügbaren mathematischen Operationen sowie ein Feld zur Eingabe konstanter Zahlenwerte (1234).

i) Logik

Unter dem Karteireiter Logik befinden sich Funktionen zur bedingten Berechnung (wenn / dann / sonst), logische Verknüpfungen und Vergleichsoperatoren.

k) Text / Datum

Text- und datumsbezogene Funktionen sind im Karteireiter Text / Datum abgelegt. Für die Datumsrechnung sollten Sie zusätzlich aber auch die besonderen Fähigkeiten der Rechenoperatoren +, -, *, / beachten. Zusammengesetzte Texte erzeugen Sie mit +.

 

 

 

 

137 Gedanken zu „Formeln erstellen

  1. Hallo zusammen,
    durch meine Frage werdet ihr merken dass ich ein blutiger Anfänger bin:

    Wie kann man beim Klicken auf eine Schaltfläche
    in einem Berechnungsfeld den Wert Datum = Heute in der Form TT.MM.JJ und
    in einem weiteren Berechnungsfeld den Wert Zeit = Jetzt in der Form hh:mm
    eintragen lassen?
    Mfg
    Georg_0815

    PS: Vielen Dank, auch für den bisherigen Support

    1. Hallo Georg_0815,

      Die Berechnungsfelder lassen sich durch Befehlsschaltflächen nicht beeinflussen. Sie haben eigene Berechnungsformel (heißen deswegen auch Berechnungsfelder).
      Die Formel für Berechnungsfelder wären entsprechend:

      format(now(),"hh:mm")
      und
      format(now(),"DD.MM.YY")

      Problem dabei ist, dass die werte sich ständig verändern werden.

      Wenn du momentane Datum und Uhrzeit festlegen möchtest (timestamp), dann würde ich dafür ein Datumsfeld und ein Zeitfeld anlegen und dann die Formel für die Befehlsschaltfläche schreiben:

      Datumsfeld := date(now());
      Uhrzeitfeld := time(now())

      Grüße
      Leo

      1. Danke Leo,
        kaum wollte ich ergänzen, dass ich bei einem Lösungsversuch
        wie “Variante1″ in Deiner Antwort, auf das Problem gestoßen bin,
        dass die Felder sich verändern, komme hier zurück
        und finde die Antwort auf meine noch nicht gestellte Frage!
        Toll, Danke. Werde versuchen es umzusetzen
        Gruß Georg_0815

      2. Hallo Leo, ich habe

        eine Befehlsschaltfläche Start mit der Funktion
        UhrzeitS := time(now()) + (‘Zeit eingetragen’ := true) und
        Feld nur anzeigen, wenn: ‘Zeit eingetragen’ = false and UhrzeitS != “”

        ein Ja/Nein-Feld ‘Zeit eingetragen’ (mit Standartwert Nein)

        ein Uhrzeitfeld UhrzeitS (Uhrzeitformat 9:42 AM)

        ein Berechnungsfeld Zeit mit Funktion format(UhrzeitS, “HH:mm”).

        Letztendlich ist es gewollt, dass nachdem man die Schaltfläche geklickt worde die Schaltfläche unsichtbar wird und der Zeitstempel im Feld Zeit nicht mehr verändert wird.

        Die Schaltfläche funktioniert soweit nur mit dem kleinen Problem, dass der berechnete Wert im Feld Zeit um eine Stunde höher ist als der Wert im Feld UhrzeitS. Ich verstehe die Differenz nicht. Ich arbeite zur Zeit in einem Test auf der Ninox-Cloud, und ändere für Testzwecke das Systemdatum und Systemuhrzeit meines PCs. Beim Ändern des Systemdatum gibt es keine Probleme.

        Gruss Georg_0815 (und Danke vorab)

      3. Hallo Leo, ich habe

        eine Befehlsschaltfläche Start mit der Funktion
        UhrzeitS := time(now()) + (‘Zeit eingetragen’ := true) und
        Feld nur anzeigen, wenn: ‘Zeit eingetragen’ = false and UhrzeitS != “”

        ein Ja/Nein-Feld ‘Zeit eingetragen’ (mit Standartwert Nein)

        ein Uhrzeitfeld UhrzeitS (Uhrzeitformat 9:42 AM)

        ein Berechnungsfeld Zeit mit Funktion format(UhrzeitS, “HH:mm”).

        Letztendlich ist es gewollt, dass nachdem man die Schaltfläche geklickt worde die Schaltfläche unsichtbar wird und der Zeitstempel im Feld Zeit nicht mehr verändert wird.

        Die Schaltfläche funktioniert soweit nur mit dem kleinen Problem, dass der berechnete Wert im Feld Zeit um eine Stunde höher ist als der Wert im Feld UhrzeitS. Ich verstehe die Differenz nicht. Ich arbeite zur Zeit in einem Test auf der Ninox-Cloud, und ändere für Testzwecke das Systemdatum und Systemuhrzeit meines PCs. Beim Ändern des Systemdatum gibt es keine Probleme.

        Gruss Georg_0815 (und Danke vorab)

            1. Hallo Leo,
              danke
              ich habe Deine Formel entsprechend angepasst und wie folgt eingegeben:
              floor(number(UhrzeitStartArbeit) / 1000 / 60 / 60) + “:” + format(UhrzeitStartArbeit, “mm”)
              und es funktioniert.
              wofür steht floor bzw. wo findet man Erläuterungen zur Funktion?
              Gruß Georg_0815

              1. floor steht für Abrunden. Also die größte reele Zahl die kleiner als gegebene Zahl ist. Die 15,12 wird auf 15 abgerundet, die 15,78 – auch auf 15.
                die Befehle stehen in Sprachreferenz hier:

                http://manual.ninoxdb.de/de/funktion-und-sprache/

                Mathematical Functions

                round(x) – Rounds a number to the nearest integer.
                round(x, digits) – Rounds a number with the given amount of digits.
                E.g. round(1.234, 2) = 1.23

                floor(x) – Rounds a number DOWNWARDS to the nearest integer.

                ceil(x) – Rounds a number UPWARDS to the nearest integer.

                sqrt(x) – The square root of x.

                sqr(x) – The square of x: x2

                sign(x) – The signum of x:

                Grüße
                Leo

                1. Die ursprüngliche Frage bleibt aber doch bestehen?
                  Wieso die Zeitdifferenz zu =now()?
                  Gruß Georg_0815

                2. Nach meinem Verständnis gibt now() die aktuelle Zeit zurück, so wie sie von der Umgebung, in der Ninox läuft, vorgegeben wird. Dies kann das OS oder die Browser-Konfiguration sein.

                  Birger – Ninox Support

              2. Hallo Birger,
                zu Deiner Antwort vom Februar 19, 2018 um 8:58 am:
                Dies würde bedeuten, dass time(now()) unabhängig von der Systemzeit des Rechners auf dem man arbeitet wäre,
                für den Fall dass Ninox auf dem Browser/Cloud läuft (wie es bei mir der Fall ist). Analog sollte date(now()) sich verhalten.
                Dies ist aber nicht der Fall.
                Bei Veränderung der Systemzeit des lokalen Rechners, ändert sich der Wert von time(now()) entsprechend, nur dass die Differenz von 60 Minuten bleibt.

                Gruß Georg_0815

                1. Hallo Georg_0815,
                  die Formatierung braucht immer Datum und Uhrzeit
                  format(date, format)
                  format(datetime, format)
                  format(appointment, format)
                  Wenn man nur die Uhrzeit formatiert, fehlen dem Ninox die Zahlen für eine korrekte Berechnung.
                  Ich schlage for, du erstellst noch ein Feld XX als “Datum und Uhrzeit” und fügst zusätzlich zu deiner Formel XX:=now().
                  Dieses versteckst du (nur anzeigen wenn – false).
                  und dein Berechnungsfeld machst du dann als
                  format(XX,"HH:mm")

                  Grüße
                  Leo

Hinterlasse eine Antwort