0

Summe

Hallo Leute

Wie muss der Befehl geschrieben werden, wenn ich eine Summe von März bis Februar des nächsten Jahres erhalten möchte.

Danke für die Hilfe

8 Antworten

null
    • rainless
    • vor 2 Jahren
    • Gemeldet - anzeigen
    let tdy := year(date(today()));
    sum ((select Tabelle where Datum >= date(tdy, 3, 1) and Datum < date(tdy+1, 2, 29)).ZahlzumSummieren)
    

    Hallo Rudolf,

    so müsste es gehen. Annahme, dass es in Deiner Tabelle ein Feld "Datum" und ein Feld "ZahlzumSummieren" gibt

    • Rudolf_Schabl
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Herzlichen Dank Lars

    es funktioniert 

    • Rudolf_Schabl
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Lars

    Ich habe mich zu früh gefreut, da bei der Berechnung das Jahr nicht berücksichtigt wird. Möglicherweise habe ich es schlecht erklärt.  Daher nochmals

    Die Aufzeichnungen sind über mehrere Jahre und es soll zB. von März 2019  beginnen, im April 2020 soll die Summe von März bis April aufscheinen und so weiter ........bis Februar 2020. Ab März 2020 soll wieder begonnen werden bis Februar 2021 und so weiter.

    Kannst du dir es bitte nochmals ansehen

    • Rudolf_Schabl
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Es soll April 2019 sein und nicht 2020

    • rainless
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Rudolf,

    wenn ich es recht verstehe, möchtest Du also eine fortlaufende Aufsummierung

    • April 2019 - März 2020
    • Mai 2019 - April 2020
    • Juni 2019 - Mai 2020
    • usw.

    Da wäre noch wichtig zu wissen, in welcher Form Du das möchtest. Soll das in ein Array, in einen String (kommasepariert), oder möchtest du das in Records in einer Tabelle.

    Grundsätzlich lässt sich das aber in einer Schleife machen. Hier jetzt mal ein Beispiel, das einen kommaseparierten String ausgibt (über das if in der Schleife bin ich noch nicht glücklich, aber mir fällt gerade nichts anderes ein ... die 'div'-Funktion habe ich noch nicht gefunden).

    let sumString := "";
    let summe := 0;
    for y in range(2019, year(date(today()))) do
        for m in range(1, 13) do
            let maxmonthday := item([0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], m);
            if m = 1 then
                summe := sum ((select Tabelle where Datum >= date(y, m, 1) and Datum < date(y, 12, maxmonthday)).ZahlzumSummieren)
            else
                summe := sum ((select Tabelle where Datum >= date(y, m, 1) and Datum < date(y+1, m-1, maxmonthday)).ZahlzumSummieren)
            end;
            sumString := concat(sumString, string(m) + "." + string(y) + ":" + summe);
        end;
    end;
    sumString
    

    Den String kannst du ja z. B. mit split in ein Array aufteilen

    • Rudolf_Schabl
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Lars

    Ich denke ich muss es anders erklären. Ein normales Geschäftsjahr beginnt am 01.01.xy und endet am 31.12.xy. Um diese Summe zu berechnen verwende ich folgende Formel:

    let me := this;
    sum((select Tabelle where month(Datum) <= me.month(Datum) and year(Datum) = me.year(Datum)).zu berechnende Zelle)

    Nun habe ich aber das Problem, dass das Geschäftsjahr am 01.03.xy beginnt und am letzten Februar des darauffolgenden  Jahr endet. 

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

      Rudolf Schabl 

      Vorschlag:

      let myJ := if month(Datum) > 2 then year(Datum) else year(Datum) - 1 end;
      let vonDat := date(myJ, 3, 1);
      let bisDat := date(myJ + 1, 3, 0);
      sum((select TABELLE)[Datum >= vonDat and Datum <= bisDat].ZAHLENFELD)
      

      Wenn man das so als Berechnungsfeld in TABELLE einfügt, würde das allerdings für jeden einzelnen Datensatz neu berechnet, was bei größeren Datenmengen zu Performanceproblemen führen könnte.

    • Rudolf_Schabl
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Danke für deine Bemühung

    Jetzt funktioniert es wie ich es gedacht habe.

    Ich wünsche dir ein schönes Wochenende

Content aside

  • vor 2 JahrenZuletzt aktiv
  • 8Antworten
  • 107Ansichten
  • 3 Folge bereits