My Top 10 RS Wish List

In the spirit of the season, I compiled a list of the top 10 things that I would love Santa to implement in the next release of Reporting Services (although it may look like this won’t happen next year :-). I purposely excluded enhancements to the RS data regions since it should be relatively easily to compile a list of the feature most folks complain about in the public ng. 


  1. Exposing the intrinsic RDL object model to manipulate data regions and items programmatically. It will be great if this works similar to the ASP.NET user controls where controls can be added, changed, or removed at runtime. For example, custom code should be able to reference a table region to add, remove, and bind columns at runtime.
  2. Server-side events, e.g. OnReportRender, OnBodyRender, OnPrint, OnRegionRender, etc.
  3. A supported way to maintain state in custom code.
  4. Exposing the report datasets to custom code to allow programmatic navigation and data retrieval, e.g. looping through the dataset rows.
  5. Decoupling the Report Builder Designer and exposing it as a reusable .NET control which can be embedded in applications. Ideally, a developer should be able to pass the semantic model (or metadata described in a different format) the designer. The output of the WYSWIG manipulation should be returned in the form of RDL.
  6. Enhancing the Report Builder Designer to support custom code and plugging in custom function libraries.
  7. Simplifying CAS security to the three levels supported by SQL Server and SSAS – Safe, External Access, and Unsafe.
  8. Binding server-side reports to ADO.NET datasets.
  9. A conditional page break.
  10. The XML extension should support XML schemas and cast the column types to data types according to the schema.

Please feel free to add to the list and happy holidays!

Applied Microsoft Analysis Services 2005 is shipping

My book Applied Analysis Services 2005 is printed and shipped to the distributor. The paper copy can be purchased from the distributor website. Hopefully, it will make it to retailers (Amazon, B&N, etc.) by the month’s end.


 


Happy data analyzing!

RS 2005 ASP.NET Report Viewer and Custom Assemblies

There was an interesting post on the Reporting Services public newsgroup about an issue with the RS 2005 ASP.NET Report Viewer and custom assemblies. In a nutshell, the issue was that if you want to invoke a custom assembly from the ASP.NET Report Viewer, you need to deploy it to GAC.


Because of a bug in the RTM version, copying custom assemblies to the web app bin folder will not work. This bug will be fixed in a service pack. Currently, for web applications, you have to copy custom assemblies to GAC. This issue doesn’t apply to the WinForm version of the Report Viewer. In the case of WinForms apps, custom assemblies can be in the same directory as the application’s .EXE file; no need to copy to GAC.


An example of how the WinForm version of the Report Viewer can be configured to work with custom assemblies can be found on the Report Viewer home page. This page is maintained and monitored by the Rajeev Karunakaran, a Program Manager for the Report Viewer controls.

Report Builder and SSAS 2005 Known Issues

The RS 2005 Report Builder can automatically create a semantic model from an SSAS 2005 cube so your end users can generate ad hoc reports. However, it turns out that some of the SSAS 2005 features are not supported by design. More information can be found in this KB article.

Configuration error with stylesheets and RS 2005

If you install RS 2005 and the default web site has a web.config file that uses the new ASP.NET 2.0 themes feature, when you attempt to run the Report Manager, you will get:


Theme <theme name> cannot be found in the application or global theme directories


The reason for this error is that the styleSheetTheme element in the root web.config is automatically inherited by the nested web.config files. This error is not RS-specific. It happens with any nested web site because ASP.NET attempts to located that folder and apply it to the nested web site. To fix the error, break the inheritance chain by changing the styleSheeTheme in the nested Report Manager web.config file, as follows:


<pages validateRequest=”false” styleSheetTheme=””/>

Source code available

The source code for my book “Applied Microsoft Analysis Services 2005” is available for download.  It can also be downloaded by clicking on the Source code link found on the book resource page. To get the entire code, download the amas_all_code_in_one.zip fle. Alternatively, to get the code for a given chapter only, download the corresponding zip file.


Happy holidays!

Reporting Services 2005 Tips and Tricks Web Seminar

WindowsITPro invited me to deliver a web seminar about RS 2005. Instead of picking up a particular area and focusing solely on it, this time I will be going for a “tips and tricks” type of session which will cover new ways to do things that were difficult if not impossible to implement with RS 2000. The topics will cover the three phases of the report lifecycle – authoring, management, and delivery. Unfortunately, due to technology constraints, I won’t be able to share my desktop and do live demos. Anyway, I think it is going to be an exciting session. I hope you will be able to make it.  

Reporting off ADO.NET datasets using the RS 2005 XML Extension

In case you missed this little gem, RS 2005 comes with a brand new XML Extension which allows you to report off an XML data returned from an URL-addressable resource, such as an ASP.NET page or a web service. For example, suppose that you have a web method called GetOrders that return the customer orders as a typed dataset (table in my case) and has the following signature:


 


[WebMethod]


public CustomerOrders.SalesOrderHeaderDataTable GetOrders(int customerID)


 


You can create a report from the returned dataset by using the RS 2005 XML dataset extension:




  1. Create a data source that uses the XML extension by selecting XML as the data source type.


  2. Enter the URL address of the web service in the connection string, e.g. #


  3. Once the data source is ready, create a dataset with the following query:

 <Query>


   <Method Namespace=”http://tempuri.org/” Name=”GetOrders”/>


   <SoapAction>http://tempuri.org/GetOrders</SoapAction>


   <ElementPath IgnoreNamespaces=”true”>GetOrdersResponse/GetOrdersResult/diffgram/DocumentElement/SalesOrderHeader</ElementPath>


</Query>


 


Unfortunately, the documentation stays shy about all the parameters supported by the XML extension but it is fairly easy to deduce what’s going on here.


The Method element describes the web method to be called. This is somewhat redundant since the SoapAction element does the same and explained in more details here. The ElementPath describes the full XPATH to the elements to be retrieved and flattened in a two-dimensional resultset. Finally, the IgnoreNamespaces attribute tells the XML extension to ignore any schema namespaces when parsing the XML content.


 


   4. To pass a parameter(s) to the web method, use the Parameters tab and link the report parameter to the query parameter as usual, e.g:


 


Name                          Value


customerID              =Parameters!CustomerID.Value


 


One cautionary note that bit me really bad is that the parameter name is case-sensitive and must much the argument name of the web method verbatim. Thus, if you change the parameter Name to CustomerID, you will find out that the XML extension doesn’t pass the parameter value.


 


Thanks for to the XML Extension, in my cases, reporting off XML data from URL-addressable sources may not require a custom data extension with RS 2005. Happy reporting!

In search for scalability

Just to let you know that I am aware that my website (prologika.com) is dog slo-o-o-w. I can hear my aging web server is praying for mercy from a mile. The good news is that I’ve just ordered a new Dell server. It sure will make a difference. It will take a few days to get and configure the server. I hope I will be able to scale before Thanksgiving.


So please be patient!

My blog address has changed

I have to apologize for the late news. I thought that I can get .Text and Community Server co-existing peacefully on the same machine, so I could post a notice of the blog address change through .Text once I am done installing and switching to the Community Server. Alas, .NET Framework 2.0 and .Text didn’t go along very well… Oops!


 


If you read this, you already know my new blog address but for whatever it is worth, please update your readers accordingly. The next time I will be less excited with upgrades J