Autor Thema: Sortieren großer Datenmengen  (Gelesen 3496 mal)

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Sortieren großer Datenmengen
« am: 06.03.17 - 14:40:22 »
Hallo Forum!

Unsere Buchhaltung wird im nächsten Jahr auf ein neues System umsteigen. Dazu wollen sie wissen, für welche Kunden in den letzten zwei Jahren Aufträge anfielen, um die Debitorenkonten der Wichtigkeit nach zu überprüfen um keinen Schrott ins neue System zu übernehmen.

Dazu müsste ich alle Aufträge des Zeitraums einlesen (mehrere zehntausen Dokumente), die Auftraggeber mit Namen und Ort und UID des Kundenstammdokuments in eine Liste schreiben, diese sortieren, und dann wie auch immer ausgeben.

Problem: Mit einem Array, das ich sortiere, werde ich das nicht hinbekommen, weil es zu viele Daten sind, die die 64k-Grenze sprengen werden (meine Vermutung). Eine Ansicht will ich vermeiden, weil die auch viel Platz kosten wird. Also wollte ich das mit Listen machen. Aber wie sortiere ich List-Einträge? Die Werte in ein Dokumentfeld zu schreiben und mit "Evaluate" und "@Sort" zu sortieren geht wohl auch nicht wegen der 64k-Grenze.

Irgendwie weiß ich nicht weiter. Hat jemand eine Idee?

Vielen Dank
Frank
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Sortieren großer Datenmengen
« Antwort #1 am: 06.03.17 - 14:48:30 »
nimm Java. Erstelle eine Bean für das zu sortierende Objekt mit den entsprechenden Feldern.
Die einzelnen Beans packst du in eine Collection und die kannst du dann nach Belieben sortieren.

Beispiel:
http://www.java67.com/2012/10/how-to-sort-object-in-java-comparator-comparable-example.html
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: Sortieren großer Datenmengen
« Antwort #2 am: 06.03.17 - 15:58:06 »
Das einfachste & schnellste ist aber definitiv eine Ansicht! 
Aber wenn ihr Plattenplatz-Probleme habt, dann viel Spaß beim Programmieren.
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Sortieren großer Datenmengen
« Antwort #3 am: 06.03.17 - 16:45:49 »
Alternative:
Export nach Excel (direkt oder via csv),
Buchhalter sind schliesslich Excel kompatibel :-)
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Driri

  • Gast
Re: Sortieren großer Datenmengen
« Antwort #4 am: 07.03.17 - 07:11:02 »
Ich würde mir das ganz einfach machen. Entweder eine private Ansicht, aus der ich hinterher die gewünschten Daten in eine CSV exportiere oder ein Agent, der mir durch die Dokumente läuft und die benötigten Infos in ein kommasepariertes Textfile raushaut.

Egal welcher Weg, die restliche Bearbeitung würde ich per Excel machen.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Sortieren großer Datenmengen
« Antwort #5 am: 08.03.17 - 07:10:00 »
Programmierbeiträge von planetlotus.com Blog-Beiträge liest sich inzwischen sowieso wie das Java Magazin.

What are you fighting for? Say it in broken Java. (https://www.youtube.com/watch?v=juEqplbnh3Q)  ;D

Hier bekommst Du bei Problemen sicher geholfen. Versprochen.  

Der Junior bei mir im Büro macht das so: Jammert rum, "es gäbe nix zu tun", programmiert seine Aufgabe 5 mal so schnell wie abgesprochen und ich mach die Skizze dann lauffähig, wenn der schon lange in den Feierabend entschwunden ist.  ;D  

Vor 10 Jahren habe ich mich darüber aufgeregt, wenn ich hier eigentlich recht simple Programmieraufgaben für andere Leute erledigt habe. Heute wäre mir das egal. Ich könnte auf meinem sehr traurigen Github Account ein Projekt atnotes anlegen und wer braucht könnte
a) sich bei den zahlreichen youtube videos informieren, wie er mit git selbst arbeitet (nicht so schwierig)
oder b) den code einfach als zip runterladen.

