Welcome!

Microsoft Cloud Authors: Yeshim Deniz, Janakiram MSV, Andreas Grabner, Stackify Blog, Liz McMillan

Related Topics: Microsoft Cloud

Microsoft Cloud: Article

Customizing SQL Server Reporting Services with .NET Code

Design and customize reports with Visual Studio .NET integrated Report Designer

With the release of Reporting Services, Microsoft has provided a truly enterprise-level reporting solution. Reporting Services provides support for the entire reporting life cycle including report authoring, report management, and report delivery. This article introduces the process of designing and customizing reports using the Visual Studio .NET integrated Report Designer. Report Designer allows .NET programmers the ability to customize and extend reporting functionality. Custom fields added to a report can include calculations, text manipulation, and expressions. If a report needs to include complex programming logic, programmers can add functions to the report through code blocks embedded into the report definition. To take advantage of the full capabilities of the .NET Framework, reports have the ability to reference external .NET assemblies. By completing the hands-on exercises in this article, you will gain an understanding of how to enhance the functionality of your reports through expressions, code blocks, and external assemblies.

Reporting Services: An Overview
Microsoft Reporting Services is a robust, cost-effective, server-based reporting tool. It consists of a middle-tier server built on top of an SQL Server back end in conjunction with a Web-based front-end running under IIS. Although Report Services relies on SQL Server for its data repository, the report data can come from any data repository that has an OLEDB, ODBC, or .NET managed provider. Microsoft even supports the ability to extend the API to write custom providers. As the product matures, you can expect to see more managed providers released by the major database vendors in the market today.

Reports are designed through a Report Designer that, when installed, integrates with Visual Studio. Using the Report Designer, programmers leverage their knowledge of .NET programming in a familiar design-time environment. Using the Report Designer, you can easily create a variety of complex reports including tabular, matrix, drill-through, and parameter-driven reports. The Report Designer renders the report in a Report Design Language (RDL) format. RDL is an open XML-based schema containing standard tags used to define the data retrieval and report layout information. By creating and storing a report in RDL format, Report Services decouples the creation of the reports from the report rendering. For example, the same RDL document can be rendered as HTML in a Web page link and as a subscription-based PDF e-mail attachment. Out of the box, Report Services supports rendering in many popular formats, such as HTML, MHTML, PDF, and Excel. Developers can also extend the rendering API to include their own rendering formats.

Creating a Report
Once installed, the Report Designer integrates with Visual Studio. A new Business Intelligence Project folder shows up in the New Projects dialog (see Figure 1). There are two options to create a report project. Creating the project using the wizard launches a series of screens that guide you through the common steps necessary for creating a standard report. The other option is to create a blank report project and run through the steps manually.

The following activity demonstrates using the Report Wizard to create a standard report:

1.  Create a new project in Visual Studio. Select the Business Intelligence Project folder, name the project reportDemo1, select the Report Project Wizard template, and click OK.
2.  Click the Next button on the Report Wizard welcome screen. The next screen gathers information to set up a data source for the report (see Figure 2). Data sources can be private to a particular report or shared among several reports. Create a new data source called dspubs by clicking on the Edit button. Enter the appropriate information to create a link to the pubs database in the Data Link Properties window. After testing the connection, close the window and click the Next button on the Report Wizard screen.
3.  The next step is to specify the query to retrieve the data for the report. You can either type in the query string directly or click the Edit button. This launches a familiar query designer interface. Right-click the top portion of the designer to add tables. Add the authors, titleauthor, and the titles tables to the designer. Select the au_lname, au_fname, state, title, type, price, and ytd_sales columns from the tables. Right click on the top section of the designer and choose run to verify the query returns data. Click the OK button in the bottom right corner of the designer to close the window. Click the Next button on the Report Wizard screen.
4.  In the Design the Table window, select the state field for the page level, the type field for the group level, and the remaining fields for the details level (see Figure 3).
5.  Select a tabular report type and click the Next button.
6.  Click the Next button and choose a stepped layout.
7.  Click the Next button and choose a style.
8.  Click the Next button, name the report authorSales, and click the Finish button.

As you can see, creating a basic report using the wizard is quick and painless. After running through the wizard, the designer presents the report in a layout screen that you can use to further refine and customize the report.

Customizing Report Fields
If you are familiar with creating reports using Access or Crystal Reports, customizing fields in the Report Designer should be intuitive. The following activity demonstrates customizing fields using the Report Designer. If you do not already have the demo report project up and running, launch the project in Visual Studio.

