noch mal zum Thema Statistik
Liebe NINOX-Gemeinde,
nun muß ich (Hobbyprogrammierer) mich doch noch einmal an die Profis unter Euch wenden.
Im letzten Webinar (20.02.19) hatte mir Birger dankenswerterweise wertvolle Tipps gegeben, wie man aus zwei Tabellen (hier: Transport_Deklaration und Schäden) eine heterogene Menge an Daten zu einem Vertrag zusammenführt. Ich habe dies für meine Anwendung nun soweit fertiggestellt und es klappt soweit auch prima.
Angelegt habe ich zwecks Auswertung eine Tabelle Statistik mit den Feldern <Jahr>, <Vertrag>, <Prämie>, <Reserve>, <Brutto> (= brutto bezahlt), <SB> (=Selbstbeteiligung) und <Netto> (= netto bezahlt).
Diese Tabelle wird nun aus der Tabelle Vertrag heraus (also jeweils innerhalb des angewählten Vertrages) mittels des Buttons „Prämien/Schäden“ mit Daten „gefüttert“. Die dazugehörige Funktion lautet fertig:
delete (select Statistik);
for i in Transport_Deklaration do
let a := (create Statistik);
a.(Jahr := i.Versicherungsjahr);
a.(Vertrag := i.Vertrag.Vertragsnummer);
a.('Prämie' := i.Netto_gesamt)
end;
for i in 'Schäden' do
let b := (create Statistik);
b.(Jahr := i.year(Schadentag));
b.(Vertrag := i.Vertrag.Vertragsnummer);
b.(Reserve := i.'Reserve €');
b.(Brutto := i.'Gesamt brutto €');
b.(SB := i.'SB €');
b.(Netto := i.'Gesamt netto €')
end;
openTable("Statistik", „(alle)“).
d.h. mit jedem Klick wird zunächst die Tabelle Statistik zunächst geleert und dann mittels Schleifen mit den entsprechenden Daten aus den Tabellen „Transport_Deklaration“ und „Schäden“ gefüllt.
Das Ergebnis sieht dann wie folgt aus (s. Anlage Bild 1). Setzt man nun noch auf die Spalte „Jahr“ eine Gruppierung, dann sieht das Ergebnis schon sehr gut aus (s. Bild 2).
Doch nun kommt’s. Ich hatte zunächst vollmundig gemeint, das eine Quotenberechnung ja dann recht einfach wäre. Die stimmt zumindest mathematisch - round(‚Gesamt netto €‘*100/„Netto_gesamt,2) -: also Schäden*100/Prämien, auf 2 Stellen. Programmtechnisch stosse ich auf das Problem, dass man diese Formel ja nun nicht als Funktion in eine neue Spalte setzten kann, da ja in jeder Zeile entweder zu den aufgeführten Prämien die Schäden bzw. zu den Schäden die Prämien fehlen. Korrekt findet sich dies nur in der Gruppierungszeile (s.Bild-2) wieder. Hier kann ich aber meines Wissens (bzw. habe ich dafür bisher keine Lösung gefunden) keine Funktion eingeben, die nur die Summen der Gruppierungszeilen berechnet!
Kann man es nun noch hinbekommen, dass aus den pro Jahr summierten Prämien und Schäden (nach obiger Formel) eine prozentuale Schadenquote errechnet wird?
Über eine Lösung würde ich mich sehr freuen; dann wäre meine Statistik perfekt!
16 Antworten
-
Hallo,
man kann eine Funktionspalte anlegen:
---
let myYear:=Jahr;
round(sum(Statistik[Jahr=myYear].'Gesamt netto €'*100)/sum(Statistik[Jahr=myYear].Netto_gesamt),2)
---
So kriegst du in jeder Zeile die die Jahresquote. Bei Gruppierung musst dann aber entweder den ersten Wert oder Durchschnitt wählen.
Leo
-
Ach so, die Tabelle ist gar nicht verknüpft. Dann:
let myYear:=Jahr;
round(sum(select Statistik[Jahr=myYear].'Gesamt netto €'*100)/sum(select Statistik[Jahr=myYear].Netto_gesamt),2)
-
Hallo Leo,
lieben Dank für Deine, wie immer, super Unterstützung. Korrekt, die Tabellen sind nicht verknüft, da da Tabelle Statistik ja situativ erzeugt wird.
Deine Formel klappt (natürlich) prima. Ich habe sie noch um eine Abfrage ergänzt, um Fehler bei Nullwerten (z.B. Prämie oder Schäden) zu vermeiden:
let myYear := Jahr;
if sum((select Statistik)[Jahr = myYear].Netto) > 0 and sum((select Statistik)[Jahr = myYear].'Prämie') > 0 then
round(sum((select Statistik)[Jahr = myYear].Netto) * 100 / sum((select Statistik)[Jahr = myYear].'Prämie'), 2)
else
0
endEin Problem ergibt sich noch. Bisher hatte ich die Gruppierung auf die Spalte Jahr gesetzt. Dann erschienen die Jahre links fortlaufend. MIt Deiner Formel muß man jedoch die Gruppierung auf die neue Funktionsspalte (hier "Netto-Quote %") setzten. Damit verschwinden aber die gruppierten Jahreszahlen, die ja auch für die Statistik wichtig sind. Siehe Foto. Kann man nun auch dageben noch etwas tun?
-
Und wenn du gruppierung bei Jahr lässt und bei Netto Quote den Ersten Wert auswälst:
-
Hallo Leo,
Ergänzung:
Wenn ich Gruppierung auf die Funktiosnspalte setze und für die Spalte Jahr Anzeigen "Durchschnitt" wähle, klatt es insofern, als dass die Jahreszahlen wieder angezeigt werden (mit dem Durchschnittssymbol; damit könnte man leben).
Allerdings stehen die Jahre nicht mehr in der logischen Reihenfolge 2018, 2019. Egal, ob ich in der Jahresspalte nun "aufsteigend" oder "absteigend" wähle, es ändert sich nichts. Kann man dagegen auch noch etwas tun?
Besten Gruß Manfred
-
Hallo Leo,
Deine letzte Mitteilung hat sich mit meiner Überschnitten. Wie kann ich in der Funktionsleiste "Erster" wählen? Bei mir ercheint bzgl. der Optionen nur folgendes Bild!?
-
Bewege die horizontale Scrollleiste mal nach rechts, dann sollten die weiteren Optionen nach "Maximum" erscheinen.
-
Hallo Leo,
danke, habe ich auch gerade gemerkt :-) Ich hatte den Schiebebalken übersehen (von Blindheit geschlagen....).
Nun klappt alles, wie, wie gewünscht. Ich danke Dir und wünsche noch einen schönen Sonntag.
Besten Gruß Manfred
-
Hallo Copytexter,
auch an Dich natürlich besten Dank und schönes Wochenende.
Gruß Manfred
-
Nicht dafür, das war nun wirklich einfach. Und du warst ja auch schon selbst drauf gekommen. Aber dennoch danke und ebenfalls ein schönes Wochenende.
-
Nun doch noch mal ich ;-),
mir ist nun beim Erstellen der Funktionsspalte zur Berechnung der Bruttoschaden-Quote (hierzu muss man ja die Reserven + die netto gezahlten Schäden addieren) aufgefallen, dass bei der Rundungsformel (gesetz auf 2 Stellen) erheblich mehr Stellen angezeigt werden. Auch, wenn ich die Anzahl der Stellen auf 1 setze, passiert das Gleiche. Wenn ich aber die Aanzahl der Nachkommenstellen auf Null setze, wird die %-Quote als Ganzzahl dargestellt. Nun werden aber Schadenquoten üblicherweise auf 3 Nachkommastellen berechnet. Liegt der Fehler an der hohen Zahl? Im Falle eines anderen Vertrages wurde die Brutto-Quote statt gesetzter 2 Stellen, nur mit 1 Nachkommastelle angezeigt.
Oder habe ich in der Syntax einen Fehler gemacht? Es wird jedoch keiner angezeigt!
let myYear := Jahr;
let Schaeden := sum((select Statistik)[Jahr = myYear].Netto) + sum((select Statistik)[Jahr = myYear].Reserve);
if Schaeden > 0 and sum((select Statistik)[Jahr = myYear].'Prämie') > 0 then
round(Schaeden * 100 / sum((select Statistik)[Jahr = myYear].'Prämie'), 2)
endGruß Manfred
-
Korrekt: Berechnung üblicherweise auf 2 (nicht 3) Nachkommastellen
-
Ein Aspekt ist mir nun noch aufgefallen, bei dem man aufpassen muss!!!!!!
pro Zeile werden die Schadenquoten korrekt ausgegeben. In der Additionsspalte unten werden allerdings falsche Werte angezeigt (aufsteigen, Anzeige auf Erster gesetzt; dies spielt allerdings keine Rolle, auf was man die Anzeige setzt).
Es wird ja in der Summenzeile keine neue Berechnung (Summe aller Schäden[aller Jahre])*100/Summe aller Prämien[aller Jahre]) ermittelt, sondern es wird lediglich die Erste (oder letzte, je nachdem, auf was man die anzeige setzt) wiederholt. Nun kann man aber ja die Anzeigen der Prozentwert in der Summezeile nicht ausblenden, wenn man für diese Spalten einen Anzeigewert (erster, letzter etc.) gesetz hat.
Gibt es dafür eine Lösung?
-
Hallo Manfred,
zu 1.
versuch die Formel so zu schreiben:
---
let myYear := Jahr;
let Schaeden := sum((select Statistik)[Jahr = myYear].Netto) + sum((select Statistik)[Jahr = myYear].Reserve);
if Schaeden > 0 and sum((select Statistik)[Jahr = myYear].'Prämie') > 0 then
round(Schaeden * 100 / sum((select Statistik)[Jahr = myYear].'Prämie'), 2) else 0
end
---
zu 2
es gibt noch die Option statt ersten oder letzten Wert auch ein Durchschnittwert anzuzeigen:
Versuch's damit
Leo
-
Hallo Leo,
zunächst Danke für die geändert Formel. Klappat besser, auch wenn sie in einem Falle (warum?) nur eine Nachkommanstelle anzeigt. In jedem Falle wird die Anzeige auf zwei Stellen begrenzt (dies klappt). Damit kann ich gut leben.
Zu 2.
Gleich, ob ich Erster, lertzter Wert oder Durchschnitt angebe, in der letzten Summenzeile steht stets ein falscher Wet (Durchschnitt klappt ja auch nicht, weil dafür nur die Prozentwerte der einzelnen Zeilen addiert werden und ruch die Anzahl der Zeilen geteilt wird). In keinem der Fälle gelingt es, die untere Summenzeile alternativ komlett auszublenden.
Ich befürchte fast, hier sind wir an die Grenze dessen gestoße, was NINOX derzeit zuläßt. Wie gesagt, wenn ich über die Spalte Netto- oder Brutto-Quote gruppiere und dann Anzeige Erster nehme, fällt wenigstens in der Summenzeile die falsche Qutoenanzeig weg (dafür steht dort dann 0). Eine Gesamt-Quote über die Jahr müsste dann "händisch" ermittelt werden. Wenn ich dann Jahre auf "Anzeigen Erste" setze, erscheinen die Jahre, aber nicht in der korrekten Reihenfolge, sondern absteigend, egal ob ich dort auf eine Auf- oder abteigende Sortierung klicke. In der Summezeile unten erscheint, dann entweder das erste oder letzte Jahr (je nachdem, was ich gesetz habe); dort düürfte dann aber eigentlcih gar kein Jahr stehen (da die Addition der Prämien und Schäden - die sind korrekt - ja über alle angezeigten Jahre lautet. Also nciht ganz optimal und nicht so, dass man dies als fertige Statistik an Kunden schicken könnte. Derzeit ist Nacharbeit über Numbers oder EXEL erforderlich.
Auch schade, dass man in der Druckversion keine "dauerhafte" Gestaltung, wie Zusatz einer Überschrift "STATISTIK" etc. vornehmen kann. Es wäre schön, wenn NINOX hier zu einem späteren Zeitpunkt ein wenig nachschleift (gilt ja auch für andere Listen-Ausdrucke, soweit nicht über separate Drucklayouts gesteuert.
Dennoch an Dich erstmal vielen Dank, für Deine, wie immer, wertvollen Anregungen, die immer wieder zum Staunen führen und zeigen, was man mit NINOX alles machen kann (und was ich noch zu lernen habe ;-) )
Lieben Gruß
Manfred
-
oha, die vielen Schreibfehler. Ich hoffe, die späte Stunde entschuldigt diese!!!
Content aside
- vor 5 JahrenZuletzt aktiv
- 16Antworten
- 2764Ansichten