Summenprodukt
Gibt es die Möglichkeit (ähnlich wie bei Excel) das Summenprodukt mehrerer Spalten (Felder) zu bilden? Derzeit löse ich das über eine Hilfsspalte.
12 Antworten
-
Hallo Johanes,
die Formel dazu (ähnlich wie bei Excel)
---
sum(Feld1,Feld2,Feld3......)
---
Leo
-
Hallo Leo,
erstmal vielen Dank für die schnelle Antwort.
Aber leider passt das nicht ganz, hier werden nur alle Werte in Feld 1 zu den Werten in Feld 2 addiert, aber nicht multipliziert.
SpalteA _ SplateB _ SpalteC
a1 * b1 = c1
a2 * b2 = c2
a3 * b3 = c3
....
x = c1 + c2 + c3 ...usw
Ich würde nun eben gerne auf die Spalte C verzichten. In Excel würde man nun schreiben x = Summenprodukt(SpalteA;SpalteB).
Hintergrund ist, dass ich gerne auf das Feld C verzichten würde. Nun kann man zwar in der Ansicht der Haupttabelle der Ansicht der Untertabelle eine Spalte mit formel hinzufügen und kann in der Fußzeile der Untertabelle auch die Summe ausweisen, jedoch kann ich nicht mit dieser Summe weiterrechnen.
-
Ah so. Dann:
---
sum (select 'Deine Tabelle'.(a*b))
---
Leo
-
Okay, so bekomm ich das Summenprodukt, perfekt. Allerdings von der gesamten Tabelle und nicht nur von den in der Untertabelle ausgewählten Rezepten.
https://www.dropbox.com/s/dy0tg2thiyysnwe/Rezepte.ninox?dl=0
In der Tabelle "Menü" werden einem Menü Rezepte zugeordnet. Hier kann ich in der Untertabelle dann auch weitere Splaten hinzufügen und diese in der Fußzeile der Untertabelle aufsummieren lassen. Ich kann aber die Summe nicht "weiterverwenden" und dachte ich komme hier irgendwie mit dem Summenprodukt weiter.
Wenn du hier noch ne Idee hast, wäre super..
Johannes
-
Hallo Johannes,
für Summen:
---
sum(Positionen.Rezepte.('Rezept-Portionen' * '€ pro Portion'))
---
für Auflistung der Produkte mit Mengen:
---
let AA := unique(Positionen.Rezepte.Zutaten.Produkt.Produkt);
var TT := "";
for II in AA do
let SS := sum(Positionen.Rezepte.Zutaten[Produkt.Produkt = II].Menge);
let EE := II + " " + SS;
TT := TT + ";" + EE
end;
let myARRAY := split(TT, ";");
join(myARRAY, "
")---
Leo
-
Hallo Loe,
einfach spitze! Die Summe funktioniert genau so wie ich es mir gedacht habe. Die Auflistung funktioniert ebenfalls. Ans verstehen mach ich mich dann morgen ;-)
Herzlichen Dank!
-
Bei der Auflistung der Produkte mit Mengen hätte ich noch eine Frage:
Die Funktion join() müsste das Trennzeichen eigentlich "hinter" die einzelnen Einträge stellen, stellt diese momentan allerdings vor die einzelnen Einträge. Daraus resultiert auch irgendwie eine Leerzeile ganz oben.
Wie könnte ich denn zum beispiel noch die Einheiten hinzufügen und/oder das Zahlenformat der Menge ändern?
-
Hallo Johannes,
"Join" macht schon alles richtig - schuld an der leeren Zeile oben ist das Semikolon in dem Array.
Eine Formel, um alle deine Wünsche zu erfüllen:
---
let AA := unique(Positionen.Rezepte.Zutaten.Produkt.Produkt);
var TT := "";
for II in AA do
let SS := sum(Positionen.Rezepte.Zutaten[Produkt.Produkt = II].Menge);
let EIN := first(Positionen.Rezepte.Zutaten[Produkt.Produkt = II].Einheit);
let EE := II + " " + format(SS, "0.#") + " " + EIN;
TT := if TT = "" then EE else TT + ";" + EE end
end;
let myARRAY := split(TT, ";");
join(myARRAY, "
")----
Leo
-
Hallo Leo,
perfekt. Vielen Lieben Dank!
-
Soo...bisher hat alles super funktioniert.
Jetzt habe ich die Anwendung um eine Mengenangabe der Cocktails (Positionen sind mittlerweile Cocktails) erweitert. Ich kann also angeben, dass Cocktail A 10 mal, Cocktail B aber nur 8 mal benötigt wird.
___
let AA := unique(Cocktails.Rezepte.Zutaten.Produkt.ProduktName);
var TT := "";
for II in AA do
let SS := sum(Cocktails.Rezepte.Zutaten[Produkt.ProduktName = II].(Menge * Rezept.Cocktails.Menge));
let EIN := first(Cocktails.Rezepte.Zutaten[Produkt.ProduktName = II].Einheit);
let EE := II + " " + format(SS, "0.#") + " " + EIN;
TT := if TT = "" then EE else TT + ";" + EE end
end;
let myARRAY := sort(split(TT, ";"));
join(myARRAY, "
")")___
hier bekomm ich aber die Fehlermeldung "Ungültiger Operator: number * [number] in Zeile 4 Spalte 117"
Ich hoffe es ist verständlich was ich machen möchte...
Vielen Dank im Voraus! -
Dein Konstrukt Rezept.Cocktails.Menge gibt ein Array zurück. Ich würde dies mit summe zusammenführen.
let SS := sum(Cocktails.Rezepte.Zutaten[Produkt.ProduktName = II].(Menge * sum(Rezept.Cocktails.Menge)));
Leo
-
Achso...
Jetzt hatte ich kurz einen Hänger und hab überlegt was er denn alles mit in das Array nimmt. Durch das Aufsummieren werden alle Cocktails an jedem Abend berücksichtigt. Ich glaube/hoffe, dass ich das jetzt mit dem Filter ausgeschlossen hab. Das Überprüfen ist schon etwas komplexer geworden ;-)
___let CA := Nr;
let AA := unique(Cocktails.Rezepte.Zutaten.Produkt.ProduktName);
var TT := "";
for II in AA do
let SS := sum(Cocktails.Rezepte.Zutaten[Produkt.ProduktName = II].(Menge / Rezept.'Rezept-Portionen' * sum(Rezept.Cocktails[Cocktailabend.Nr = CA].Menge)));
let EIN := first(Cocktails.Rezepte.Zutaten[Produkt.ProduktName = II].Einheit);
let EE := II + " " + format(SS, "0.#") + " " + EIN;
TT := if TT = "" then EE else TT + ";" + EE end
end;
let myARRAY := sort(split(TT, ";"));
join(myARRAY, "
")___
So klappt es glaube ich..zumindest in ersten Tests, bin mal gespannt, ob irgendwann krumme Dinger raus kommen :-P
Ich dank dir vielmals!
Content aside
- vor 4 JahrenZuletzt aktiv
- 12Antworten
- 3507Ansichten