0

Massive Performanzprobleme bei Tabellen mit berechneten Feldern

Hallo, ich habe folgende Situation. Eine habe mir einen kleinen Aktienscreener gebaut, der ca 1700 Symbole verwalten soll. Dazu habe ich von externen Quellen mir mehrere Datensätze in verschiedene Tabellen importiert und habe eine übergreifende Tabelle als View, die die ganzen Teildaten zusammenführt. Im Prinzip erfolgt dies durch folgende Berechnungen.

Beispiel

let s := this.Symbol;
let m := first((select Basic)[Ticker = s]).'Market Cap';
m / 1000000

Soweit passt das auch noch alles.

Jetzt habe ich aber weitere Felder, die auf Basis mehrere dieser Daten eine Bewertung Berechnen und damit ist jetzt Ninox extrem langsam.

Anzeige einzelner Records OHNE dass die complexe Berechnung in der Tabelle vorhanden ist, ist noch OK.

Aber sobalt ich die komplexe Berechnung in einer Ansicht aktiviere (und danach oder nach einem anderen Feld sortieren will) ist Ninox mehrere Minuten auf 100% CPU.

Für mich ist erst einmal die Frage. 

So viele Berechnungen sind (noch) nicht drin. Ca 10 Look-Ups mit wie das Selekt Beispiel oben und ca 5 Berechnung auch auf den Look-Up Daten. Ist dies schon ein Problem?  (Älterer iMac mit 3,4 GHz Quad-Core Intel Core i7)

Ist der Weg über solch eine View zu gehen  überhaupt sinnvoll. Die Teildaten ändern sich in unterschiedliche Frequenz, daher will ich sie auch getrennt aktualisieren können.

Also Alternative habe ich mir überlegt, eine (die zentrale) View Tabelle nach einem Import zu berechnen, habe aber keine Idee wie ich sowas umsetzen könnte. Ist das ein Weg?

 

Gruß Kai 

4 Antworten

null
    • UweG
    • vor 4 Jahren
    • Gemeldet - anzeigen

    In einem Webinar wurde davon abgeraten in der Tabellenansicht Funktionen in Spalte zu nutzen.

    Das geht bei bei einer Funktion vielleicht noch. Sollten es jedoch mehrere werden, zwingst du Ninox in die Knie.

    • Kai
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ok, aber was wäre eine alternative wenn ich die Spalte zum sorteren brauche? 

    • UweG
    • vor 4 Jahren
    • Gemeldet - anzeigen

    In dem Record jeweils ein Zahlen/Textfeld erstellen und mit den berechneten Werten füllen. Diese dann als Spalten verwenden.

    Man kann diese Felder im Record verstecken damit es nicht sichtbar ist.

    • Kai
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ich stehe jetzt vor der Frage, wo und wie ich diese Berechnung durchführen kann. Eine API hat die Desktop Datenbank ja nicht, sodass ich die DB von extern füllen könnte.

    Es gibt eine Funktion, "Nach dem Öffnen der Datenbank folgendes Script ausführen" - Ist das eine Sinnvolle stelle? Und dann muss ich ja prüfen ob die Vorberechnung schon erfolgt ist. Wie gehe ich dann damit um, dass ich evtl Teile durch einen Import aktualisiere?

    Die zweite Idee die ich sehe. Ich lege mir eine Verwaltungstabelle an, die eigentlich nur einen Buttom mit "Vorberechnungsfunktion" bereitstellt und berechne dann die Felder der View vor.

    Gibt es noch andere/bessere Möglichkeiten

     

    Gruß Kai