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
-
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
-
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? LGlet 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 -
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.
-
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
-
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 -
Hrmpf,
DAS hätte mir in der Tat auch auffallen können, sorry...
lg, Torsten
Content aside
- vor 4 JahrenZuletzt aktiv
- 6Antworten
- 763Ansichten