报告模型数据

时间:2012-06-06 19:12:37

标签: sql-server-2008 ssrs-2008 data-modeling

我正在研究ssrs 2008 r2,从中我正在使用关系数据库作为源来构建报告模型。 我有许多数据库,它们都具有相同的结构(相同的表和相同的表字段)。 从报告模型的第一眼看,所有实体都是从数据源视图生成的。因此,它不允许将一个报告模型与多个数据库一起使用。 反正有没有为多个数据库使用相同的报告模型? Ps:我的报表模型有很多实体,对于每一个实体,我都要编辑它。所以你可以看到我需要的是自动化这个过程。

1 个答案:

答案 0 :(得分:0)

我很想看到这个问题的答案,因为我对我继承的产品有相同的要求。但是,由于你没有任何其他答案,如果我描述我们的设置,这将有所帮助。

初始部署

在本地,我们有一个 Visual Studio 2008(BIDS)报表模型项目,其中包含一个数据源,以及许多数据源视图和报表模型。每次新数据库联机时,我们都会更改数据源的连接字符串并更新项目的部署配置,以便按照格式/Models/<databaseName>定位不同的报表服务器文件夹。然后使用BIDS部署该模型。频率很低,每两个月只发生一次。如果我们不得不同时设置大量数据库,这将是一个缓慢而痛苦的过程。作为旁注,我们通过配置每个报告文件夹(即<databaseName>文件夹)的安全性来限制对每个已部署模型的访问。

模型更新

由于我们的初始部署是手动的,因此以相同的方式更新模型将非常痛苦。所以我编写了一个工具,利用SSRS提供的Web服务来刷新我们部署的模型。从高层次来看,这是如何运作的;在对BIDS项目中找到的报告模型进行更改后(记住我们只有一个项目,而不是每个部署模型都有一个项目),该工具为每个数据库循环并调用SetModelDefinition Web服务方法传入我们更新的模型文件。我们不会更改数据源,因此报表服务器上的更新模型将继续使用其配置的数据源。同样,这只能起作用,因为每个数据库不会更改数据源名称。

此处参考示例C#代码,该工具对bulk上传模型的作用

// 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登录,并允许他们使用报告生成器进行构建;由于应用于每个数据库文件夹的安全性,它们仅限于数据库......