Softwarebibliothek oder Tool zum Schwenken und Exportieren vieler Daten nach Excel

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:

Unpivotierte Daten

Ich brauche ein Tool oder eine Bibliothek, um das in diese Richtung zu drehen:

Pivotierte Daten

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:

  • Pivotieren Sie wie oben, für Personmaximal etwa 250.000 s, mit etwa maximal 20 normalisierten PropNames mit jeweils etwa 5 bis 10 ValNames (Zählen Sie "Andere ..." als eins) und exportieren Sie sie in Excel .
  • Pivot-Spalten bis zur Laufzeit nicht bekannt . Ich habe viele DBs mit demselben Schema, aber mit unterschiedlichen Daten in den Spalten, die geschwenkt werden sollen.
  • Sollte ein Live-Export sein , der innerhalb von Sekunden läuft.
  • Export nach XLSX (geringfügig bevorzugt) oder XLS.
  • Jede Lösung im .NET-Ökosystem würde ausreichen, einschließlich nicht kostenloser Optionen.
  • Jede Lösung sollte solide und wartbar sein , zB indem sie durch Integrationstests testbar ist.

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:

  • Lokalisierung von Dingen wie Spaltenüberschriften (zB "Vorname") in Excel.
  • In der Lage sein, die resultierende Excel-Datei zu stylen (Schriftarten, Rahmen, Hintergründe).
  • Möglichkeit, Metadaten (Exportdatum usw.) im endgültigen Excel zu hinterlassen.
  • Sowohl PropNames als auch ValNames 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:

  • Ganz offensichtlich SSRS . Dieses Tool ist der Menge an Pivots/Daten nicht gewachsen.
  • SSIS-Pakete . Das Tool scheint für den Job gedacht zu sein. Ich hege einen Groll gegen das Tool, aber vielleicht ist es an der Zeit, darüber hinwegzukommen. Die Hauptsorge, die ich habe, ist, dass SSIS anscheinend wissen möchte, dass die Daten vor der Laufzeit in Spalten geschwenkt werden sollen.
  • Dynamisches SQL + generierte RDLs . Verwenden Sie DySQL, um das Pivotieren durchzuführen. Dies erfordert generierte RDL-Dateien, da die Felder einer Abfrage SSRS im Voraus bekannt sein müssen.
  • Dynamisches SQL + OPENROWSET + OleDB . Verwenden Sie DySQL, um das Pivotieren durchzuführen, und exportieren Sie es mit OleDB direkt nach Excel.
  • FOR XML-Abfragen in OpenXML . Die Grundidee: schnelle FOR-XML-Abfragen, möglicherweise ein XSLT, Generieren von OpenXML-Daten und Einstecken in ein einfaches XLSX.
  • ORM oder ADO.NET in ein OpenXML mit einem XmlWriter . Etwas in diese Richtung.
  • BCP direkt in Excel-Dateien . Habe mich damit noch nicht beschäftigt, aber vielleicht wäre es eine Option.
  • SQL-CLR . Ich bin mir nicht sicher, wie das funktionieren würde (wenn überhaupt), aber es könnte hier Optionen geben.

Meine Hauptfrage und mein Fazit lautet: Was würden Sie empfehlen?

Was machst du mit diesen Daten, nachdem sie in Excel sind? Wenn Sie Formulare und Berichte wünschen, ist es vielleicht einfacher, einfach MS Access zu verwenden, um Ihre Ausgabe zu generieren, ohne Excel zu verwenden.
@cybernard Nun, für mich persönlich war es damals (vor 4 Jahren) eine Notlösung für unsere Kunden, um sehr einfache Analysen (hier und da kleine Grafiken), Serienbriefe, Importe in andere Systeme und so weiter durchzuführen. Excel war das Ziel, weil unsere Endbenutzer nur mit Basissoftware (E-Mail, Tabellenkalkulation, Textverarbeitung) vertraut waren und nicht mit MS Access, Tableau, PowerBI (damals noch nicht vorhanden) usw.

Antworten (3)

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.

War wirklich auf der Suche nach Empfehlungen über nur Vorschläge. Haben Sie diesen Ansatz selbst ausprobiert? Wie schlägt es sich mit den Anforderungen, die ich aufgestellt habe? Wann würden Sie "Alternativen" (und welche) gegenüber dem eigentlichen MS Access empfehlen? Was meinen Sie genau mit "Chunks", schlagen Sie vor, dafür eine bestimmte MS Access-Funktion zu verwenden?
@JEBofPonderworthy: Bitte schneiden Sie Ihren Kommentar aus und fügen Sie ihn in den Hauptteil Ihrer Antwort ein, danke! :-)

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.