2010-07-27 10 views
6

Ho un singolo server che ospita i nostri database di produzione e sviluppo. È in esecuzione SQL Server 2008 (non R2) con SQL Server Reporting Services.È possibile specificare l'origine dati durante l'esecuzione di un report SSRS tramite il servizio web?

Distribuisco un progetto di Reporting Services VS 2008 al server per fornire i report. Tutti i report utilizzano un'unica origine dati condivisa, che attualmente punta al database di produzione.

Un servizio in background crea in altro modo report PDF tramite l'interfaccia del servizio Web su SSRS.

La mia domanda è, dato questo ambiente, è possibile modificare in modo programmatico l'origine dati da utilizzare durante l'esecuzione tramite il servizio Web in modo che il database di sviluppo o di produzione sia utilizzato da un report?

Non voglio modificare l'origine dati condivisa o la definizione del report, voglio solo essere in grado di impostare il nome del database prima di eseguire il report e non riesco a vedere come ciò sia possibile.

L'unica soluzione "semplice" che posso vedere è installare un'altra istanza del server di report, che sembra eccessivo per quello che voglio. Sto per farlo, a meno che qualcuno non abbia una risposta furba per me!

risposta

8

Sì provare questo:

  1. Creare due parametri del report "Server" e "Database" (probabilmente si dovrebbe creare un valore predefinito in modo che il rapporto verrà eseguito per impostazione predefinita)
  2. definire i dati fonte come espressione in questo modo:

    = "Data Source =" & Parametri Server.Value & "; catalogo iniziale =" & Parametri Database.Value

  3. !!

Ora si dovrebbe essere in grado di specificare in modo dinamico il database e il server in fase di esecuzione

Tenete a mente, che la definizione del set di dati di fondo deve essere valido in ogni db server e si esegue la relazione.

È anche possibile passare i parametri tramite una stringa URL in questo modo:

http://server/reportserver?/dir/Report&rs:Command=Render&Server=VALUE1&Database=VALUE2 

Tenete a mente che queste devono essere URL codificato e ricordarsi di passare il valore, e non l'etichetta se sono diversi .

4

Modifica - un altro suggerimento

Avere l'origine dati in Visual Studio punto al database di sviluppo. Avere il punto di origine dati distribuito nel database di produzione. Impostare l'origine dati per non sovrascrivere origini dati esistenti sulla distribuzione. Ciò significa che tutto lo sviluppo in VS sarà contro il database di sviluppo ma quando si distribuisce il report, utilizzerà l'origine dati precedentemente distribuita che punta al database di produzione.

suggerimento originale

Abbiamo un problema simile - abbiamo una serie di rapporti che hanno bisogno di essere in grado di funzionare su qualsiasi delle nostre banche dati per gli esercizi storici in modo che l'utente deve essere in grado di selezionare quali database per eseguire il report per.

La forza di Reporting Services è che tutto è un'espressione e l'SQL per il set di dati non è diverso. Quello che facciamo è modificare l'SQL per utilizzare il database come selezionato dall'utente.

è impostato come segue: su SQL Server in un database comune creiamo una tabella denominata DatabaseLookup che ha i campi DatabaseLabel (il nome visualizzato) e DatabaseName (il nome effettivo del database) più un INT SortOrder così possiamo ordinare i database in modo sequenziale all'indietro mentre ne creiamo uno nuovo. In Reporting Services creiamo un DataSource che punta al nostro database comune e un nuovo set di dati denominato database che utilizza tale origine dati:

SELECT DatabaseLabel, DatabaseName 
FROM DatabaseLookup 
ORDER BY SortOrder 

un parametro è impostato chiamato database che utilizza il set di dati Basi di dati con il campo Valore = DatabaseName e Etichetta campo = DatabaseLabel e il valore predefinito non interrogato per essere il nostro database corrente.

Ora modifichiamo l'SQL per la nostra tabella principale del rapporto in un'espressione.Diciamo che il nostro SQL assomiglia a questo:

SELECT SomeField, OtherField 
FROM SomeTable 

Noi trasformarla in un'espressione calcolata, in questo modo:

="SELECT SomeField, OtherField " 
&"FROM " & Parameters!Database.Value & ".dbo.SomeTable " 

L'etichetta del database selezionato è anche incluso nell'intestazione in un piccolo font in modo le persone sanno quali dati stanno guardando.

Quando arriva un nuovo anno finanziario, aggiungiamo semplicemente una nuova riga alla nostra tabella DatabaseLookup e ogni rapporto nel nostro sistema può ora utilizzare quel nuovo database.

+0

Grazie Chris, è utile sapere che altre persone hanno lo stesso problema e la soluzione è buona. Ho uno scenario leggermente diverso, penso che la maggior parte dei miei utenti non sia a conoscenza di qualcosa di diverso dall'ambiente di produzione, quindi penso che al momento stia ancora tendendo verso un'altra istanza di SSRS. Saluti, Chris. – Chris

+0

È possibile impostare facilmente il parametro sul database di produzione e nasconderlo sulla distribuzione nel server di report. In alternativa, puoi inviare i tuoi rapporti al database di sviluppo e tutti gli altri alla produzione, facendo in modo che la query abbia la seconda riga e "FROM" e IIF (User! UserID = "Chris", "Sviluppo", "Produzione") & ".dbo.SomeTable" –

+0

Grazie ancora per la risposta.Ri: l'altro suggerimento, questo funzionerebbe eccetto che ho bisogno sia dei miei sistemi di produzione che di sviluppo per generare report. Ho una soluzione che non sono felice con la quale pubblicherò ora :) – Chris

0

La mia risposta attuale (che non mi soddisfa) è di avere 2 progetti VS 2008 contenenti report. Uno per i rapporti di sviluppo e uno per la produzione. Ciascuno utilizza un'origine dati diversa e viene distribuito nella stessa istanza SSRS in/Reports/Development e/Reports/Production.

I report vengono sviluppati/modificati nel progetto Dev e quindi copiati in Produzione e il nome dell'origine dati viene modificato una volta pronto.

Odio questa soluzione, ma non riesco a modificare l'origine dati durante l'esecuzione tramite il servizio Web e come effetto collaterale mi consente di inserire i rapporti, durante l'implementazione, in diverse cartelle che non è possibile un progetto VS.

Ancora non considero questa risposta, 0 punti per il mio bodge! :)

Problemi correlati