SSRS: Zeigt die korrekte Ausführungszeit auf einem zwei-seitigen Bericht?
Ich Frage mich nur, wie ich zeigen kann, die die korrekte Ausführung Zeit für einen Bericht?
Bis vor kurzem hatte ich bereits die folgenden in der Fußzeile meiner Berichte als Bezeichnung der Ausdruck:
="Execution Time: " +
IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).TotalSeconds < 1, "0 seconds",
(
IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).Hours > 0, System.DateTime.Now.Subtract(Globals!ExecutionTime).Hours & " hour(s), ", "") +
IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).Minutes > 0, System.DateTime.Now.Subtract(Globals!ExecutionTime).Minutes & " minute(s), ", "") +
IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).Seconds > 0, System.DateTime.Now.Subtract(Globals!ExecutionTime).Seconds & " second(s)", ""))
)
Leider (wie erwartet), immer wenn ich navigieren Sie zu einer zweiten Seite einen Bericht oder ein PDF-export ist dieser Wert neu zu berechnen (also, wenn ich das Rendern des Berichts in 1s, 30s warten und dann als pdf exportieren " die Ausführungszeit anzeigen würde als 31s).
Was ist die beste Methode für die Anzeige von der Ausführung mal ein Bericht ohne die oben genannten Informationen?
Bearbeiten (beantworten, wie ich kann nicht ein post mit <100 Ruf):
Ich habe eigentlich einen anderen Ansatz, denn ich habe nicht bemerkt, alle Antworten hier bis jetzt. Vielleicht nicht so gut wie die oben genannten Antworten aber ich würde sagen, eine einfache Lösung, die umgesetzt werden könnten, wo die Fähigkeit, alternative Lösungen nicht zur Verfügung stehen:
Wie bereits erwähnt, hatte ich folgende:
="Execution Time: " +
IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).TotalSeconds < 1, "0 seconds",
(
IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).Hours > 0, System.DateTime.Now.Subtract(Globals!ExecutionTime).Hours & " hour(s), ", "") +
IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).Minutes > 0, System.DateTime.Now.Subtract(Globals!ExecutionTime).Minutes & " minute(s), ", "") +
IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).Seconds > 0, System.DateTime.Now.Subtract(Globals!ExecutionTime).Seconds & " second(s)", ""))
)
Das problem mit dieser kommt ins Spiel, wenn Sie haben ein zwei-seitiger Bericht oder einen Bericht exportieren in PDF. Wenn Sie einen Bericht generieren, der hat 5s Ausführungszeit und dann 30s warten, um PDF-export dann die execution time in der Fußzeile des exportierten Bericht angezeigt wird, wie 35s. Ebenfalls wenn man auf der ersten Seite einen Bericht, und warten Sie 30s navigieren Sie zur zweiten Seite. Dies ist, weil der Zeitpunkt der Ausführung berechnet, die auf jedem render (neue Seite oder PDF-export) mit System.DateTime.Nun.
Um dies zu vermeiden, die Zeit, die der Bericht generiert wird, muss in einer Variablen gespeichert (von der ich ursprünglich beabsichtigt zu speichern, wird die gesamte Zeichenfolge oben jedoch der Zeitpunkt der Ausführung nicht angezeigt werden, zu einem Bericht verfügbaren Variablen Ausdruck, wie ich bin, vorausgesetzt, Sie sind initialisiert, bevor dieses Finalisiert wurde). Um dies zu tun, zuerst zu gehen Berichts-Eigenschaften, und fügen Sie eine neue variable. Für dieses Beispiel habe ich genannt habe die variable GroupExecutionTime
Fügen Sie den folgenden Ausdruck, um die Variablen in der Reihenfolge initialisiert es mit der aktuellen system-Zeit (die execution time):
=System.DateTime.Now
Nachdem Sie dies getan haben, die wir dann brauchen, um die Fußzeile aktualisieren Beschriftung der Variablen-Wert anstelle des aktuellen system-Zeit (Berichts-Variablen werden nicht neu berechnet, auf jeder Seite neu Rendern oder exportieren, wo Sie als Fußzeile label-Ausdrücke sind).
="Execution Time: " +
IIf(Variables!GroupExecutionTime.Value.Subtract(Globals!ExecutionTime).TotalSeconds < 1, "0 seconds",
(
IIf(Variables!GroupExecutionTime.Value.Subtract(Globals!ExecutionTime).Hours > 0, Variables!GroupExecutionTime.Value.Subtract(Globals!ExecutionTime).Hours & " hour(s), ", "") +
IIf(Variables!GroupExecutionTime.Value.Subtract(Globals!ExecutionTime).Minutes > 0, Variables!GroupExecutionTime.Value.Subtract(Globals!ExecutionTime).Minutes & " minute(s), ", "") +
IIf(Variables!GroupExecutionTime.Value.Subtract(Globals!ExecutionTime).Seconds > 0, Variables!GroupExecutionTime.Value.Subtract(Globals!ExecutionTime).Seconds & " second(s)", ""))
)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe eigentlich einen anderen Ansatz, denn ich habe nicht bemerkt, alle Antworten hier bis jetzt. Vielleicht ist jetzt so gut wie die oben genannten, aber ich würde sagen, eine einfache Lösung, die umgesetzt werden könnten, wo die Fähigkeit, alternative Lösungen nicht zur Verfügung stehen:
Wie bereits erwähnt, hatte ich folgende:
Das problem mit dieser kommt ins Spiel, wenn Sie haben ein zwei-seitiger Bericht oder einen Bericht exportieren in PDF. Wenn Sie einen Bericht generieren, der hat 5s Ausführungszeit und dann 30s warten, um PDF-export dann die execution time in der Fußzeile des exportierten Bericht angezeigt wird, wie 35s. Ebenfalls wenn man auf der ersten Seite einen Bericht, und warten Sie 30s navigieren Sie zur zweiten Seite. Dies ist, weil der Zeitpunkt der Ausführung berechnet, die auf jedem render (neue Seite oder PDF-export) mit System.DateTime.Nun.
Um dies zu vermeiden, die Zeit, die der Bericht generiert wird, muss in einer Variablen gespeichert (von der ich ursprünglich beabsichtigt zu speichern, wird die gesamte Zeichenfolge oben jedoch der Zeitpunkt der Ausführung nicht angezeigt werden, zu einem Bericht verfügbaren Variablen Ausdruck, wie ich bin, vorausgesetzt, Sie sind initialisiert, bevor dieses Finalisiert wurde). Um dies zu tun, zuerst zu gehen Berichts-Eigenschaften, und fügen Sie eine neue variable. Für dieses Beispiel habe ich genannt habe die variable GroupExecutionTime
Fügen Sie den folgenden Ausdruck, um die Variablen in der Reihenfolge initialisiert es mit der aktuellen system-Zeit (die execution time):
Nachdem Sie dies getan haben, die wir dann brauchen, um die Fußzeile aktualisieren Beschriftung der Variablen-Wert anstelle des aktuellen system-Zeit (Berichts-Variablen werden nicht neu berechnet, auf jeder Seite neu Rendern oder exportieren, wo Sie als Fußzeile label-Ausdrücke sind).
IIf
- code in Ihrem Bericht-Eigenschaften, so dass es nicht wiederholt zu werden, in jeder Seite.Ich würde bauen, das mithilfe von benutzerdefinierten code:
Dann in der Fußzeile Textfeld setzen Sie einfach
und Ihre Ausführungszeit berechnen nur einmal für die erste Fußzeile und danach wird wieder das zuvor berechnete Ergebnis.
Ich bin langsam auf dem Weg zu hinzufügen die Ausführungszeit als ein Feld zu berichten' - datasets. Dies ist besonders hilfreich bei der Verwendung von zwischengespeicherten Datensätze: der Zeitpunkt der Ausführung des Berichts nicht wirklich, was der Nutzer will; Sie wollen wissen, Wann die Daten aktuell war.
Können Sie verfolgen Dauer in Millisekunden mit Hilfe folgender:
Der effizienteste Weg, dies zu tun ist, erstellen Sie eine benutzerdefinierte variable enthält den Wert im Speicher und starten Sie es jedes mal in Ihrem Textfeld.
=IIf(System.DateTime.Nun.Subtrahieren(Globals!ExecutionTime)."TotalSeconds < 1, "0 Sekunden",
(
IIf(System.DateTime.Nun.Subtrahieren(Globals!ExecutionTime).Stunden > 0, System.DateTime.Nun.Subtrahieren(Globals!ExecutionTime).Hours & " Stunde(N), ", "") +
IIf(System.DateTime.Nun.Subtrahieren(Globals!ExecutionTime).Minuten > 0, System.DateTime.Nun.Subtrahieren(Globals!ExecutionTime).Minuten & " minute(s), ", "") +
IIf(System.DateTime.Nun.Subtrahieren(Globals!ExecutionTime).Sekunden > 0, System.DateTime.Nun.Subtrahieren(Globals!ExecutionTime).Sekunden & " Sekunde(N)", ""))
)
Könnten Sie versuchen, diese.