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 +.

 

 

 

 

75 Gedanken zu „Formeln erstellen

  1. Wie kann ich eine Berechnung durchführen, welche zwei verschiedene Datensätze inderselben Tabelle verwendet um das folgende zu Erreichen:

    Die Werte sind als kumulierende Werte pro Datum gespeichert (z.B. Betriebsstundenzähler):
    01.01. 100
    02.01. 110
    04.01. 125
    07.01. 130

    Jetzt möchte ich in einer Zusatzspalte die folgenden Werte berechnen (“Betriebsstunden seit dem letzten Eintrag”):
    01.01. 0
    02.01. 10 (:= 110 – 100)
    04.01. 15 (:= 125 – 110)
    07.01. 5 (:=130 – 125)

    Ich habe in der Funktionsreferenz noch keine passende Funktion gefunden.

    Und dann möchte ich eine Grafik erstellen, welche die Summe pro Woche/Monat/Quartal/Jahr darstellt (siehe auch meine Frage im Kapitel Diagramme).

    1. Hallo,
      die Formel sollte so funktionieren:
      –––
      let myID := _id;
      let 'letzter Zählerstand' := last(select 'Tabellenname'[_id < myID].'Betriebsstundenzähler')
      'Betriebsstundenzähler' - 'letzter Zählerstand'
      –––
      Die Feld- und Tabellenname müssen natürlich ggf. angepasst werden.

      Gruß
      Birger – Ninox Support

  2. Hallo,

    eine kurze Frage zur Vorgehensweise. Habe wie eine Untertabelle in der ich Projektmodule verwalte, da jedes Gesamtprojekt eben aus diesen Modulen besteht. Diese Untertabelle hat das Auswahlfeld Module, Modulstarttermin, Modulenttermin Umsatz und Status (offen, abgeschlossen und erwartet). Ich würde nun gerne nicht nur effektiv gebuchte Module(offen und abgeschlossen) mit den zuvor genannten Feldern auswerten sondern auch erwartete Module eintragen um diese auszuwerten. Habe deshalb zwei neue Felder hinzugefügt die ich nur befülle wenn der Status “erwartet” ist. Diese Felder habe ich Umsetzungsmonat und Erwarteter Umsatz genannt. Klappt auch soweit. In der Haupttabelle zeigt es im Feld Erwarteter Umsatz die Summe an und somit sehe ich mit welchem Umsatz zu rechnen ist.

    Nun würde ich gerne das Feld Umsetzungszeitraum (Datumsfeld) dazu nutzen dass ich den Datumswert in einem Diagramm auswerte um zu sehen in welchen Monaten mit welchem geplanten Umsatz zu rechnen ist. Zum einen habe ich das Problem, dass in diesem Datumsfeld ein Datum mit Tag,Monat und Jahr einzutragen ist und ich in diesem Feld eigentlich, weil nur für die Planung, Monat und Jahr sinnvoll wäre.

    Also Status erwartet Umsetzungmonat beispielsweise 04/2017 und erwarteter Umsatz XXX €.

    Wie stelle ich im Datumsfeld ein dass nur Monat und Jahr einzutragen ist und wie gehe ich am besten vor, wenn ich ein Diagramm haben möchte wo die Monate mit den entsprechenden erwarteten Umsätzen angezeigt werden sollen.

    Ist mein Ansatz grundsätzlich OK oder sollte ich anders vorgehen?

  3. Hänge fest:
    Habe in meiner Haupttabelle ein Formelfeld Projektdauer das aus zwei Datumsfeldern Projektstart und Projektende den Zeitraum errechnet welchen Zeitraum das Projekt hatte.

    Nun möchte ich über alle Projekte die Durchschnittliche Projektdauer berechnen.
    In diesem Formelfeld habe ich folgende Formel verwendet.

    avg((select Projekte).Projektdauer)

    Rechnet auch richtig aber zeigt neben den Tagen auch folgendes an:

    102 Tage 13:05:27.272

    Nun stimmen die Tage aber der Rest?

    Habe mit dem Support auch schon geschrieben und folgende Formel bekommen die aber nicht funktioniert.

    days(avg (select projekte.projektstart), avg (select projekte.projektende))

    auch folgende funkt nicht

    days(avg (select projekte.projektdauer))

    Die Berechnung 102 Tage stimmt wie gesagt. Bin ratlos. Soll doch nur aus einem Feld in dem eine Anzahl Tage stehen die Durchschnittszahl aller Tage berechnen?

    1. Habe auch folgende Formel probiert

      sum((select Projekte).Projektdauer) / ‘Anzahl Projekte’

      Rechnet auch richtig mit 102 Tagen aber zeigt leider auch noch

      102 Tage 13:05:27.272
      an.

      wie kriege ich die 13:05:27.272 weg?

    2. Hallo niki1570,
      Versuch mal damit

      avg((select Projekte).days(Start, Ende))

      Grundsätzlich ist es aber so, dass hier auch nicht immer volle Tage angezeigt werden (Mittelwert zwischen 2 und 3 ist 2,5)

      Wenn du Reststunden ignorieren möchtest, solltest du das Ergebnis Abrunden
      z.B.

      floor(avg((select Projekte).days(Start, Ende)))

      Leo

      1. WOW Danke grade ausprobiert. Klappt einwandfrei! Gutes Nächtle!
        Noch eine kurze Frage. Warum klappt es nicht wenn ich das Berechnungsfeld Dauer pro Projekt als Basis nehme und den Durchschnittswert nehme.
        Wo liegt da mein Denkfehler. Wär doch einfacher oder?

        1. Ninox berechnet schon richtig. Dein ergebnis beträgt 102 Tage, 13 Stunden, 5 Minuten, 27 Sekunden und 272 Millisekunden. Du möchtest nur die Tage sehen, gibst aber dem Ninox kein Befehl dazu. Leider gibt es keine solche Funktion bei Ninox. Wir müssen das Datumswert zuerst in normale Dezimalzahl umwandeln und dann abrunden.
          Wenn du das Feld Projektdauer verwenden möchtest, die Formel dazu wäre:
          floor(number(avg((select Projekte).Projektdauer)) / 86400000)

          Leo

  4. Hallo,

    ich hänge bei folgender Fragestellung. Habe eine Haupttabelle für Projekte und eine Untertabelle für die einzelnen Module aus denen ein Projekt besteht. In der Untertabelle habe ich folgende Felder: Modul(Auswahlfeld) Beginndatum, Enddatum, Modulumsatz und ein Auswahlfeld Status mit den Möglichkeiten Offen und Abgeschlossen.

    Nun würde ich gerne im Formular der Haupttabelle ein Feld anzeigen lassen, in dem mir die Summe Umsatz Module angezeigt wird, die den Status Offen haben.
    Würde mir sehr helfen wenn jemand hierfür eine Formel hätte.

    1. Hallo niki1570,
      die Formel hängt davon ab, wie du deine Untertabelle in der Beziehung zu der Haupttabelle genannt hast. Angenommen, die Tabelle heißt “Module” und der Auswahl “Offen” in dem Feld “Status” hat ID=1 (steht rechts neben dem Offen im Fenster “Eigenschaften”.
      Dann wäre die Formel:

      sum(Module[Status=1].Modulumsatz)

      Die Eckklammer ersetzen die “where” Funktion bei verknüpften Tabellen.

      Grüße
      Leo

      1. Funktioniert leider nicht.

        das hab ich eingegeben: sum(Teilprojekt [Status=1].Umsatz)

        Untertabelle heisst: Teilprojekt
        Feld für den Umsatz in dieser Tabelle heisst Umsatz
        Statusauswahlfeld heisst Status mit Offen=1 und Geschlossen=2

          1. hmmm. Dann heißt deine Untertabelle in der Datenbank auch “Teilprojekt”.
            Früher waren die Eckklammer nur für Untertabellen und ohne select einzusetzen. Anscheint haben sich die Regeln geändert.
            Hauptsache es funktioniert.
            Ich habe dier eine Beispieldatenbank geschickt, dort geht es ohne select.

            Leo

Hinterlasse eine Antwort