2016-07-27 22 views
0

Ich habe einen SSRS-Bericht, der einen Parameter (Country_Name) akzeptiert.Generieren SSRS-Bericht an anderen Speicherort über den Parameter übergeben

Dies ist ein wöchentlicher Bericht und muss automatisch generiert werden, indem der SQL-Agent-Job ausgelöst wird. Daher habe ich ein datengesteuertes Abonnement für diesen Bericht erstellt und ein SSIS-Paket erstellt, um den Bericht vom SQL-Agentenjob zu generieren.

Nun ist das Problem: Da es sich um einen automatisierten Bericht handelt, gibt es keine Schnittstelle zum Übergeben des zu meldenden Parameters. Also habe ich eine Tabelle erstellt, die die Liste der zu übergebenden Parameter und den Pfad zum Platzieren des generierten Berichts enthält.

Tabelle werden zwei Spalten (COUNTRY_NAME & REPORT_PATH) und halten Sie Werte wie (Indien \ AB123C \ Indien) (China, \ ABC \ China) usw.

auf den Parameter Je bestanden Der Speicherort des Berichts ändert sich. Also habe ich in der datengesteuerten Subskriptionsabfrage eine Schleife verwendet, um den Parameter und den Pfad zu erhalten. Obwohl mehrere Parameter und Pfad für diesen jeweiligen Parameter von der Abfrage zurückgegeben werden, wird nur die erste Ergebnismenge ausgewählt und der Bericht nur für den ersten Parameter und seine angegebene Position generiert.

Ich kann die Lösung dafür nicht finden. Bitte finden Sie die folgende Abfrage, die ich für Ihre Referenz verwendet habe. Es wäre großartig, wenn ich dafür eine Lösung finden könnte.

DECLARE @MinCount INT = 1 
    DECLARE @Country VARCHAR(100) 
    DECLARE @Path VARCHAR(MAX) 
    DECLARE @RecordCount INT 
    DECLARE @CurrentDate VARCHAR(10) 
    DECLARE @CountryList Table (ID INT Identity(1,1),Country_Name Varchar(100),Report_path Varchar(max)) 
    SET @RecordCount = (SELECT COUNT(*) FROM Country_List) 
    WHILE (@MinCOunt < = @RecordCount) 
    BEGIN 
    SET @Country = (Select Country_name from Country_List WHere ID = @MinCOunt) 
    SET @Path = (Select Report_Path from Country_List WHere ID = @MinCOunt) 
    SET @CurrentDate = (SELECT CONVERT(char(10), GetDate(),126) as currentSysDate) 
    Delete from @CountryList 
    insert into @CountryList (Country_Name,Report_path) Values (@Country,@Path) 
    select 'Country_Details ' + 
    @CurrentDate as filename 
    ,'Excel' as RenderFormat 
    , (select Name from Master where 
    Reference_Name = 'USER_NAME' 
    ) as sqlUserId 
    ,(select Value from Master where 
    Reference_Name = 'PASSWORD' 
) as sqlPwd , (Select Country_Name from @CountryList) AS Issue_Country, 
(Select Report_path from @CountryList) AS filePath_cfonereports 
SET @MinCOunt = @MinCOunt + 1 
END 
+0

Es ist etwas unklar, basierend auf Ihrer Frage, was das eigentliche Problem ist. Der Code, den Sie angehängt haben, scheint nichts mit dem Problem zu tun zu haben. –

+0

Der obige Code wird in datengesteuerten Abonnements verwendet, die ich für den Bericht erstellt habe. Basierend auf den Werten, die von der SELECT-Anweisung im obigen Code zurückgegeben werden, werden die Werte wie Dateiname, Pfad, RenderFormat, Berichtsserver-Anmeldeinformationen und -Parameter in der Subskription festgelegt, um den Bericht zu generieren. –

+0

Ihre Frage ist noch unklar. Was meinst du mit "Ort des Berichts"? Was verwenden Sie, um Ihre Abonnements zu erstellen? –

Antwort

0

Ich habe dieses Problem jetzt gelöst, indem ich einen anderen Ansatz anstelle der Verwendung von Schleifen im Abonnementcode verwendet habe. Ich habe eine Referenztabelle erstellt, um sie sowohl in der Parameterliste als auch im entsprechenden Pfad zu speichern. Da dieser Bericht aus einem SSIS-Paket aufgerufen wird, habe ich eine Variable verwendet, um die Liste der Parameter aus der Referenztabelle und einen foreach-Schleifencontainer mit Task "SQL ausführen" zu erhalten, um jeweils einen Parameter aus der Variablen zu übergeben und die Subskription aufzurufen. Damit wird der Bericht für diesen übergebenen Parameter und im angegebenen Pfad generiert. Dieser foreach-Schleifencontainer wird basierend auf der Anzahl der Parameter in der Variablen n-mal eine Schleife durchlaufen