0

Filter nach Intervallabfrage (Jahre)

Servus,

ich habe in der Regel Kunden mit jährlicher Betreuungszeit.

Einige Kunden werden jedoch nur alle 3 oder 5 Jahre regulär betreut. 

Ich möchte im Grunde genommen eine Abfrage durchführen, ob das Startjahr und das Betreuungsintervall mit dem aktuellem Jahr übereinstimmen. Dann möchte ich filtern und so nur die relevanten Kunden anzeigen lassen.

Beispiel:

Kunde A: Startjahr 2022 - Intervall: 1 - jährliche Betreuung

Kunde B: Startjahr 2022 - Intervall: 3 - nächste Betreuung 2025

Betreuung 2024:

Kunde A: 2024 = 2022+1+1 = Ja

Kunde B: 2024 = 2022+3 = Nein

 

Wie kann ich in einer Formel abbilden, dass er das Startjahr durchgehend mit dem Intervall addiert und mit dem aktuellem Betreuungsjahr abgleicht. 

2022+1+1+1+1+1+1+1.....= aktuelles Jahr

2022+3+3+3+3+3+3+3.....= aktuelles Jahr

 

Ich hoffe ich habe mich verständlich ausgedrückt.

 

Vielen Dank vorab und viele Grüße

Christian

15 Antworten

