Ich versuche, einen Weg zu finden, normalisierte Daten, die sich in einer MSSQL-Datenbank befinden, von dort zu bekommen, schwenkbar, und in eine Excel-Datei. Das Hauptproblem besteht darin, dass ich viele dieser Datenbanken habe, jede mit demselben Schema, aber unterschiedlichen Daten, was auch zu einem anderen Satz von Pivot-Spalten für jede Datenbank führt.
Derzeit verwende ich SQL Server Reporting Services für diese Aufgabe, aber es bricht nur über 3000 Zeilen hinaus (was nicht ganz unerwartet ist, da es nicht für diese Aufgabe gedacht ist).
Szenario
Um meine Anforderungen zu erläutern, lassen Sie mich das Szenario festlegen. Ich exportiere immer Entities vom Typ -say- " Person
". Jede Person sollte im endgültigen Export zu einer Zeile werden. Ich habe etwa von diesen 250.000 Datensätzen. Dieser Personendatensatz hat ungefähr 25 "flache" Eigenschaften und bis zu 20 weitere Pivot-Eigenschaften. In seiner endgültigen Form nach dem Schwenken erwarte ich zwischen 25 und 300 Spalten.
Einfaches Beispiel der Hauptanforderung
Um dies mit einem einfachen, kleinen Beispiel zu veranschaulichen, nehmen wir an, ich habe diese Daten:
Ich brauche ein Tool oder eine Bibliothek, um das in diese Richtung zu drehen:
Dies ist ein kleines Beispiel, aber Sie verstehen wahrscheinlich den Punkt.
Es ist keine Voraussetzung (oder ein Nice-to-have, Tops), die ersten beiden Reihen getrennt zu haben, es dient lediglich der Klarheit im Beispiel. Sie können zu einer Zeile kombiniert werden (textuelles Zusammenführen von Dingen, zB "Merkmal - Fett", etc).
Hauptanforderungen
Folgende Dinge sind meine Hauptanforderungen:
Person
maximal etwa 250.000 s, mit etwa maximal 20 normalisierten PropName
s mit jeweils etwa 5 bis 10 ValName
s (Zählen Sie "Andere ..." als eins) und exportieren Sie sie in Excel .Dabei ist es mir egal, ob es sich um ein fertiges Tool oder eine Software handelt oder um eine Softwarebibliothek, die ich in meiner eigenen App verkabeln muss.
Zusätzliche Anforderungen
Die folgenden Anforderungen sind nicht unbedingt erforderlich, wären jedoch eine große Voraussetzung:
PropName
s als auch ValName
s haben eine Reihenfolge, was zu einer Reihenfolge der Spalten führen sollte.Dinge, die ich in Betracht gezogen habe
Hier ist eine kurze Liste von Dingen, die ich in Betracht gezogen oder versucht habe:
Meine Hauptfrage und mein Fazit lautet: Was würden Sie empfehlen?
Obwohl ich genau so etwas noch nicht selbst gemacht habe, würde ich empfehlen, Python und Pandas zu installieren .
Diese Kombination kann:
Besser noch, es ist alles kostenlos, kostenlos und Open Source.
Ich würde es in Microsoft Access versuchen. Ich könnte es auch in einer der Access-Alternativen für Linux versuchen, es gibt einige, obwohl ich nicht sicher bin, welche davon stabil genug sind. Möglicherweise müssen Sie es so einrichten, dass es in Blöcken arbeitet. Und ich möchte nicht nur eine Excel-Datei verwenden, um 250000 Datensätze zu speichern, ich würde den Code mehrere in Serie erstellen lassen, was ein natürlicher Chunking-Ansatz ist.
Anhängen wie gewünscht:
Ich habe in Access geschwenkt, ein oder zwei vage ähnliche Fälle, 50-100.000 Datensätze, nicht ganz Ihre Größenordnung, aber nicht zu weit. Es funktioniert, aber Sie fügen eine Excel-Ausgabe hinzu, die eine andere Ebene ist. Ich habe die Schicht gemacht, aber nicht in großer Größenordnung. Man muss vorsichtig sein, wie groß der Datensatz ist, den man auf Excel wirft. Ich empfehle, Code hinzuzufügen, um die Ausgabe zu „chunken“, um mehrere Excel-Tabellen zu erstellen. VBA und SQL lassen sich beide gut in Access einbetten, obwohl ich nicht weiß, ob man auf diese Weise zur Excel-Ausgabe gelangen kann. Ich habe diese Art von Arbeit in VBA gemacht.
Die hierarchische Beziehung in Ihren Kreuztabellenspalten (PropName/ValName) wird vom PIVOT-Befehl in SQL Server nicht wirklich unterstützt. Ein alternativer Ansatz besteht darin, die normalisierten Daten in CSV zu schreiben und dann ein Drittanbieter-Tool zu verwenden, das Kreuztabellen-Spaltengruppen wie Ihren PropName und ValName unterstützt.
Ein solches Tool ist xtab.py ( https://pypi.org/project/xtab/ ). Haftungsausschluss: Ich habe es geschrieben (als ich mich in der gleichen Situation befand wie Sie). Wenn die Verwendung von Python und der zweistufige Prozess „Exportieren-dann-Kreuztabelle“ in Ihren Arbeitsablauf passt, können Sie es versuchen.
Kybernard
Jeroen