0

Datensätze pro Stunde berechnen

Hallo Zusammen, 

ich würde gerne jeden Tag die Datensätze pro Stunde berechnen und in eine Untertabelle eintragen lassen. 
Ich habe mehrere Ansätze, jedoch komme ich leider nicht zu einem praktikablen Endergebnis. 

Zum Hintergrund: 

Ich würde gerne Stoßzeiten berechnen, in denen eben viele Datensätze erstellt werden. 

16 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Patrik, ich verstehe nicht genau, was du machen willst, aber vielleicht hilft dir die Information, dass Ninox automatisch zu jedem Datensatz speichert, wann und von wem er erstellt und zuletzt geändert wurde. Diese Informationen kann man abfragen und auch auswerten. Für den Zeitpunkt der Erstellung mit Datum und Uhrzeit wäre das die Funktion "_cd".

    • AlinaRon
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Copytexter, 

    vielleicht hilft das weiter :) 

    Wir sind ein COVID Testzentrum und würden gerne unser "Stoßzeiten" erkennen können. Dann kann das Personaleinteilung besser geplant werden. 

    Ich habe die Tabelle Testzyklus, wo immer ein Datensatz erstellt wird, wenn ein neuer Test gemacht wird. Versehen wir das ganze mit einem Datum + Uhrzeit Feld.

    In meiner Tabelle Dashboard habe ich nun einen Karteikartenreiter mit einer Untertabelle. In dieser Untertabelle soll pro Tag ein Eintrag möglichst automatisch gemacht werden (ich kann mir vorstellen, per Button geht das gut). Dort sollen die Felder 6-7 Uhr, 7-8 Uhr, 8-9 Uhr, usw. mit den Testungen in dieser Zeit ausgefüllt werden. 

    Das ganze soll dann möglichst noch in einem Diagramm dargestellt werden. 

    Das Problem liegt darin, dass ich nicht genau weis, wie ich auf das Datum und die Uhrzeit einzeln zugreifen kann, da ich ihm ja sagen muss, dass er das gleiche Datum aber die Uhrzeit kleiner 7 aber größer 6 sein muss. Mit der Funktion "datetime" funktioniert das nicht so, wie ich mir das gedacht habe. 

     

    Vielleicht ist es so verständlicher ? 

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Patrik,

    wie Copytexter schon schrieb, jeder Datensatz bekommt von Ninox automatisch bei Erstellung einen Timestam, den du über das Feld '_cd' (Creation Datetime) abfragen kannst...

    Wenn Dir nur die Stunden wichtig sind, kommst du mit 

     

    format('_cd', "HH") oder format('Erstellt am', "HH")

     

    schonmal weiter.  Für Dein gewünschtes Vorgehen lege Dir eine Untertabelle an, darin deine gewünschten Felder '6-7 Uhr',  '7-8 Uhr' ... usw

    Per Button kannst Du mit...

     

    let myID := this;

    let neuerEintrag := (create UNTERTABELLE);

    neuerEintrag.'6-7 Uhr' := cnt(select Testzyklus where format('Erstellt am', "HH") = 6);

    neuerEintrag.'7-8 Uhr' := cnt(select Testzyklus where format('Erstellt am', "HH") = 7);

    neuerEintrag.Dashboard := myID

     

    ... dann einen neuen Eintrag in Deiner Untertabelle machen.

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Patrik,

    mit einem Funktionsfeld kannst du das Ergebnis ala "6-7 Uhr" machen:

    ---

    let myStart := format('Erstellt am', "H");
    let myEnd := number(myStart) + 1;
    myStart + "-" + myEnd+ " Uhr"

    ---

    Wenn du jetzt im Daschboard deine Tabelle selectierst und nach diesem Berechnungsfeld gruppierst, kannst du mit Anzahl auch ein Diagramm erstellen.

     

    Hilft dir das?

     

    Leo

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Oh, bin wieder zu spät.

    @Tobias,

    bei deiner Formel muss man eventuell statt 6 und 7 -> "6" und "7" schreiben weil format() eine string zurückgibt

    Leo

    • AlinaRon
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Moin, 

    vielen Dank erstmal für eure schnellen Antworten. 

    Das hat mir schon einmal eine ganze Menge weitergeholfen. Jedoch zählt Ninox bei der Funktion alle Datensätze, die zwischen beispielsweise 8 und 9 erstellt worden sind. Ich möchte allerdings immer nur, dass jeweils die Datensätze des aktuellen Tages gezählt werden. 

    Möglichst sollte der Eintrag in der Untertabelle nur einmal erstellt werden können. Wenn es also schon einen Eintrag mit dem heutigen Datum gibt, soll dieser einfach aktualisiert werden, sonst ein neuer erstellt werden. 

     

    Viele Grüße 

    Patrik 

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Ich würde im Dashboard einfach eine Ansicht erstellen:

    select DEINETABELLE where date(_cd)=today()

    und dann nach meinenm Berechnungsfeld gruppieren

    • T_Bartzsch
    • vor 3 Jahren
    • Gemeldet - anzeigen

    @ Leo - Ich bin heute früh aus dem Bett gefallen, sorry :) Danke für den Hinweis wegen STRING, ich teste mal wie "kulant" ninox da ist...

    • AlinaRon
    • vor 3 Jahren
    • Gemeldet - anzeigen

    So, ich habe das Problem nun gelöst, es klappt alles so wie es soll.

    Bis auf das Diagramm was Mist anzeigt, mit den Diagrammen komme ich sowieso nicht so gut zurecht :) 

    Für weitere Interessierte hier mein Code hinter dem Button: 

    if last((select 'Stoßzeiten').Datum) = today() then
    'Stoßzeiten'.('5-6 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 5));
    'Stoßzeiten'.('6-7 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 6));
    'Stoßzeiten'.('7-8 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 7));
    'Stoßzeiten'.('8-9 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 8));
    'Stoßzeiten'.('9-10 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 9));
    'Stoßzeiten'.('10-11 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 10));
    'Stoßzeiten'.('11-12 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 11));
    'Stoßzeiten'.('12-13 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 12));
    'Stoßzeiten'.('13-14 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 13));
    'Stoßzeiten'.('14-15 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 14));
    'Stoßzeiten'.('15-16 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 15));
    'Stoßzeiten'.('16-17 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 16));
    'Stoßzeiten'.('17-18 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 17));
    'Stoßzeiten'.('18-19 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 18))
    else
    let myID := this;
    let neuerEintrag := (create 'Stoßzeiten');
    neuerEintrag.('5-6 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 5));
    neuerEintrag.('6-7 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 6));
    neuerEintrag.('7-8 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 7));
    neuerEintrag.('8-9 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 8));
    neuerEintrag.('9-10 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 9));
    neuerEintrag.('10-11 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 10));
    neuerEintrag.('11-12 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 11));
    neuerEintrag.('12-13 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 12));
    neuerEintrag.('13-14 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 13));
    neuerEintrag.('14-15 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 14));
    neuerEintrag.('15-16 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 15));
    neuerEintrag.('16-17 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 16));
    neuerEintrag.('17-18 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 17));
    neuerEintrag.('18-19 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 18));
    neuerEintrag.(Dashboard := myID)
    end

     

    Übersicht Stoßzeiten

    • AlinaRon
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Ah, das Problem mit dem Diagramm ist, dass er bei jedem neuen Datensatz in der Untertabelle in das Diagramm einen Eintrag machen will. 

    Kann ich ihm sagen, dass er mit "this" immer auf den aktuellen Datensatz zugreift und so nur die Daten des aktuell geöffneten Datensatzes im Diagramm angezeigt werden ? 

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

    Hallo Patrik, falls dir das lieber ist, kannst du natürlich auch eine Extra-Tabelle mit den jeweiligen Gesamtzahlen für jeden Tag und jede Stunde führen. Dazu könnte man bspw. eine Tabelle namens 'Statistik' erstellen mit einem Feld 'Datum' sowie jeweils einem numerischen Feld für den Stundenbereich, also '06 -07 Uhr', '07 - 08 Uhr' usw. und dort als "Standardwert" 0 eintragen. Dann in der Tabelle, in der die Impfungen erfasst werden, einen Trigger "Bei neuem Datensatz" erstellen:

     

    let me := this;
    let myDay := first((select Statistik)[Datum = me.date('Erstellt am')]);
    if myDay = null then
       let myDay := (create Statistik);
       myDay.(Datum := me.date('Erstellt am'))
    end;
    let myHour := format(me.'Erstellt am', "HH");
    switch myHour do
       case "06": myDay.('06 - 07 Uhr' := myDay.'06 - 07 Uhr' + 1)
       case "07": myDay.('07 - 08 Uhr' := myDay.'07 - 08 Uhr' + 1)
       case "08": myDay.('08 - 09 Uhr' := myDay.'08 - 09 Uhr' + 1)
       case "09": myDay.('09 - 10 Uhr' := myDay.'09 - 10 Uhr' + 1)
       ... usw.
    end

    • AlinaRon
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Copytexter,

    Genau das leistet mein vorher geschriebener Code auch, das funktioniert alles so wie es soll :)

    Da wäre nur noch das Problem mit dem Diagramm. 

    • Leonid_Semik
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Hallo Patrik,

    für Diagramm würde ich es so versuchen:

    ---

    let me := this;
    select 'Stoßzeiten' where Nr = me.Nr

    ---

    Leo

    • AlinaRon
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Moin Leo, so hat es geklappt, vielen Dank. 

    Ich hatte ja meinen Code hier reinkopiert. Ich Steuer das ganze über einen Button. Nun soll natürlich nicht, wenn ich dreimal am Tag auf den Button drücke, drei verschiedene Datensätze erstellt werden. Der alte soll jeweils überschrieben werden.

    Ich hatte das ganze in eine If-Schleife gebastelt, mit dem Kopf if first((select 'Stoßzeiten').Datum) = today() then  ....

    Leider klappt das so nicht, wo liegt mein Fehler ?  

    • AlinaRon
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Problem gelöst, einfach nur statt "first" "Max" davorsetzten :) 

    • AlinaRon
    • vor 3 Jahren
    • Gemeldet - anzeigen

    Nun funktioniert es doch irgendwie nicht (mehr). 

    Der erste Teil der If-Verzweigung funktioniert nicht, also das aktualisieren eines vorhanden Datensatzes. 

    Vielleicht kann nochmal jemand drüberschauen. 

    if max((select 'Stoßzeiten').Datum) = today() then
    let myIDR := this;
    let myLD := max(select 'Stoßzeiten');
    myLD.('5-6 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 5));
    myLD.('6-7 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 6));
    myLD.('7-8 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 7));
    myLD.('8-9 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 8));
    myLD.('9-10 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 9));
    myLD.('10-11 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 10));
    myLD.('11-12 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 11));
    myLD.('12-13 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 12));
    myLD.('13-14 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 13));
    myLD.('14-15 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 14));
    myLD.('15-16 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 15));
    myLD.('16-17 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 16));
    myLD.('17-18 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 17));
    myLD.('18-19 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 18));
    myLD.(Dashboard := myIDR);
    alert("Stoßzeiten aktualisiert")
    else
    let myID := this;
    let neuerEintrag := (create 'Stoßzeiten');
    neuerEintrag.('5-6 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 5));
    neuerEintrag.('6-7 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 6));
    neuerEintrag.('7-8 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 7));
    neuerEintrag.('8-9 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 8));
    neuerEintrag.('9-10 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 9));
    neuerEintrag.('10-11 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 10));
    neuerEintrag.('11-12 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 11));
    neuerEintrag.('12-13 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 12));
    neuerEintrag.('13-14 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 13));
    neuerEintrag.('14-15 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 14));
    neuerEintrag.('15-16 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 15));
    neuerEintrag.('16-17 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 16));
    neuerEintrag.('17-18 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 17));
    neuerEintrag.('18-19 Uhr' := cnt(select Testzyklus where date('Erstellt am') = today() and format('Erstellt am', "HH") = 18));
    neuerEintrag.(Dashboard := myID)
    end


Content aside

  • vor 3 JahrenZuletzt aktiv
  • 16Antworten
  • 1182Ansichten