2009-05-06 2 views
1

Ich bin wirklich ratlos, wie ich vorgehen soll. Ich habe eine sehr große Datenbank und die Tabelle, auf die ich zugreife, hat ca. 600.000 Datensätze. Auf diese Datenbank wird über eine Buchhaltungsanwendung zugegriffen, die den Bericht mit der SQL-Abfrage versorgt, mit der dieser Bericht auf die Datenbank zugreift.Crystal Reports - sehr große Datenbank, sehr lange Verarbeitungszeit

Mein Bericht verfügt über einen verknüpften Unterbericht mit Einschränkungen, die in den Berichtskopf eingefügt werden. Wenn dieser Bericht ausgeführt wird, beträgt die durchschnittliche Zeit zum Aktualisieren mit einer sehr einfachen Abfrage 36 Minuten. Wenn Sie der Abfrage zwei weitere Elemente hinzufügen, dauert der Bericht 2,5 Stunden. Hier

ist, was ich versucht habe:

  • den Bericht nur Gegenstände gereinigt in absolut notwendig verlassen - keinen Unterschied
  • entfernt die meisten Formeln (Entfernen der restlichen Formeln macht keinen Zeitunterschied)
  • versuchte Bearbeitung der SQL-Abfrage - war nicht erlaubt, weil die Buchhaltungsanwendung
  • versucht, Unterbericht und Hauptbericht - nicht funktioniert
  • andere Gruppierungen - keine Diff Ference
  • entfernt Gruppierungen - keinen Unterschied
  • alle mangels temporären Plattenspeicher der Server überprüft - kein Problem
  • „on demand“ subreport versucht - keine Änderung
  • Parameter geprüft (diskrete vs. Bereich) und ist wie es sein sollte
  • versucht Berst Indizes, Gruppierung auf Server, etc. - kein Unterschied
  • der Bericht erfordert 2 Durchgänge. Ich habe versucht, es erfolglos auf einen Pass zu bringen.

Es muss etwas sein, das ich vermisse.

Es scheint keine anderen Änderungen am Bericht zu geben, die normale Kristallfunktionen verwenden. Gibt es eine Möglichkeit, den Zugriff auf die Daten zu beschleunigen, ohne alle 600.000 Datensätze durchlaufen zu müssen? Die SQL-Abfrage, die auf diese Daten zugreift, ist lang und hat viele Anforderungen. Das kann ich nicht ändern.

Kann ich etwas (Formel?) Hinzufügen, das diese Anforderungen aufhebt? Ich erreiche jetzt ...

+0

seltsam, dass die Anwendung die Abfrage an den Bericht übergibt. Normalerweise würde es die Daten übergeben oder der Bericht hätte die Abfrage. – dotjoe

Antwort

1

Ein paar Dinge, mit denen wir Erfolg hatten, ist das Hinzufügen von Indizes zu den Datenbanken, und anstatt Tabellen in den Bericht zu importieren, haben wir stattdessen eine gespeicherte Prozedur geschrieben, um die gewünschten Ergebnisse zu erhalten.

1

Wenn Indizes und Stored Procedures Sie nicht dorthin bringen, wo Sie sein müssen, haben Sie das Denormalise erreicht, bis es Teil des Lebens mit einer Datenbank funktioniert. Möglicherweise möchten Sie eine MI-Datenbank mit Tabellen erstellen, die für Ihre Berichtsanforderungen optimiert sind. und einige Datenumwandlungsskripts, die die Daten aus der Produktion in Ihre MI-Datenbank extrahieren können. Abhängig davon, was es ist, haben oracle/ms Tools, die Ihnen dabei helfen.

+0

+1 Dies ist eine weitere gute Idee! Und eins haben wir auch gemacht. – mattruma

0

Wissen Sie, was die SQL-Abfrage ist? Wenn dies der Fall ist, können Sie den Bericht außerhalb der Buchhaltungsanwendung verschieben und die Abfrage direkt in den Befehl im Datenbankexperten einfügen. Ich musste dies in einigen Fällen mit einer anderen Anwendung tun, mit der ich arbeite.

1

Wir verwenden Crystal Reports mit einem Abrechnungssystem und wir hatten Abfragen in der Datenbank, die mehr als 1,5 Stunden dauern.Dies berücksichtigt nicht einmal das Rendering/Formatieren der Berichte.

Wir erstellten Materialized Views und zwingen den Client, sie täglich zu aktualisieren. Eine materialisierte Ansicht ist im Grunde genommen eine Datenbankansicht, die den zurückgegebenen Datensatz enthält. Das Dataset wird nicht aktualisiert, es sei denn, Sie weisen es explizit an, es zu aktualisieren.