1.  There are three tabs at the top of each report open in the report designer: Data, Layout, and Preview. Make sure you are on the Layout tab and right- click on the ytd_sales textbox and select Properties, which launches the Textbox Properties window (see Figure 4).
2.  Change the format to Currency and click the Advanced button in the lower left corner of the window.
3.  As you click through the tabs in the Advanced Textbox Properties window, you will notice that most properties allow you to customize the property using custom code. Click on the Font tab and select the Function button next to the size property. Enter the following Immediate If expression that changes the font based on the ytd_sales amount.

=IIF( Fields!ytd_sales.Value > 5000,"14pt"," 9pt")

4.  Close the Edit Expression and the Advanced Property windows. Click on the Preview tab at the top of the report. Notice that all ytd_sales above 5,000 are rendered in a 14-point font.
5.  Although the Immediate If statement is useful for Boolean test conditions, a Switch expression is useful for testing multiple conditions and works like the Select Case VB statement. To demonstrate the Switch expression click on the Price textbox in the report Layout tab. In the Properties window, click on the Color drop-down and select Expression.
6.  Enter the following Switch expression that changes the color property based on the price:

=Switch( Fields!price.Value > 20,"Blue", Fields!price.Value > 15, "Green", Fields!price.Value > 5, "Red")

7.  Close the Edit Expression window. Click on the Preview tab at the top of the report. You should notice the color of the price changing depending on the amount.

As you can see, adding conditional formatting to a report is easy. The cool part is that you can change almost any formatting property based on a runtime condition. You can also base your condition on any field exposed to the report. For example, see if you can change the color of an author's last name depending on what state he/she lives in.

Adding Functions to a Report
Although conditional formatting is very useful, it is somewhat limited in both scope and functionality. Suppose we want to create custom code for reuse throughout a report. You can include embedded code written in Visual Basic by adding methods to a globally defined code member class. This embedded code is saved in the report definition file and has report level scoping.

The following activity demonstrates creating and consuming embedded code in a report. If you do not already have the demo report project up and running, launch the project in Visual Studio.

1.  Select the Layout tab of the report in the Report Designer window. On the Report menu, choose New Report Properties, which launches the Report Properties dialog box.
2.  Select the Code tab and enter the method shown in Listing 1. Because the Code tab is just a text box, you may want to write the code in a class file and then paste it in the box. This will allow you to take advantage of the Visual Studio code editing features.
3.  Right-click on the state textbox in the Report Layout designer and select Expression to launch the Edit Expression dialog. Enter the following code in the Expression textbox:

=code.FilterEmptyStrings(Fields!state.Value)

4.  Repeat Step 3 for the au_fname textbox passing in the value of the au_fname field.
5.  Update the author table in the pubs database so that some of the records have blank state and au_fname fields.
6.  Preview the report. You should notice the report renders "no value entered" if the state or au_fname fields are blank.

Extending Reports Through External Assemblies
Although adding functions to a report is a great way to extend and customize your reporting solutions, it is still somewhat restrictive. Code reuse is limited to a single report and the full feature set of the .NET framework is not available. To extend code access across multiple reports and take full advantage of the .NET framework, you create an external .NET assembly that the report references.

The following activity demonstrates the process of referencing external assemblies from a report. If you do not already have the demo report project up and running, launch the project in Visual Studio:

1.  Add a Class Library project to the solution named reportHelperLib. Add a class named rptHelper.
2.  In the rptHelper class, add the methods shown in Listing 2. Notice that one is a shared method. This will help to demonstrate the difference between calling shared methods and instance methods from a report.
3.  Build the Class Library project. To create a reference to the reportHelperLib.dll from your report project, open the Report Properties dialog and select the References Tab (see Figure 5). In addition to the assembly, you need to include the class and create an instance name to reference instance methods of the class. You also need to place a copy of the reportHelperLib.dll in the bin folder of the Report Designer folder. This ensures that you can preview the report in the designer. The default location for this folder is: "C:\Program Files\Microsoft SQL Server\80\Tools\Report Designer"
4.  Select the Layout tab of the report in the Report Designer window. Right-click the price column in the table and insert a column to the right. Label the column tax. Select the textbox in the column row and change the name to tax.
5.  Right-click on the tax textbox and select Expression to launch the Edit Expression dialog. Enter the following code in the Expression textbox. Because this is a shared method, the fully qualified name references the assembly:

=reportHelperLib.rptHelper.getTax( Fields!state.Value)

6.  Preview the report. The tax column contains the value returned by the getTax method.
7.  Select the Layout tab of the report in the Report Designer window. Right click on the au_fname textbox in the Report Layout designer and select Expression to launch the Edit Expression dialog. Replace the existing code in the Expression textbox with the following code. Because this is an instance method, we reference it through the class instance variable created in Step 3.

