Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using a shared data source for dynamically generated and deployed reports

I'm dynamically generating RDL files for SSRS 2008, assembling my reports from "building blocks" which I defined as reports on Report Server, and which I use as subreports on my generated report.

On my Report Server, I have a single, shared data source which does work as long as I run stuff directly on the report server.

What I'm trying to accomplish is this:

  • my generated main report should reference that shared data source
  • my subreports contained on the generated main report should also use the same data source
  • after I deploy the report to report server using the webservice interface, I'd like to be able to actually see the report right away

For now, I can generate and validate my RDL just fine, I can deploy it to the report server just fine, too - it shows up and all, great.

But when I try to view the report, I get an error that my data source is invalid or has been removed or something.......

What am I missing?? I am pretty sure I have the right data source - GUID for it and all - and the names do match. How do I tell a generated RDL to use the shared data source already present on the server??

like image 987
marc_s Avatar asked Nov 25 '09 14:11

marc_s


People also ask

What is a shared data source?

A shared data source is a set of data source connection properties that can be referenced by multiple reports, models, and data-driven subscriptions that run on a Reporting Services report server. Shared data sources provide an easy way to manage data source properties that often change over time.

How do I deploy a shared dataset in SSRS?

Right click in the DataSets folder which is located in the right side of report project. And select the SSRS shared dataset. Click the Parameters folder and allow blank values for report parameter. Re-deploy the report project.

When to use a shared data source in reporting services?

When we deploy a report on Reporting Services we have two possibilities regarding the DataSource configuration. Either we choose to use a shared data source or we use an embedded data source in the report. Usually we use a shared data source when we have other reports that use the same connection settings.

What is shared data source in Salesforce?

A shared data source is a set of data source connection properties that can be referenced by multiple reports, models, and data-driven subscriptions that run on a Reporting Services report server.

Should I use a shared data source or embedded data source?

Either we choose to use a shared data source or we use an embedded data source in the report. Usually we use a shared data source when we have other reports that use the same connection settings. If you decide to use a shared data source, the database or server it points to cannot be changed at run time.

How to deploy a project with a shared data source?

The best approach, in my opinion is to deploy a single project with a shared data source pointing to a database that contains a list of servers and an embedded data source we can change dynamically. As I stated in the previous paragraph, the first step is to create a database that will hold the information about our infrastructure.


1 Answers

Answering my own question here, hoping someone else might find this useful:

I was under the (false) impression that the unique "DataSourceID" given to a data source on the server would be sufficient to identify it uniquely.

So in my generated RDL, I had something like :

  <DataSources>
    <DataSource Name="MyDataSource">
      <Transaction>true</Transaction>
      <DataSourceReference>MyDataSource</DataSourceReference>
      <rd:DataSourceID>6ba7c588-e270-4de9-988c-d2af024f10e1</rd:DataSourceID>
      <rd:SecurityType>None</rd:SecurityType>
    </DataSource>
  </DataSources>

Now this worked once, when my data source was indeed called "MyDataSource" and located in the same directory as my report which I published through the RS WebService API.

As soon as I moved the data source elsewhere, it stopped working.

THE SOLUTION:
This may sound silly, but I really didn't "get it" at first: the DataSourceReference needs to have the full and complete "path" on the Reporting Server to that data source I want to reference. Just specifying the unique ID won't do....

So once I changed my RDL to:

  <DataSources>
    <DataSource Name="MyDataSource">
      <Transaction>true</Transaction>
      <DataSourceReference>/MyProject/DataSources/MyDataSource</DataSourceReference>
      <rd:DataSourceID>6ba7c588-e270-4de9-988c-d2af024f10e1</rd:DataSourceID>
      <rd:SecurityType>None</rd:SecurityType>
    </DataSource>
  </DataSources>

(notice the <DataSourceReference>/MyProject/DataSources/MyDataSource</DataSourceReference>)

since that moment it works like a charm.

Hope someone might find this useful some day!

like image 157
marc_s Avatar answered Sep 28 '22 06:09

marc_s