E-Mail-Abonnenten in SQL Server Reporting Services

ReportServer-email

Automatisierte Report-Abonnements sind in der Datenanalyse und Berichterstattung unabdingbar, da sie Stakeholder effizient mit den neuesten Erkenntnissen versorgen. Die SQL Server Reporting Services (SSRS) zeichnen sich durch ihre weitreichenden Möglichkeiten aus, Berichte nicht nur zu erstellen und zu verwalten, sondern auch gezielt zu verteilen. Besonders hervorzuheben ist dabei die Option, Berichte automatisch zu erstellen und sie per E-Mail zu versenden, was eine direkte und zeitnahe Kommunikation mit den Abonnenten ermöglicht. Trotz der umfangreichen Reporting- und Analysefunktionen, die SSRS bietet, ergibt sich jedoch eine signifikante Herausforderung: Es fehlt an einer einfachen Möglichkeit, eine übersichtliche Auflistung aller E-Mail-Adressen zu erhalten, die in den Verteilerlisten der automatischen Report-Abonnements geführt werden.

Die Herausforderung: E-Mail-Empfänger in SSRS-Abonnements

Das Anlegen von Abonnements in SSRS ist ein einfacher Prozess, der es Benutzern ermöglicht, spezifische Berichte zu abonnieren, die zu vordefinierten Zeiten automatisch generiert und versendet werden. Diese Abonnements können so konfiguriert werden, dass Berichte an eine Liste von E-Mail-Empfängern gesendet werden, was eine breite Verteilung von Informationen ermöglicht. Allerdings bietet SSRS keine direkte, benutzerfreundliche Methode, um eine umfassende Übersicht über alle E-Mail-Empfänger dieser Abonnements zu erstellen. Diese Einschränkung kann für Administratoren, die die Verteilung von Berichten überwachen und verwalten möchten, besonders problematisch sein.

Die Lösung: Direkte Abfragen der ReportServer-Datenbank

Um dieses Informationsdefizit zu überbrücken, bietet der direkte Zugriff auf die ReportServer-Datenbank eine leistungsfähige Alternative. Durch das Ausführen von SQL-Abfragen direkt auf der Datenbank können Administratoren detaillierte Einblicke in die Abonnements und ihre E-Mail-Empfänger erhalten. Diese Methode erfordert zwar ein gewisses Maß an technischem Know-how und Verständnis der SSRS-Datenbankstruktur, bietet jedoch eine umfassende Lösung für das Problem.

Implementierung: Ein Blick unter die Haube

Die ReportServer-Datenbank speichert alle relevanten Informationen zu Berichten, Abonnements und Benutzerkonfigurationen. Insbesondere die Tabellen Subscriptions, Users, und Catalog enthalten Schlüsselinformationen, die für die Abfrage von Abonnenteninformationen notwendig sind. Eine effektive Abfrage könnte wie folgt aussehen:

USE ReportServer;
Declare @txtEmail nvarchar(100);

set @txtEmail = 'info@onlinedatawarehouse.de';

WITH subscriptionXmL AS (
    SELECT SubscriptionID, OwnerID, Report_OID, Locale, InactiveFlags
        , ExtensionSettings, ExtensionSettingsXML = CONVERT(xml, ExtensionSettings)
        , ModifiedByID, ModifiedDate, [Description], LastStatus
        , EventType, MatchData, LastRunTime, [Parameters]
        , DeliveryExtension, [Version]
    FROM ReportServer.dbo.Subscriptions
)
, SettingsCTE AS (
    SELECT SubscriptionID, ExtensionSettings
        , SettingName = ISNULL(Settings.value('(./*:Name/text())[1]', 'nvarchar(1024)'), 'Value')
        , SettingValue = Settings.value('(./*:Value/text())[1]', 'nvarchar(max)')
    FROM subscriptionXmL
    CROSS APPLY subscriptionXmL.ExtensionSettingsXML.nodes('//*:ParameterValue') Queries(SETTINGS)
)
SELECT DISTINCT
    SubscriptionName = subs.[Description]
    , JobName = sch.ScheduleID
    , ReportName = cat.Name, ReportPath = cat.Path
    , sch.LastRunStatus, LastRun = sch.LastRunTime
    , subs.LastStatus, LastSubRun = subs.LastRunTime
    , subs.OwnerID, u.UserName, subs.SubscriptionID
    , cat.ItemID [CatalogReportID]
	,subs.ModifiedDate, cat.ModifiedDate
FROM SettingsCTE cte
JOIN ReportServer.dbo.Subscriptions subs
    ON subs.SubscriptionID = cte.SubscriptionID
INNER JOIN dbo.ReportSchedule rsch
    ON rsch.SubscriptionID = subs.SubscriptionID
INNER JOIN dbo.Schedule sch
    ON rsch.ScheduleID = sch.ScheduleID
INNER JOIN dbo.[Catalog] cat
    ON rsch.ReportID = cat.ItemID
    AND subs.Report_OID = cat.ItemID
JOIN dbo.Users u
    ON u.UserID = subs.OwnerID
WHERE 1=0
    OR cte.SettingName IN ('TO','CC','BCC') AND cte.SettingValue LIKE '%'+@txtEmail+'%'
ORDER BY sch.LastRunTime DESC, subs.LastRunTime DESC

Diese Abfrage extrahiert Informationen über Abonnements, die E-Mails an Adressen senden, die einem bestimmten Muster entsprechen. Sie nutzt die XML-Datenverarbeitungsfähigkeiten von SQL Server, um die E-Mail-Adressen aus den Einstellungen der Abonnementzustellung zu parsen.

Der direkte Zugriff auf die ReportServer-Datenbank zur Abfrage von E-Mail-Empfängern in SSRS-Abonnements bietet eine leistungsfähige Methode, um detaillierte Informationen über die Verteilung von Berichten zu erhalten. Diese Technik eröffnet Administratoren und Entwicklern tiefere Einblicke in die Nutzung und Verwaltung von Berichtsabonnements, die durch die Standardfunktionalitäten von SSRS allein nicht zugänglich sind. Obwohl dieser Ansatz ein fortgeschrittenes Verständnis der SSRS-Architektur und SQL-Kenntnisse erfordert, ist er ein unverzichtbares Werkzeug für die effiziente Verwaltung und Überwachung von Reporting-Services in einem Unternehmensumfeld.

Wie hat dir der Artikel gefallen?

Vielen Dank für dein Feedback!
About Frank 83 Articles

Ich bin Frank, Data Warehouse und BI-Entwickler mit langjähriger Expertise in diesem Bereich. Ich verfüge über mehr als 20 Jahre Berufserfahrung im DWH Umfeld. Das Analysieren und Interpretieren von Zahlen, Daten und Fakten ist meine große Leidenschaft, aus diesem Grunde ist auch diese Seite hier entstanden.

Be the first to comment

Leave a Reply

Your email address will not be published.


*