=code.m_rptHelper.FilterEmptyStrings(Fields!au_fname.value)

8.  Preview the report. Notice the report renders "no value entered" if the au_fname field is blank.

Review
With the release of Reporting Services, Microsoft has provided a truly enterprise-level reporting solution. Reporting Services provides support for the entire reporting life cycle, including report authoring, report management, and report delivery. This article has introduced the process of designing and customizing reports using the Visual Studio .NET integrated Report Designer. A future article will explore the issues involved with report management and delivery. It will guide you through the process of publishing, securing, and executing reports.

Full Reporting Life Cycle Support
SQL Server Reporting Services supports the full reporting life cycle, including:

  • Report authoring: Report developers can create reports to be published to the Report Server using Microsoft or third-party design tools that use Report Definition Language (RDL), an XML-based industry standard used to define reports.
  • Report management: Report definitions, folders, and resources are published and managed as a Web service. Managed reports can be executed either on-demand or on a specified schedule, and are cached for consistency and performance.
  • Report delivery: SQL Server Reporting Services supports both on-demand (pull) and event-based (push) delivery of reports. Users can view reports in a Web-based format or in e-mail.

More Stories By Dan Clark

Dan is a Microsoft Certified Trainer, Microsoft Certified Solution Developer, and a Microsoft Certified Database Administrator. For the past seven years he has been developing applications and training others how to develop applications using Microsoft technologies. Dan has been developing and training Microsoft's .NET technologies since the early betas. He has recently authored the book "An Introduction to Object-Oriented Programming with Visual Basic .NET," published by Apress.

Comments (2) View Comments

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


Most Recent Comments
Jensays 12/03/08 11:00:20 AM EST

I'm so glad I found your advice, I was struggling with a conditional font size in a SRS report, whereby I kept getting a syntax error. Thankfully, your article clearly showed me what my error was.

Mike Kissinger 03/24/05 09:45:38 AM EST

Figure 5 is a blurr. Can you send me a clear image?

Mike

