2012-06-06 54 views
1

我正在研究ssrs 2008 r2並從中,我正在使用關係數據庫構建一個報告模型作爲源。 我有很多數據庫,他們都有相同的結構(相同的表和相同的表字段)。從第一次查看報表模型開始,所有實體都是從數據源視圖生成的。因此,它不允許將一個報告模型用於多個數據庫。 反正有多個數據庫使用相同的報表模型嗎? Ps:我的報告模型有很多實體,每個實體都必須進行編輯。因此,您可以看到我需要的是自動化該過程。報告模型數據

+0

嗨我很想知道你對我的答案有什麼想法嗎? –

回答

0

我很想看到這個問題的答案,因爲我對繼承的產品有相同的要求。但是既然你還沒有任何其他答案,或許這將有助於描述我們的設置。

初始部署

本地來講,我們一個的Visual Studio 2008(BIDS)報表模型項目包含一個數據源,以及一些數據源視圖和報表模型。每次新數據庫聯機時,我們都會更改數據源的連接字符串,並更新項目的部署配置,以便以/Models/<databaseName>的格式定位到不同的報表服務器文件夾。然後使用BIDS部署該模型。這個頻率很低,每隔幾個月纔會發生一次。如果我們必須同時設置大量數據庫,這將是一個緩慢而痛苦的過程。作爲附註,我們通過配置每個報告文件夾(即<databaseName>文件夾)的安全性來限制對每個已部署模型的訪問權限。

模型更新

因爲我們最初的部署是手動的,更新的相同方式模型將是非常痛苦的。所以我編寫了一個工具,它利用SSRS提供的Web服務來刷新我們部署的模型。在高層次,這是如何工作的;在對BIDS項目中發現的報告模型進行更改(記住,我們只有一個項目,而不是每個已部署模型的項目)後,該工具將循環使用每個數據庫,並調用傳遞已更新模型文件的網絡服務方法SetModelDefinition。我們不更改數據源,因此報表服務器上的更新模型將繼續使用其配置的數據源。再次,這僅適用於數據源名稱不會更改每個數據庫。

僅供參考這裏的工具確實給bulk上傳模型什麼例如C#代碼

// prepare the model for upload 

string pathToSmdlFile = "c:\ReportModel.smdl"; 
string pathToDataSourceViewFile = "c:\ReportModel.dsv"; 

string semanticModel = System.IO.File.ReadAllText(pathToSmdlFile); 
string dataSourceView = System.IO.File.ReadAllText(pathToDataSourceViewFile); 

// combine the semanticModel and dataSourceView, BIDS does when you use the `deploy` action 
// because we're doing this in code we have to combine 
byte[] model = Encoding.UTF8.GetBytes(semanticModel.Replace("</SemanticModel>", dataSourceView + "\n</SemanticModel>")); 

// upload model using web service 

using (var rs = new ReportingService2005WS.ReportingService2005()) 
{ 
    rs.Url = "http://yourserver/ReportServer/ReportService2005.asmx"; 
    rs.Credentials = new System.Net.NetworkCredential("admin", "password"); 

    foreach (string databaseName in GetDatabaseNames()) 
    { 
     string fullpath = string.Format("/Models/{0}/ReportModel", databaseName); 

     rs.SetModelDefinition(fullpath, model); 
    } 
} 

我並不是說這是一個完美的設置 - 其實,我覺得我應該可以上傳報表模型一次,並且在使用該報告的時間點改變了數據源。也許可以根據所使用的SSRS登錄配置不同數據源的使用。如果報告本身不能通過正確的數據源的細節來使用(或連接字符串)。另一方面,這意味着我們的用戶不必知道連接到數據庫的細節。我們只是給他們SSRS登錄,並允許他們與報告生成器一起構建;由於安全性適用於每個數據庫文件夾,他們被限制在那裏數據庫...