I know that there is Sql Server Reporting Services uses caching. But, I would like to now if it caches the report before clicking the View Report button i.e. does it already cache the data for the report by merely changing the values of the dropdown Report Parameters. Here is the scenario:
I call stored procedures to get the labels and values of the dropdown report parameters aside form the main report itself.
My dropdown is cascading i.e. There are three dropdown lists (from top to bottom) say Dropdown A, B and C. The labels and values of Dropdown C are dependent on Dropdown B. Dropdown B is dependent on Dropdown A.
I use SQL Server 2005 version as Report Server, tables and stored procedures. If its an exclusive feature of 2008, I would be glad to know, but please indicate the version you are explaining.
Any relevant information is appreciated. Thank you in advance for your time and expertise.
A report is cached with combination of parameters -- different parameter combinations result in different cache instances of the report.
Caching happens the "first time" a report is generated, after the previous version expired.
If you want to pre-load the cache to speed-up "the first delivery", use the Null Provider for the method of delivery in a data-driven subscription.
To address your problem -- does changing a drop-down box re-run a report? On my server I have to click the [View Report] button to start generating the report -- the report is not cached until you see "Report is being generated" message.
Related
I am developing a reporting application where a user can select(and order) reports from a list of 100 reports and ask for a master report. This master report will contain all the selected reports in the exact order and with a table of contents listing the reports included in the master report. The reports available for the user to select (which could be 100s) are stored in the database.
My questions are :-
To generate the master report with the user selected reports, the only solution I can see is using the Reporting Engine API to generate a dynamic report into which I have to add the user selected reports as subreports. Is this the right and easiest way to approach this problem? Does anyone have samples of the Reporting Engine API usage especially to inject subreports in a Master report?
Since I am storing the reports in the db(blobs), I am trying to find a way to generate my sub reports with an inputstream rather than a URL as specified in ResourceManager.createDirectly(url, MasterReport.class), but haven't been successful till now. How can I generate reports from definitions stored in the database? There should be some resource abstraction.
Read your reports into a byte-array and then use the ResourceManager.createDirectly method as usual. That will solve your problem of parsing the reports.
You can parse them directly into SubReports by using
ResourceManager.createDirectly(bytes, SubReport.class)
These subreports can then be added to your master report as banded subreports. if you want your selected reports to start on a new page, make sure you set the "pagebreak-before" style on your subreport's report-header.
There is a resource abstraction: It is called "LibLoader" and you can create your own ResourceLoaders that deal with the problem of getting your data out of your database as raw-streams so that the ResourceFactory implementations can interpret/parse the raw-data.
But every database is designed differently and thus you as the system integrator have to write the glue code for it. We only can offer the interfaces.
I'm having this problem:
The SQL Server holds a said value, let's say 990.30, the Reporting Services Report show a different value (948.33) when viewed online, in the brower and a third value (912.22) when the report is exported to Excel.
There are no formulas on Excel, just plain values.
Also, there's no formula on the layout of the report.
The code shows only a simple select that, when run on the SQL Server Management Studio, returns me the original value (990.30).
How on earth shall I start to troubleshoot this ?
I've never heard of this kind of problem before. I would recommend submitting a ticket to Microsoft and provide them with screen shots of the errors, the RDL file, a sample output of the stored procedure, etc.
To troubleshoot this on your own, I would recommend creating a new report that just has a simple table that returns all the details from your stored procedure or query to validate the values are consisten across all interfaces. From there, just start adding on complexity until you get the report to look like it is today.
I've got an .rpt file that I did not write and can find no documentation about. I want to be able to review the SQL that is generated from this report so that I can figure out, well, what data it was pulling and what WHERE clause parameters were used.
I can open it up and see the report layout. But when I select Database|Show SQL Query... the report tries to connect to the data source. The problem is, the data source being used is unknown to me, probably an ODBC connection used by whoever wrote the query. All I can do at that stage is 'Cancel' and I'm back to looking at the report designer.
Am I missing something? Can I get to the SQL query without connecting to the datasource? It seems like viewing the selection criteria shouldn't be dependent on a data connection.
Thanks.
version: Crystal Reports 2008
I know that this is an old thread, but I encountered this same problem. Effectively we used to have a database/application that has since been aquired by an external agency.
Although they now have the database/application they don't have access to crystal reports, so we can't just send them the old report that we used to run. Likewise we can't run it as we don't even have the database set up anywhere.... So instead our plan was just to extract the SQL code generated by the report and forward that on.
We experienced the same problem, but the solution is actually pretty simple.
If you don't have access to the original data source, just create a new 'blank' datasource (such as an ODBC connection). As long as the connection to the datasource works (i.e. it is some kind of valid datasource this it works fine). When running the 'Show SQL' option point the report to this datasource. As long as you don't try to actually run the report (and only show the SQL) the operation wont fail. This worked for our situation anyway. (Crystal Reports 2008)
(I can give more details if it helps in any way.)
It should be possible to find out some details about the existing datasource, by selecting Database > Set Datasource Location... .
As well as enabling you to change the datasource location, this should show you some information about the current datasource, such as which type of datasource is being used, and possibly (dependant on the type of driver) the name of the database. It is likely to be less helpful if (as you surmise) the datasource is ODBC, but if it uses a native driver there may be something useful.
Without the password, I'm not sure how much you can do. It seems "Show SQL Query" requires to report to run first, then generate the SQL plan.
It's not ideal, but you could go to Database > Visual Linking Expert to at least see the tables and how they are joined, and the go to the Record Selection Formula Editor and see what the custom WHERE statements are.
Viewing the SQL of a Command in a Crystal Report File
There are times you have just the report file, but not the associated database structure that the report uses.
This is common when dealing with example reports of functionality you wish to mimic.
This is a workaround ONLY to allow you to see the SQL of a Command that a Crystal Report is based on, when you don't have the underlying database connection that the report is based on.
In essence, the dialog box has to be satisfied before it will show the SQL, so we fool it with a legitimate Data Source, just not one that would work with the SQL that is actually in the SQL Command.
Why does a report use a command? Doesn't Crystal Reports have the ability to link tables?
When a Crystal Report is based on a record set that is too complex for the table linking functionality within Crystal Reports, the report can instead be based on a SQL Query, usually developed/tested in another editor tool and pasted into the command. This allows advanced SQL functions to be utilized.
If you don't already have a Data Source on your computer set up that you can connect to, you will need to build one first.
A simple Microsoft Access .mdb file saved in a simple location will suffice.
I placed mine with the path C:\A_test\test.mdb to make it easy to find.
If you don't have one, google for a sample mdb file and download it, saving it with a name and location you can remember. (You won't ever actually open this file, but just connect to it.)
Once you have the file saved, open the ODBC Administrator and create a New Data Source.
(you can get to the ODBC Administrator quickly from Start > type ODBC in the Search)
On the User DSN tab, click the Add button.
Scroll down the driver list to Microsoft Access Driver (*.mdb), select it and click the Finish button.
In the Data Source Name box, type a name (I used MyTest).
Click the Select Button and select the mdb file you saved from a previous step, click OK.
Click OK again. You will see your new Data Source listed by the name you gave it. Click OK.
You now have the data source you will need for the next steps.
Open the Crystal Report you want to see the SQL command for, and click on Database Expert button or Database>Database Expert Menu.
Under Selected Tables, right click on the Command and choose View Command
The Data Source Selection Box appears. Select the Data Source you created (or one you already use) and click the Finish button. The View Command box should open with the SQL in the left pane. Copy the SQL into your favorite text editor.
Whats happening is that the crystal reports needs a database to connect to regardless if its the original source DB or not.
Create a local database or use a database stored on a server, added it to your ODBC Datasources and use it when connecting. After a successful connection you should be able to view the SQL query without an error.
Does anyone have a recommendation for an excellent reference on Microsoft's ReportViewer (VS 2008 flavour) when used in local mode? I'm currently using it but parts of it are a bit of a black box so I'd like to read up on the entire subject.
Especially want to start using sub-reports to display more complex parent-child reports. I'm assuming they work in a similar mode to Crystal Reports with which I'm reasonably familar.
Thanks, Rob.
The link to http://www.gotreportviewer.com is a good once but it does look like material on local sub reports and ReportViewer 2008 is a little sparse and spreadout across the net. It would be a subject worth blogging about so I will :-)
Here are a few headlines:
A subreport is a completely separate report but is linked to the master report using the standard report parameter mechanism. The master report is configured to pass one or more of it's fields (e.g. the primary key) to the subreport. The subreport typically then uses this parameter as a parameter to it's own query to load a dataset
Even though you may have defined a data source against the subreport when designing it, this isn't used when used in a master report. Instead you have to implement a handler for the SubreportProcessing event. The same handler is called for each subreport you add to your master report so you can query the parameters passed to the handler to determine the dataset to load.
The event handler is called once for each record in master report. For example, if the master report displays 200 records, the event handler is called 200 times but with a different parameter each time.
Because of this, you have to be wary of performance. The first report I ran had 2,000 records (perfectly okay for a flat report) but each of those 2,000 records fetched 20 child records for the subreport. It did run but took several minutes before the report was rendered
If you can structure your data so that a single dataset can be used containing data for both the master and subreport, then nested data regions have better performance - only one query to return 2,000 records not 2,000 individual queries. See http://www.gotreportviewer.com/masterdetail/index.html
Cheers, Rob.
I worked with the ReportViewer control at one point and was able to find some good information at http://www.gotreportviewer.com
Was the documentation insufficient? In what way?
Reporting Services and ReportViewer Controls in Visual Studio
Samples and Walkthroughs
ReportViewer Controls (Visual Studio)
I have created a number of SSRS 2005 reports, and provided a number of parameters for each. Each of the parameters have default values, and therefore the report automatically renders when someone visits the report through the SSRS web site.
What I'd like to do is have all the reports have their default values, but prevent the report from automatically rendering. I've looked online, and I haven't seen anything aside from people claiming that it cannot be done. I'm hoping to see some expert advice on this one for a method of preventing the reports from automatically rendering without having to develop a custom web interface.
Any thoughts?
Does anyone know if this behavior is different in SSRS 2008?
Oddly enough, I had this exact same problem on one of my reports. You must have at least one parameter that is not bound to a default value in order to achieve this effect, otherwise it is impossible as you suggested.
Proof:
http://groups.google.com/group/microsoft.public.sqlserver.reportingsvcs/browse_thread/thread/d9669fb82ecb18f0/87ed0eb0996d62bf?lnk=st&q=%22reporting+services%22+auto+load&rnum=4&hl=en&pli=1
The only solution I've come across is to have a single parameter that doesn't automatically have it's default value selected. The user only has to select one value and run the report. I prefer to make this the first parameter so it is consistant for each report, and anything beyond that is custom selections.
Prevent Auto-Run for SSRS 2008 R2 using a visible Text parameter:
Create parameter with: DateType=Text, "Allow Blank"=True, "Allow Null"=False, "Visibility"=True, "Available Values"=None, "Default Value"=No default value.