Sql server 2008 报表模型数据

Sql server 2008 报表模型数据,sql-server-2008,ssrs-2008,data-modeling,Sql Server 2008,Ssrs 2008,Data Modeling,我正在研究ssrs2008r2,从中,我使用关系数据库作为源构建了一个报告模型。 我有很多数据库,它们都有相同的结构、相同的表和相同的表字段。 从报表模型的第一眼来看,所有实体都是从数据源视图生成的。因此,它不允许一个报表模型与多个数据库一起使用。 是否仍然可以对多个数据库使用相同的报告模型? Ps:我的报表模型有很多实体,我必须对每个实体进行编辑。所以你可以看到,我需要的是自动化流程。我很想看到这个问题的答案,因为我对继承的产品有相同的要求。但是,由于您还没有任何其他答案,如果我描述一下我们的

我正在研究ssrs2008r2,从中,我使用关系数据库作为源构建了一个报告模型。 我有很多数据库,它们都有相同的结构、相同的表和相同的表字段。 从报表模型的第一眼来看,所有实体都是从数据源视图生成的。因此,它不允许一个报表模型与多个数据库一起使用。 是否仍然可以对多个数据库使用相同的报告模型?
Ps:我的报表模型有很多实体,我必须对每个实体进行编辑。所以你可以看到,我需要的是自动化流程。

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

初始部署

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

模型更新

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

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

嗨,我很想知道您对我的答案有何看法?