Für wie man das in Domino einbindet, kann ich allenfalls beratende Hilfestellung aus älteren und möglicherweise im Detail nicht ganz korrekten Erinnerungen leisten, weil ich seit 5 Jahren kein Notes Designer mehr nutze und den mir auch nicht besorgen würde. Dafür gäbs hier aber sowieso kompetentere Foristen. Ich könnte aber Klassen bereitstellen, die wo die Aufgabe an sich erledigen und die man einfach in einen Notes Agent einbinden kann, gemeinsam mit gängigen und im millionen-fachen Praxis-Einsatz erprobten Third Party open source Hilfs-jars, die ich ganz sicher nutzen würde.  

Für die Aufgabe rechne ich mit allen mit ca. 150 Code Zeilen mit Notes Einbindung, Bean, Geschäftslogik, Reporting, Junit-Tests, maven-pom und Log-Ausgaben, die man da überhaupt schreiben müsste.  
« Letzte Änderung: 08.03.17 - 07:16:47 von flaite »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Sortieren großer Datenmengen
« Antwort #6 am: 08.03.17 - 08:17:01 »
Du hast die Liste ja schon erwähnt, aber nicht geschrieben, wie Du damit umgehen willst. Ich würde eine Liste über die Anzahl der Aufträge je Kunde etwa so erstellen:

Code
Dim auftragcol = auftragsdb.Search (|Selektionsformel für die relevanten Aufträge|, Nothing, 0)
Dim auftragdoc As NotesDocument
Dim auftraege List As Long
Dim index As String
Set auftragdoc = auftragcol.GetFirstDocument
Do While Not auftragdoc Is Nothing
   index = auftragdoc.FeldMitUIDDesKundenstammdokuments (0) 'evtl. weitere Felder aufnehmen, falls das nicht ausreicht (z.B. Ort)
   If Iselement (auftraege (index)) Then
      auftraege (index) = auftraege (index) + 1
   Else
      auftraege (index) = 1
   End If
   Set auftragdoc = auftragcol.GetNextDocument
Loop
Als Ergebnis hast Du dann eine Liste der Kunden mit der Anzahl ihrer Aufträge, die Du dann weiterverarbeiten kannst

Code
Forall auftrag In auftraege
   Print Listtag (auftrag) & " = " & auftrag
End Forall
Diese Daten könntest Du, wie schon vorher erwähnt, in Excel/csv schreiben und dort sortieren. Über die UID des Kundenstammblatts kannst Du ja noch Daten aus diesem hinzufügen. Falls Du die Liste per Script sortieren willst, geht es z.B. so, dauert aber etwas

Code
Dim auftraegesort List As Long
Dim vgl As Long
Dim vglindex As String
Do
   vgl = 0
   Forall auftrag In auftraege
      If auftrag > vgl Then
         vgl = auftrag
         vglindex = Listtag (auftrag)
      End If
   End Forall
   If vgl = 0 Then
      Exit Do
   Else
      auftraegesort (vglindex) = index
      Erase auftraege (vglindex)
   End If
Loop
In auftraegesort hast Du dann die Liste der Kunden, sortiert absteigend nach Anzahl der Aufträge.

Offline ugusko

  • Frischling
  • *
  • Beiträge: 9
  • Geschlecht: Männlich
Re: Sortieren großer Datenmengen
« Antwort #7 am: 08.03.17 - 10:26:16 »
Über die Ansichten zu sortieren ist doch nicht das Problem.
Wir haben Datenbanken mit mehr als 900.000 Dokumenten, die natürlich nicht Performance-Wunder sind, aber darum geht es hier ja auch nicht.
Das soll, so wie ich das sehe, eine einmalige Aktion zur Unterstützung sein. Wenn nur die ID, der Name und der Ort wichtig sind ( evtl. ja noch die Summe/Auftrag) dann sind das doch nicht viele Daten pro Dokument, die zu sortieren sind.


Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
Re: Sortieren großer Datenmengen
« Antwort #8 am: 08.03.17 - 15:18:53 »
Ich danke Euch für die Vorschläge und Ideen!

Da ich mich bisher nicht mit Java beschäftigen konnte, mache ich mir nochmal Gedanken über die Verwendung von "List" (Danke an Peter Klett) oder probiere es eben doch über eine Ansicht.

Danke nochmals!
Frank
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz