0

Zählen von Anwesenheiten in einem festgelegten Datums-Zeitraum

Hallo Zusammen,
ich möchte gerne berechnen, wie oft Teilnehmer an einem Training innerhalb der aktuellen Saison teilgenommen haben. Dafür erfasse ich die Anwesenheiten in einer seperaten Tabelle, die mit der aktuellen Tabelle verknüpft ist. Eine Feldsaison startet am 01.04. und endet am 31.10. eines Jahres, eine Hallensaison startet am 01.11. und endet am 31.03. des folgejahres.
Es muss also überprüft werden, in welcher Saison ich gerade bin und ggf. muss ein Jahr zurückgegangen werden. Leider wirft mein Berechnungsfeld aber kein Ergbenis aus. Was mache ich falsch?

let me := this;
let mySeason := if month(today()) > 3 and month(today()) < 11 then
1
else
if month(today()) < 4 then
3
else
if month(today()) > 10 then 2 end
end
end;
let myDate := if mySeason = 1 then
cnt(Anwesenheit[Anwesend = 1] and Anwesenheit[Veranstaltung.Termin > date(1, 1, year(today()))] and Anwesenheit[Veranstaltung.Termin < date(1, 11, year(today()))])
else
if mySeason = 2 then
cnt(Anwesenheit[Anwesend = 1] and Anwesenheit[Veranstaltung.date(Termin) >= date(1, 10, year(today()))])
else
if mySeason = 3 then
cnt(Anwesenheit[Anwesend = 1] and Anwesenheit[Veranstaltung.date(Termin) < date(1, 4, year(today())) and Veranstaltung.date(Termin) >= date(1, 10, year(today()) - 1)])
end
end
end;
myDate

6 Antworten

null
    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Stephan,

     

    die Selektionskriterien sollten alle in eine eckige Klammer. Mach mal beispielhaft aus Deinem

     

    cnt(Anwesenheit[Anwesend = 1] and Anwesenheit[Veranstaltung.Termin > date(1, 1, year(today()))] and Anwesenheit[Veranstaltung.Termin < date(1, 11, year(today()))])

     

    ein

     

    cnt(Anwesenheit[Anwesend = 1 and Veranstaltung.Termin > date(1, 1, year(today())) and Veranstaltung.Termin < date(1, 11, year(today()))])

     

    und bei den anderen analog...

    lg, Torsten

    • Stephan_Haumann
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Torsten,
    hatte ich auch schon mal versucht. Das ergäbe folgende Formel, die aber auch in alle Fällen leider das falsche Ergbenis "0" ausspuckt. Hast Du sonst noch Ideen? LG

    let me := this;
    let mySeason := if month(today()) > 3 and month(today()) < 11 then
    1
    else
    if month(today()) < 4 then
    3
    else
    if month(today()) > 10 then 2 end
    end
    end;
    let myDate := if mySeason = 1 then
    cnt(Anwesenheit[Anwesend = 1 and Veranstaltung.Termin > date(1, 1, year(today())) and Veranstaltung.Termin < date(1, 11, year(today()))])
    else
    if mySeason = 2 then
    cnt(Anwesenheit[Anwesend = 1 and Veranstaltung.date(Termin) >= date(1, 10, year(today()))])
    else
    if mySeason = 3 then
    cnt(Anwesenheit[Anwesend = 1 and Veranstaltung.date(Termin) < date(1, 4, year(today())) and Veranstaltung.date(Termin) >= date(1, 10, year(today()) - 1)])
    end
    end
    end;
    myDate

    • Stephan_Haumann
    • vor 4 Jahren
    • Gemeldet - anzeigen

    ich habe es auch schon mit diversen Umformatierungen versucht, z.B. auch

    Veranstaltung.date(Termin) > date(1, 1, year(today()))

    oder auch

    let myDate := Anwesenheit[Anwesend = 1 and Veranstaltung.Termin > date(1, 1, year(today())) and Veranstaltung.Termin < date(1, 11, year(today()))]
    cnt(myDate)

    Führt aber leider auch alles zum falschen Ergebnis.

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Stephan,

     

    selbst wenn mir Datenmodell und -struktur bekannt wären, würde ich wohl schrittweise debuggen - d.h. die Funktion nach und nach um Kriterien erweitern. Ansonsten ist es aus der Ferne schwer, herauszufinden, wo der Hund begraben liegt.

     

    Also erst mal mit cnt(Anwesenheit) alles zählen, dann mit cnt(Anwesenheit [Anwesend=1]) weiter, dann erst mit einem zeitlichen Filter, dann den zweiten - und ganz zum Schluß die mySeason-Funktionalität drumherum.

     

    Das schöne an Ninox ist ja, dass man recht einfach "eben mal schnell" ein Feld erstellen und nach Gebrauch wieder entfernen kann, also gar nicht zwingend an produktiven Daten arbeiten muss...

     

    lg, Torsten

    • Stephan_Haumann
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Torsten,
    genau so habe ich es gemacht und siehe da: Fehler gefunden! Etwas peinlich, aber natürlich ist das format date(jahr,monat,tag) und nicht fälschlicherweise wie oben date(tag,monat,jahr)...

    Danke Dir auf jeden Fall.

    Hier noch mal die richtige Formel zum nachschlagen...

    let me := this;
    let mylastyear := year(today()) - 1;
    let mySeason := if month(today()) > 3 and month(today()) < 11 then
    1
    else
    if month(today()) < 4 then
    3
    else
    if month(today()) > 10 then 2 end
    end
    end;
    let myDate := if mySeason = 1 then
    cnt(Anwesenheit[Anwesend = true and Veranstaltung.Termin >= date(year(today()), 4, 1) and Veranstaltung.Termin < date(year(today()), 11, 1)])
    else
    if mySeason = 2 then
    cnt(Anwesenheit[Anwesend = true and Veranstaltung.Termin >= date(year(today()), 10, 1)])
    else
    if mySeason = 3 then
    cnt(Anwesenheit[Anwesend = true and Veranstaltung.Termin < date(year(today()), 4, 1) and Veranstaltung.Termin >= date(mylastyear, 10, 1)])
    end
    end
    end;
    myDate

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hrmpf,

     

    DAS hätte mir in der Tat auch auffallen können, sorry...

     

    lg, Torsten