Berechnung der Summe einer Spalte
Ich komme mit dem Befehl sum() nicht klar.
Ich bin dabei eine Lagerbewertung zu erstellen. Der Lagerwert ergibt sich als BESTAND * EINKAUFSPREIS, das ergibt ein Feld im Artikelstamm, genannt LAGERWERTERMITTLUNG ARTIKEL. In der Tabellenansicht kann ich mir die Summe über alle Artikel anzeigen lassen, soweit auch alles klar.
Nun wollte ich die Summe über eine Funktion ermitteln lassen und habe es mit sum(LAGERWERTERMITTLUNG ARTIKEL) versucht, das ergibt aber keine Summe, sondern immer nur den Lagerwert des Artikels, auf dem ich gerade stehe.
Auch eine Berechnung über eine Verknüpfung in einer anderen Tabelle (da wo ich die Auswertung machen will), ergab keinen Wert, hier kam immer Null raus.
Kann mir jemand helfen und sagen, wie die Syntax lautet, wenn ich die Summe einer Spalte berechnen will?
41 Antworten
-
So müsste es gehen:
sum((select TABELLE).DATENFELD)
-
Vielen Dank!!! So hat es funktioniert :)
-
Vielen Dank!!! So hat es funktioniert :)
-
in einer verknüpften Tabelle hätte man auch ohne select arbeiten können:
sum(Tabelle.Datenfeld) -
Hat auch mir geholten - danke.
Anschlussfrage: ich möchte jeweils in einer Zelle das Total einer Spalte bis hierhin. Also nicht die Summe der ganzen Spalte, sondern nur jeweils bis zum aktuellen Eintrag. Gibt es dazu eine einfache Lösung ?
Schon mal im Voraus bestend Dank
-
Hallo Peter,
---
let myNUM:=number(Nr);
sum(select Tabelle where number(Nr)<=myNUM.Datenfeld)
---
Leo
-
hmmmm..... da blick' ich nicht ganz durch.
Ich habe eine Tabelle "Auto" mit den Spalten "Benzin Liter" und "Benzin total". Wenn ich also heute tanke, soll die eingegebene Anzahl Liter bei "Benzin total" hinzuaddiert werden. Mit meiner bisherigen Formel sum((select 'Auto').'Benzin Liter') wird auf jeder Zeile der gleiche Betrag angezeigt. Hinzu kommt, dass die von Ninox vergebenen Zeilen-Nummern nicht fortlaufend sind, weil ich zwischendurch mal einen Eintrag lösche.
Gruss, Peter
-
Hallo Peter,
Versuch mal so für 'Benzin Total':
---
let myDate:=Tankdatum;
sum (select Auto [Datum<=myDate].'Benzin Liter')
---
Leo
-
Hi Leo
Mit kleiner Änderung auf Datum in beiden Zeilen hat's geklappt. Vielen Dank
Nun wollte ich auf diese Weise das danebenliegende Feld "Benzin Totalbetrag" ebenfalls als Summe von "Benzin Betrag" ermitteln. Natürlich änderte ich die Veriable myDate auf myAmount ab. Das resultiert mit einer Fehlermeldung "RangeError: Maximum call stack size exceeded".
Was mach' ich denn jetzt wieder falsch.
Gruss, Peter
-
Wie sieht die Formel aus? myDate hat mit Beträgen erstmal nichts zu tun, nur mit Datum. Theoretisch sollte es so gehen für "Benzin Totalbetrag":
let myDate:=Tankdatum;
sum (select Auto [Tankdatum<=myDate].'Benzin Betrag')
Leo
-
Vielen Dank, Leo
Damit konnte ich meine Fahrzeug-Buchhaltungen fertigstellen - sie laufen jetzt so, wie ich mir das vorgestellt hatte. Ich find's halt schade, dass Ninox keine Importfunktion für Filemaker-Dateien kennt. Immerhin ist Ninox wohl DER Ersatz für Filemaker.... Ich habe bei den Ninoxern mal einen entsprechenden Wunsch geäussert. Der Umweg über Excel und .CSV ist halt nicht optimal, weil sämtliche Formeln verloren gehen. Aber vielleicht ist das ja gar nicht machbar - schau'n wir mal.
Schöne Zeit noch.... Gruss, Peter
-
Weiss jemand, was es mit der Fehlermeldung "RangeError: Maximum call stack size exceeded" auf sich hat ?
Die kommt bei mir ziemlich häufig, und danach ist die Formel weg.
-
bei der Fehlermeldung ruft sich die Funktion selbst wieder auf (oder üner Umwegen)... und irgendwann ist dann halt Schluß
z.B. zwei Berechnungsfelder "Berechnung 1" und "Berechnung 2". In der ersten steht als Funktion sum("Berechnung 2") und in der zweiten steht Sum("Berechnung 1")... die beiden Funktionen rufen sich dann ständig gegenseitig auf...
-
Danke Bernd
Ich wollte bei der Eingabe eines Datensatzes eine Zahl aus dem letzten Datensatz verwenden und probierte es analog zu vorherigen Antworten so:
let myDate := Tankdatum;
'Kilometer alt' =((select 'Auto')[Tankdatum <= myDate].'Kilometer aktuell')Im nächsten Feld steht dann: Distanz = 'Kilometer aktuell' - 'Kilometer alt'.
Kilometer alt soll also bei der Dateneingabe automatisch eingesetzt werden, sodass ich nur noch die aktuellen Kilometer eingeben muss.
-
select gibt eine Tabelle zurück, Du mußt aber auf den letzten Datensatz zurück greifen mit:
last
last gibt dir den letzten Datensatz zurück, mit first den ersten Datensatz
ich würde das aus der Ferne so machen: 'Kilometer alt' := last(select 'Auto' where 'Tankdatum' <= myDate).'Kilometer aktuell')
-
fehler: last((select... zwei klammern
-
Tja - das bringt zwar einen Eintrag in der gewünschten Zelle, der lautet aber auf "Nein" statt einer Zahl :-)
-
'Kilometer alt' := last(select 'Auto' where 'Tankdatum' <= myDate).'Kilometer aktuell'
teste es mal so
-
Zum Verzweifeln.... Wie ich's auch drehe, es kommt immer "Nein" oder "0" dabei raus. last() liefert offenbar nicht den gewünschten Wert.
Derzeit versuche ich, ein solches Script beim Anlegen eines neuen Datensatzes zu starten - komme aber nicht weiter.Hier nochmals der Sinn der Übung:
'Kilometer alt' soll bei der Eingabe eines neuen Datensatzes automatisch eingesetzt werden, sodass ich nur noch die aktuellen Kilometer eingeben muss. Die folgende Berechnung der Distanz ist dann kein Problem
-
wenn myDate das aktuelle, neue Datum ist dann muß 'Tankdatum' < myDate sein
-
Das war's (< statt <=) !!! Vielen Dank
Aktuell sieht die Formel so aus:
let myDate := Datum;
'Kilometerstand alt' := last((select 'Auto' where Datum < myDate).Kilometerstand aktuell)Wichtig war noch die doppelte Klammer, sonst ging's nicht. Jetzt läuft's aber wieder wie vorher unter FileMaker.
-
Zwei Fragen drängen sich mir grad noch auf:
was bedeutet das ":=" im Unterschied zu "=" ??
Gibt es in Ninox keine Kommentare in Scripts ? Ich kannte bisher das "--", was aber in Ninox nicht funktioniert.
Content aside
- vor 3 WochenZuletzt aktiv
- 41Antworten
- 14974Ansichten
-
2
Folge bereits