0

Letzter Tag im Monat kennzeichnen

Ich habe wieder mal ein Thema, bei dem ich nicht recht weiterkommen. Ich habe eine Tabelle mit einem Datumsfeld (TTMMYYYY) und einem Wert (Value). Nun möchte ich die Werte in einem separaten Feld (Funktionsfeld) kennzeichnen, die im laufenden Monat als letzte erscheinen. Beispiel:

01.01.2020 130

05.01.2020 500  (X)

02.02.2020 100 

28.02.2020 1.000 (X)

Mein Gedankenansatz geht in Richtung max-Funktion. Aber ich habe noch keinen funktionierende Lösung hinbekommen.

5 Antworten

null
    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Eichelfr,

    die Lösung kann so aussehen:

    ---

    let me:=this;

    let myChoice:=select Tabelle [yearmonth(Datum)=yearmonth(me.Datum)];

    if cnt(myChoice[Datum>me.Datum])=0 then "(x)"  else "" end

    ---

    Die Formel ist sehr Rechenintensiv und bei größeren Tabellen kann es zu  Performance-Problemen führen.

    Leo

    • Pro BoutiquenFonds GmbH
    • Eichelfr
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Leo, klappt super - lediglich wenn ich mehrere Einträge für den letzten Tag im Monat habe, bekomme ich mehrere kennzeichnungen. Hier sollte tatsächlich nur der letzte Datensatz markiert werden. Die Berechnung lasse ich in ein Feld schreiben (bei Aktualisierung), da über ein Funktionsfeld die Performance in der Tat zu umfassend ist.

     

    Frank

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Dann sollte es so gehen:

    ---

    let me:=this;

    let myChoice:=select Tabelle [yearmonth(Datum)=yearmonth(me.Datum) and cnt(myChoice[Datum>me.Datum])=0];

    if cnt(myChoice[number(Nr)>me.number(Nr)])=0 then  "(x)"  else "" end

    ---

    Leo

    • Pro BoutiquenFonds GmbH
    • Eichelfr
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Guten Morgen Leo,

    vielen Dank für den angepassten Script-Entwurf. Allerdings gibt es in der Definition myChoice ein Problem, da Du dort gleich wieder die definierte Funktion aufgreiftst. Bei mir führt das zu einem Fehler. Das Script müsste vermutlich auf zwei Zeilen aufgeteilt werden, oder? Frank

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Frank,

    wie peinlich...

    ---

    let me := this;
    let myChoice := (select Tabelle)[yearmonth(Datum) = yearmonth(me.Datum) and Datum >= me.Datum];
    if cnt(myChoice[number(Nr) > me.number(Nr)]) = 0 then
    "(x)"
    else
    ""
    end

    ---