null
    • + Maßanzug statt Massenware +
    • RonaldP
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Moin Christian Schünzel ,

    erstmal für die Struktur der DB würde ich so vorgehen, dass es zur Tabelle KUNDEN eine Untertabelle BETREUUNG gibt.
    Darin würde es für jedes Betreuungsjahr einen Datensatz geben (Ich denke es macht Sinn Informationen des Betreuungstermins hier zu dokumentieren).
    Damit kannst du prüfen, ob von Kunde A der letzte Datensatz BETREUUNG year(Besuchsdatum) + INTERVALL = aktuelles Jahr ergibt.

    Wäre das für dich ein denkbares Szenario?

    VG Ronald

    • A.M.U. Beratung Ingenieurbüro Schünzel
    • Christian_Schunzel
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Roland,

    vielen Dank für die Angtwort.

    Klar ist das ein denkbares Szenario und das würde ich so auch gerne umsetzen. Wenn das erste Intervall jedoch erreicht ist, folgt ja irgendwann das nächste. Also siehe Beispiell, ich möchte ja die Formel nicht jedes Jahr anpassen

    2025 = 2022+3 = ja  / 2028 = 2022+3 = nein 

    2023 = 2022+1 = ja / 2024 = 2022+1 = nein

    Ist es möglich in der Formel, dass Intervall so darzustellen, dass er im Beispiel oben das Intervall dann zweimal addiert?

    VG

    • A.M.U. Beratung Ingenieurbüro Schünzel
    • Christian_Schunzel
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Kleine Ergänzung, ich habe übersehen bzw. mir ist gerade aufgefallen, dass Du es wie folgt vorgeschlagen hast:

    year(Besuchsdatum)

    Das letzte Besuchsdatum ist nicht relevant, nur das Startjahr. Das Intervall der Betreuung bleibt ja immer gleich, ab dem Startjahr, entweder jährlich oder 3-jährlich. Selbst wenn ich auf Anfrage einmal dazwischen einen Besuch abstatten sollte.

      • Tacho
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Christian Schünzel 
      aber dann müßte dennoch in Deinem Beispiel bei 2028 + 3 = Ja herauskommen, da ja auch 2025 schon ja war bei einem Intervall von 3 Jahren. Natürlich darf die Anzeige erst im jeweils aktuellen Jahr erfolgen

      • + Maßanzug statt Massenware +
      • RonaldP
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Christian Schünzel ,

      okay, die Info mit den Besuchen dazwischen war jetzt neu ;-)
      mein Ansatz war bis dahin von den bestehenden Datensätzen BETREUUNG den LETZTEN oder besser max(year(Besuchsdatum)) abzufragen, ob dieser + INTERVALL dem heutigen Jahr entspricht.

          if year(max(BETREUUNG.Besuchsdatum)) + intervall = year(today()) then
              "Dieses Jahr besuchen"
          else
              "Kein Besuch"
          end
      

      Damit Besuche dazwischen berücksichtigt werden können, würde ich ein Ja/Nein-Feld 'Besuch gem. Intervall' dazu nehmen .
      MIt diesem Code im FX-Feld in der Tabelle Kunden bekommst du zusätzlich eine Anzeige, wenn ein Besuch letztes Jahr fällig gewesen wäre aber nicht eingetragen wurde oder nicht stattgefunden hat. (Bei Intervall =1).
      Mit dem Trigger nach Änderung beim Datensatz für Feld Startdatum würde ich einen ersten Datensatz BETREUUNG erzeugen und das Startdatum in diesem in Feld Besuchsdatum schreiben.

      let Besuchcheck := max(Besuche['Besuch gem. Intervall' = true].year(Besuchsdatum)) + intervall;
      if Besuchcheck = year(today()) then
          "Besuch fällig"
      else
          if Besuchcheck < year(today()) then
              "Besuch ÜBERfällig"
          else
              "Kein Besuch"
          end
      end
      

      VG Ronald

      PS: Der Vorschlag von planox. pro ist für deine konkrete Anfoderung eine sehr geschmeidige Lösung 😉, meine beinhaltet mehr Dokumentation.

      • Ninox-Professional
      • planoxpro
      • vor 2 Jahren
      • Gemeldet - anzeigen

      DIGITOOL Wenn ich mir deinen Code so ansehe, dann bin ich mir nicht mehr sicher, ob ich die Aufgabenstellung richtig verstanden habe. Ich war einfach davon ausgegangen, dass anhand des Startjahres und des Intervalls ermittelt werden soll, ob in diesem, also jeweils aktuellen Jahr ein Besuch ansteht oder nicht. Und das lässt sich halt mathematisch per Modulo lösen. Die genannte Formel funktioniert auch in 50 Jahren noch. Falls jedoch weitere Parameter wie bereits durchgeführte Besuche berücksichtigt werden sollen, dann genügt die Formel allein natürlich nicht.

      • + Maßanzug statt Massenware +
      • RonaldP
      • vor 2 Jahren
      • Gemeldet - anzeigen

      planox. pro Mir gefällt dein Ansatz sehr, um die Ausgangsfragestellung zu lösen!

      Christian Schünzel said:
      eine Abfrage durchführen, ob das Startjahr und das Betreuungsintervall mit dem aktuellem Jahr übereinstimmen

      Ich habe mich nur einer Aufgabenstellung erinnert, in der ich ähnliches umgesetzt habe aber auf Basis von Datensätzen einer Untertabelle. Deshalb hatte ich diesen Ansatz hier beschrieben.

      Lassen wir uns überraschen, was Christian dazu sagt 🙂

    • A.M.U. Beratung Ingenieurbüro Schünzel
    • Christian_Schunzel
    • vor 2 Jahren
    • Gemeldet - anzeigen

    aber es wird ja nur einmal das Intervall addiert. Wenn ein Kunde nun betreut wurde (Startjahr 2022) und nach drei Jahren wieder betreut wird (2025), dann funktioniert die Formel.

    In 2028 ergibt Startjahr + Intervall 3 = 2025 und nicht 2028, es kommt also als Ergebnis ein Nein, da die Formel korrekte Formel lautet: Startjahr + 3 +3 = 2028 = Ja

    Ein bestehender Kunde wird beispielsweise mit Nein markiert, weil dieser bereits seit 2020 besteht und bei der Formel 2020+1 = 2021 herauskommt.

    Habe die Formel wie folgt geschrieben.

    if number(year(Startdatum)) + number('Turnus') = number(Jahr) or number(year(Startdatum)) = number(Jahr) then
        text("ja")
    else
        text("nein")
    end

    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo, man könnte einfach schauen, ob die Differenz zwischen aktuellem und Startjahr ohne Rest durch den Intervall teilbar ist. Wenn Ja, dann ist das aktuelle Jahr ein Betreuungsjahr, wenn nicht, dann nicht.

    if (year(today()) - Startjahr) % Intervall = 0 then true else false end
    
    • A.M.U. Beratung Ingenieurbüro Schünzel
    • Christian_Schunzel
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Servus,

    vielen Dank für eure Unterstützung.

    Die Lösung von planox.  ist klasse und so simpel, funktioniert wunderbar. Darauf wer ich nicht gekommen. Nur kurz zur Erklärung warum steht vor Intervall ein % Zeichen.

    DIGITOOL

    Die Besuche zwischendurch sollen nicht berücksichtigt werden. die Betreuungsjahre sind fix und ändern sich nicht, auch wenn auf Wunsch des Kunden mal ein Besuch zwischen einem Intervall durchgeführt wurde. Eventuell habe ich mich hier unglücklich ausgedrückt.

    Vielen Dank noch einmal.

    VG 

    Christian

      • Ninox-Professional
      • planoxpro
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Christian Schünzel 

      Hallo Christian, das Prozent-Zeichen steht für die mathematische Funktion "Modulo" und gibt, vereinfacht ausgedrückt, den Rest einer ganzzahligen Division zurück. Beispiele:

       

      9 % 2 = 1 (die 2 passt 4 mal in die 9, als Rest bleibt 1)

      15 % 4 = 3 (4 * 3 = 12, Rest 3)

      • A.M.U. Beratung Ingenieurbüro Schünzel
      • Christian_Schunzel
      • vor 2 Jahren
      • Gemeldet - anzeigen

      planox. pro 

      Alles klar, vielen Dank für die Erklärung, dass verstehe ich.

      Ich habe noch eine kurze Frage. Ich habe ein Auswahlfeld erstellt, Umsatzjahr 2020,2021, 2022, 2023..... und wollte dieses anstatt dem aktuellen Jahr verwenden. Gibt es einen Grund warum das nicht klappt. Das Jahr als Nummer für sich wird berechnet, genau so wie beim Startdatum, in der Formel geht es aber nicht auf mit Modulo. Es kommt immer Ja als Ergebnis. Von der mathematischen Logik her, müsste dies doch auch in dieser Form funktionieren.

       

      if number(text(UmsatzJahr)) - number(year(Startdatum)) % 'Turnus €' then    "Ja" else  "Nein" end

       

      Danke und viele Grüße

      Christian

      • + Maßanzug statt Massenware +
      • RonaldP
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Christian Schünzel 

      wenn ich das richtig sehe, fehlt noch eine Klammer um die Subtraktion:

      if (number(text(UmsatzJahr)) - number(year(Startdatum))) % 'Turnus €' then    "Ja" else  "Nein" end
      

      VG Ronald

      • Ninox-Professional
      • planoxpro
      • vor 2 Jahren
      • Gemeldet - anzeigen

      DIGITOOL Yep, Punktrechnung geht vor Strichrechnung. ;)

      • A.M.U. Beratung Ingenieurbüro Schünzel
      • Christian_Schunzel
      • vor 2 Jahren
      • Gemeldet - anzeigen

      planox. pro 

      Vielen Dank für den Hinweis