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

 

 

 

 

85 Gedanken zu „Formeln erstellen

  1. Hallo,
    ich habe zwei Tabellen “Teilnehmer” und “Budgetplanung”.
    In Teilnehmer habe ich eine Auswahl “Status StD” mit positiv, offen und Absage.
    Nun möchte ich in der Budgetplanung die geplante Teilnehmerzahl berechnen, also nur wenn “StatusStD” positiv ist.

    Habe es mit
    sum(Teilnehmer[StatusStD=3].Personen) versucht (3 ist positiv), aber es klappt nicht, irgendwie ist meine Verknüpfung glaub falsch…. kann mir bitte jemand weiterhelfen?

  2. Hallo zusammen,
    ich versuche gerade ein Funktion Sheet zu erstellen mit diversen Informationen. Gerne würde ich via Auswahl Feld “Vorspeise” Informationen aus einer Untertabelle abfragen und daraus direkt umnächsten Feld “Equipment” und ein weiteres Feld “Zutaten” generieren.

    Beispiel:
    Wenn beim Feld Vorspeise “Brotkorb” ausgewählt wurde, kommt automatisch im Feld Equipment “Brotkorb, Brotmesser, Brotschneidebrett” und im Feld Zutaten “diverse Baguettes”

    Die Daten dafür sind in einer Untertabelle bereits alle hinterlegt. Spalte 1=Produkt, Spalte 2 = Equipment,Spalte 3 = Zutaten

    Hab die ganze Nacht dran gesessen und verzweifelt gerade ein wenig :(

    Danke :)

  3. Hallo,
    Ich bin gerade dabei eine bestehende Buchhaltung aus Access nach Ninox zu übersiedeln. Dafür brauche ich ein paar komplexere Formeln, wo ich alleine anstehe.

    zB wo und wie kann ich eine Kontrolle einbauen, dass die Teilbeträge einer Rechnung in Summe ident sind mit der Rechnungssumme?

    Ich habe mir die Beispiel Datenbank “Rechnungen” angesehen, aber da funktioniert es halt in die umgekehrte Richtung. (Summe ist Resultat der Einzelbeträge)

    Könnte das funktionieren:
    Transaktionen.TrSoll = sum (TransaktionenDetails.TrRDSoll)?
    wenn ja, wohin damit?

    In Access hat die Eingabe von einem TransaktionsDetail das kleiner als der Rechnungsbetrag ist, den Restbetrag in die nächste Zeile (zweites Transaktions Detail) geschrieben. Bzw es gab eine Warnung wenn die Summe der Teilbeträge nicht mit dem Rechnungsbetrag übereinstimmte. Die erste Option ist vielleicht Luxus, aber ich würde zumindest gerne die zweite Option umsetzen.

    Nur wie geht das? Wäre dankbar für eure Hilfe.

      1. Danke!
        Ich habe eine vorläufige Lösung gefunden, indem ich ein Kontrollfeld eingerichtet habe, das aber nur aufscheint, wenn die Summe der Unterpositionen nicht identisch ist mit der Rechnungssumme.

  4. Hallo und einen schönen guten Morgen,

    1. Habe eine Datenbank zur Verbrauchserfassung verschiedener Energiezähler erstellt. Nun möchte ich die den Verbrauch aus den Daten errechnen, der zwischen den Erfassungszeiträumen entstanden ist.

    Tabelle hat folgende Spalten:

    Zählernummer — Datum — Zählerstand

    2. eine weitere Datenbank ist ein einfaches Kassenbuch. Hier möchte ich in der Tabelle erreichen das der kummalierte Wert des Kassenbestandes in einer Spalte berechnet wird.

    Tabelle hat folgende Spalten:

    Datum — BelegNr — Buchtext — Soll — Haben –

    Ich bedanke mich für eventuelle Lösungsvorschläge.

    1. Hallo Alexanderpro,
      Ich würde die Zähler in eine extra Tabelle eintragen und mit der Tabelle Abrechnung verknüpfen. Hier die Beispieldatenbank

      https://www.dropbox.com/s/w00ue8poyyaub0l/Z%C3%A4hler.ninox?dl=0

      So kannst du entweder alles in einer Tabelle sehen oder jeder Zähler einzeln aufrufen. Tabellennamen kannst du natürlich ändern. Die Formeln bei den Funktionsfeldern “Verbrauch Abrechnungsperiode” und “Verbrauch kumuliert” versteckt.
      Vielleicht kannst du auch die Kumulierung der Summen für das Kassenbuch von dort ableiten

      Grüße
      Leo

      1. Hallo Leo,

        Vielen Dank für deine schnelle Hilfe. Hat in der Verbrauchsabrechnungdatenbank genau so funktioniert wie ich mir das vorgestellt habe. Beim Kassenbuch, habe ich meine Mühe gehabt, da ich mich nicht besonders gut auskenne mit den Anweisungen und Formeln.

        Da habe ich folgende Spalten:
        Nr __ (BNr) __ Datum __ Name __ Bezeichnung __ Einnahme __ Ausgabe

        Die Formel habe ich insoweit ableiden können, das ich je Spalte die Summen habe und entsprechend den kumulierten Wert. Wenn aber gleiche Datumsdaten vorhanden sind, summiert es alle Zeilen mit gleichem Datum. Habe versucht eine neue Spalte hinzuzufügen um hier noch eine fortlaufende Nummer zu vergeben. (BNr)

        Frage 1. Tabelle ist schon mit Daten gefüllt. Mit welcher Anweisungen kann ich das Feld (BNr) über die Massendatenänderung im Nachhinein ändern.
        Frage 2 wie muss die Formel dann aussehen.

        let ZZ := Name;
        let DD := Datum;
        let YY := ‘BNr.’;
        sum((select Buchung)[(Verlauf = ZZ and 'BNr.' <= YY)].Zugang)

        So ist es glaube ich falsch bzw. es hat nicht den Erfolg den ich gerne hätte. Wie schon erwähnt, bin ich nicht so bewandert mit den Anweisungen.

        Ich bedanke mich nochmals recht herzlich für eure Hilfe

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

  6. 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?

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

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