Geschwindigkeitsoptimierung: Große Menge an Datensätzen schneller verknüpfen.
Ich nutze die Desktop App von Ninox am Mac um Datensätze anhand des EAN Barcodes Produkten in unserer Tabelle zuzuordnen. In der Datenbank gibt es 188 Produkte und halbjährlich müssen aktuell circa 200.000 Einträge aus der Tabelle 'Curve Sales' zugewiesen werden. Da die Tabelle jedesmal jeden Eintrag prüft ob er bereits zugewiesen wurde oder nicht, dauert es jedes Mal länger und zum Teil mehrere Tage, manchmal wird auch der Vorgang abgebrochen. Gibt es eine Möglichkeit den Vorgang zu beschleunigen? AI Tools wie ChatGPT und Grok habe ich getestet kommen aber zu keinem verwertbarem Ergebnis. Hier der Code:
let produktListe := (select Produkte);
let counter := 0;
for i in select 'Curve Sales' where Produkte = null do
let myProdukt := first(produktListe['UPC / EAN Barcode' = i.Barcode]);
if myProdukt != null then
i.(Produkte := myProdukt);
i.(Kontaktgruppe := myProdukt.Artist);
counter := counter + 1
end
end;
alert("Es wurden " + text(counter) + " Datensätze aktualisiert.")
Was ein zusätzliches Problem sein könnte, warum der Vorgang so lange dauert:
Jeder Eintrag wird außer der Verknüpfung zu 'Produkte' auch einer 'Kontaktgruppe' zugewiesen. In einem zweiten Schritt müssen wir die Einträge auch entsprechend einem Prozentverhältnis welches in 'Produkte' festgelegt wurde 'Quittungen' zuweisen um daraus Abrechnungen an unsere Artists / 'Kontaktgruppen' zu erstellen. 'Quittungen' können erst erstellt werden sobald ein Mindestbetrag erreicht ist, daher hatte ich folgende Felder als Funktionsfelder in den 'Curve Sales' festgelegt, was vermutlich ungünstig ist:
Download Deal (Formel: Produkte.'Deal Download')
Download Stück (Formel: Produkte.'Stückpreis Artist Download')
Download Anteil (Formel: Produkte.'Anteil Artist Download')
Streaming Deal (Formel: Produkte.'Deal Streaming')
Streaming Stück (Formel: Produkte.'Stückpreis Artist Streaming')
Streaming Anteil (Formel: Produkte.'Anteil Artist Streaming')
NET_ARTIST (fkt.)
if text(Configuration) != "Download" and text('Streaming Deal') = "Anteil" then
'Net Payable' * 'Streaming Anteil' / 100
else
if text(Configuration) != "Download" and text('Streaming Deal') = "Stückpreis" then
'Streaming Stück' * Units
else
if text(Configuration) = "Download" and text('Download Deal') = "Anteil" then
'Net Payable' * 'Download Anteil' / 100
else
if text(Configuration) = "Download" and text('Download Deal') = "Stückpreis" then
'Download Stück' * Units
end
end
end
end
NET_LABEL (fkt.)
'Net Payable' - NET_ARTIST
Anfangs dachte ich es wäre eine gute Idee mit Funktionsfeldern zu Arbeiten, da es unterschiedliche Vertragsarten (Stück oder Anteil) gibt und sich diese auch in der Zukunft ändern können. Bei großen Datenmengen, ist es allerdings zu großer Aufwand.
Ich bräuchte unbedingt Hilfe das Datenmodell so umzubauen, dass alles funktioniert und die Rechenleistung minimiert wird. Vielen Dank!
4 replies
-
Mein erster Ansatz zur Optimierung wäre nun, zuerst die Funktionsfelder in 'Curve Sales' durch feststehende, einmal berechnete Text und Zahlenfelder zu ersetzen. Ist das sinnvoll um die Prozesse zu beschleunigen?
-
Can you post a DB with sample data?
So every 6 months, you import 200K records in a table that you then need to link each record? or you import new records and only those records need to be linked?
-
How many records does this code return?
select 'Curve Sales' where Produkte = nullWhich table is this button located?
Content aside
- 5 hrs agoLast active
- 4Replies
- 24Views
-
2
Following