@ThingsExpo Stories
SYS-CON Events announced today that DXWorldExpo has been named “Global Sponsor” of SYS-CON's 21st International Cloud Expo, which will take place on Oct 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. Digital Transformation is the key issue driving the global enterprise IT business. Digital Transformation is most prominent among Global 2000 enterprises and government institutions.
SYS-CON Events announced today that Datera, that offers a radically new data management architecture, has been named "Exhibitor" of SYS-CON's 21st International Cloud Expo ®, which will take place on Oct 31 - Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. Datera is transforming the traditional datacenter model through modern cloud simplicity. The technology industry is at another major inflection point. The rise of mobile, the Internet of Things, data storage and Big...
"We provide IoT solutions. We provide the most compatible solutions for many applications. Our solutions are industry agnostic and also protocol agnostic," explained Richard Han, Head of Sales and Marketing and Engineering at Systena America, in this SYS-CON.tv interview at @ThingsExpo, held June 6-8, 2017, at the Javits Center in New York City, NY.
"We've been engaging with a lot of customers including Panasonic, we've been involved with Cisco and now we're working with the U.S. government - the Department of Homeland Security," explained Peter Jung, Chief Product Officer at Pulzze Systems, in this SYS-CON.tv interview at @ThingsExpo, held June 6-8, 2017, at the Javits Center in New York City, NY.
SYS-CON Events announced today that Calligo, an innovative cloud service provider offering mid-sized companies the highest levels of data privacy and security, has been named "Bronze Sponsor" of SYS-CON's 21st International Cloud Expo ®, which will take place on Oct 31 - Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. Calligo offers unparalleled application performance guarantees, commercial flexibility and a personalised support service from its globally located cloud plat...
Internet of @ThingsExpo, taking place October 31 - November 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA, is co-located with 21st Cloud Expo and will feature technical sessions from a rock star conference faculty and the leading industry players in the world. The Internet of Things (IoT) is the most profound change in personal and enterprise IT since the creation of the Worldwide Web more than 20 years ago. All major researchers estimate there will be tens of billions devic...
"The Striim platform is a full end-to-end streaming integration and analytics platform that is middleware that covers a lot of different use cases," explained Steve Wilkes, Founder and CTO at Striim, in this SYS-CON.tv interview at 20th Cloud Expo, held June 6-8, 2017, at the Javits Center in New York City, NY.
"We are focused on SAP running in the clouds, to make this super easy because we believe in the tremendous value of those powerful worlds - SAP and the cloud," explained Frank Stienhans, CTO of Ocean9, Inc., in this SYS-CON.tv interview at 20th Cloud Expo, held June 6-8, 2017, at the Javits Center in New York City, NY.
DX World EXPO, LLC., a Lighthouse Point, Florida-based startup trade show producer and the creator of "DXWorldEXPO® - Digital Transformation Conference & Expo" has announced its executive management team. The team is headed by Levent Selamoglu, who has been named CEO. "Now is the time for a truly global DX event, to bring together the leading minds from the technology world in a conversation about Digital Transformation," he said in making the announcement.
"MobiDev is a Ukraine-based software development company. We do mobile development, and we're specialists in that. But we do full stack software development for entrepreneurs, for emerging companies, and for enterprise ventures," explained Alan Winters, U.S. Head of Business Development at MobiDev, in this SYS-CON.tv interview at 20th Cloud Expo, held June 6-8, 2017, at the Javits Center in New York City, NY.
While the focus and objectives of IoT initiatives are many and diverse, they all share a few common attributes, and one of those is the network. Commonly, that network includes the Internet, over which there isn't any real control for performance and availability. Or is there? The current state of the art for Big Data analytics, as applied to network telemetry, offers new opportunities for improving and assuring operational integrity. In his session at @ThingsExpo, Jim Frey, Vice President of S...
SYS-CON Events announced today that DXWorldExpo has been named “Global Sponsor” of SYS-CON's 21st International Cloud Expo, which will take place on Oct 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. Digital Transformation is the key issue driving the global enterprise IT business. Digital Transformation is most prominent among Global 2000 enterprises and government institutions.
In his opening keynote at 20th Cloud Expo, Michael Maximilien, Research Scientist, Architect, and Engineer at IBM, discussed the full potential of the cloud and social data requires artificial intelligence. By mixing Cloud Foundry and the rich set of Watson services, IBM's Bluemix is the best cloud operating system for enterprises today, providing rapid development and deployment of applications that can take advantage of the rich catalog of Watson services to help drive insights from the vast t...
SYS-CON Events announced today that EnterpriseTech has been named “Media Sponsor” of SYS-CON's 21st International Cloud Expo, which will take place on Oct 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. EnterpriseTech is a professional resource for news and intelligence covering the migration of high-end technologies into the enterprise and business-IT industry, with a special focus on high-tech solutions in new product development, workload management, increased effic...
SYS-CON Events announced today that Massive Networks, that helps your business operate seamlessly with fast, reliable, and secure internet and network solutions, has been named "Exhibitor" of SYS-CON's 21st International Cloud Expo ®, which will take place on Oct 31 - Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. As a premier telecommunications provider, Massive Networks is headquartered out of Louisville, Colorado. With years of experience under their belt, their team of...
SYS-CON Events announced today that Cloud Academy named "Bronze Sponsor" of 21st International Cloud Expo which will take place October 31 - November 2, 2017 at the Santa Clara Convention Center in Santa Clara, CA. Cloud Academy is the industry’s most innovative, vendor-neutral cloud technology training platform. Cloud Academy provides continuous learning solutions for individuals and enterprise teams for Amazon Web Services, Microsoft Azure, Google Cloud Platform, and the most popular cloud com...
SYS-CON Events announced today that Cloudistics, an on-premises cloud computing company, has been named “Bronze Sponsor” of SYS-CON's 21st International Cloud Expo, which will take place on Oct 31 - Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. Cloudistics delivers a complete public cloud experience with composable on-premises infrastructures to medium and large enterprises. Its software-defined technology natively converges network, storage, compute, virtualization, and ...
SYS-CON Events announced today that CHEETAH Training & Innovation will exhibit at SYS-CON's 21st International Cloud Expo®, which will take place on Oct. 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. CHEETAH Training & Innovation is a cloud consulting and IT training firm specializing in improving clients cloud strategies and infrastructures for medium to large companies.
SYS-CON Events announced today that Datanami has been named “Media Sponsor” of SYS-CON's 21st International Cloud Expo, which will take place on Oct 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. Datanami is a communication channel dedicated to providing insight, analysis and up-to-the-minute information about emerging trends and solutions in Big Data. The publication sheds light on all cutting-edge technologies including networking, storage and applications, and thei...
The current age of digital transformation means that IT organizations must adapt their toolset to cover all digital experiences, beyond just the end users’. Today’s businesses can no longer focus solely on the digital interactions they manage with employees or customers; they must now contend with non-traditional factors. Whether it's the power of brand to make or break a company, the need to monitor across all locations 24/7, or the ability to proactively resolve issues, companies must adapt to...