Standards oder Best Practices für die Fehlerbehandlung in SSRS

7

Ich habe ein wiederkehrendes Problem mit SSRS festgestellt, bei dem "schlechte" Berichte an Kunden gesendet werden. Das Problem ist, dass wir Berichte mit einer Reihe von Unterberichten haben und ein oder mehrere Unterberichte nicht verarbeitet werden können. Wenn der Unterbericht nicht verarbeitet werden kann, sendet der Bericht eine Fehlermeldung anstelle des Unterberichts und keine tatsächlichen Daten.

Meine Frage ist, gibt es eine Möglichkeit, das Senden eines Berichts zu verhindern, wenn ein Unterbericht fehlschlägt?

Idealerweise möchte ich, dass der äußere Bericht nur einen Fehler zurückgibt. Gibt es eine Möglichkeit, Fehlerzustände in einem SSRS-Bericht in einen äußeren Bereich zu eskalieren? Gibt es einen Codierungsstandard, den wir durchsetzen können, um dieses Problem zu vermeiden?

Wir verwenden derzeit sowohl SSRS 2008r2 als auch SSRS 2016.

JNK
quelle
4
IIRC: Wenn ein Unterbericht fehlerhaft ist, können Sie weder viel dagegen tun noch wissen Sie es (es wird kein Ereignis ausgelöst). Der Rat, den ich gehört habe, ist, Unterberichte zu vermeiden und den Bericht im Grunde N-mal neu zu schreiben
billinkc

Antworten:

4

Wie billinkc in seinem Kommentar feststellte, gibt es keine Möglichkeit, die Unterberichtsfehler an die Hauptberichte weiterzugeben.

Wie in diesem MSDN-Beitrag gezeigt, können Sie versuchen, datengesteuerte Abonnements zu verwenden, um das Abonnement zu steuern. Dies kann jedoch zu Problemen führen, wenn die Komplexität sehr schnell auftritt.

Wenn Sie sich die SQL Agent-Jobs für einen Server mit SSRS-Abonnements ansehen, sehen Sie eine Reihe von SQL Agent-Jobs mit einer GUID als Namen. Sie können diese Jobs so ändern, dass sie einen zusätzlichen Schritt enthalten, in dem einige Datenüberprüfungsschritte ausgeführt werden, bevor der Bericht tatsächlich ausgeführt wird den Job vor dem Versenden des Berichts (Gefahr, dass Ihre Jobdefinition von SSRS überschrieben wird) oder den Job von einem anderen Job aus aufrufen, nachdem die Datenlogik überprüft wurde.

Mithilfe dieser Abfrage können Sie die dem Bericht zugeordnete GUID identifizieren:

SELECT
            b.name AS JobName
            , e.name
            , e.path
            , d.description
            , a.SubscriptionID
            , laststatus
            , eventtype
            , LastRunTime
            , date_created
            , date_modified
    FROM ReportServer.dbo.ReportSchedule a JOIN msdb.dbo.sysjobs b
          ON a.ScheduleID = b.name
            JOIN ReportServer.dbo.ReportSchedule c
            ON b.name = c.ScheduleID
            JOIN ReportServer.dbo.Subscriptions d
            ON c.SubscriptionID = d.SubscriptionID
            JOIN ReportServer.dbo.Catalog e
            ON d.report_oid = e.itemid
    WHERE e.name = 'Sales_Report'

(von hier genommen )

TL / DR: Es gibt keine saubere Lösung, aber Sie könnten mit einigen Hacks davonkommen. Sie müssten Logik in ein datengesteuertes Abonnement implementieren oder einen zusätzlichen Job erstellen / den generierten Job ändern

PS: Ich habe keinen dieser Ansätze getestet

Tom V - versuchen Sie topanswers.xyz
quelle
1
Nicht das, was ich mir erhofft hatte, aber dennoch eine Antwort. Wenn ich Unterberichte vermeide, würde ein Fehler in einem Abschnitt des Berichts den gesamten Bericht jedoch fehlschlagen lassen?
JNK
@JNK Ein Fehler wahrscheinlich, aber ein leerer Datensatz würde immer noch nicht
Tom V - versuchen topanswers.xyz