SSRS – Embedded Custom Code

When developing reports in Reporting Services you will often use the built-in expression language to make report data and formatting dynamic.  The expression language can do a lot to within Reporting Services but any gaps in functionality that it has can be filled with custom code. 

There are two ways to implement custom code in Reporting Services.  The first way, which I will show in the post, is with embedded code.  The other method is to create an external assembly that can be imported into a report.  I will discuss this method in a future post.

Embedded code requires that you use VB but you do not have to go through the process of creating an assembly in Visual Studio like you would with the external assembly method.  Let’s go through the process of creating a report using embedded custom code and discuss some of the other benefits and disadvantages of this approach.

Here’s a basic report that I’ve developed with a list of employees and phone numbers.

image

What I’d like to do is format all the phone numbers to look like this (###)###-####.  This could easily be accomplished with some custom code.  To add custom code in Reporting Services select the Report->Report Properties menu.

image

Go to the Code page and use the following code to apply the phone number formatting:

Function PhoneFormat(PhoneNumber As String) As String
    Select Case PhoneNumber.Length
    Case 7
        Return PhoneNumber.Substring(0,3) & "-" & PhoneNumber.Substring(3,4)
    Case 10
    Return "(" & PhoneNumber.Substring(0,3) &")" & PhoneNumber.Substring(3,3)&"-" & PhoneNumber.Substring(6,4)
    Case 12
    Return "(" & PhoneNumber.Substring(0,3) &")" & PhoneNumber.Substring(4,3)&"-" & PhoneNumber.Substring(8,4)
    Case Else
    Return PhoneNumber
    End Select
End Function

image

Click OK once this code has been entered.  This code reads in different variations of phone numbers that could be provided and converts it to the appropriate format.  We can now use this code in our report.  I can replace the current column that stores the phone number data with an expression that calls this custom code to correct that data presented in the report.  That expression would look like this:

=Code.PhoneFormat(Fields!Phone.Value)

image

When you preview this report now the data will look like this (I’ve kept the original column so you can tell the difference):

image

This is a basic example but shows how powerful custom code can be.  Now there are a few things I should point out about this embedded code example that are not ideal.  Some embedded code disadvantages are:

  • You must use Visual Basic (no C#)
  • No Intellisense in the code window like you experience in Visual Studio
  • Code errors are not visible until you actually preview the report

While embedded code is powerful you will find external assemblies have even more benefits.  My next post will walk you through the process of creating a custom assembly and using it in Reporting Services. 

A real quick plug for a new class I will be teaching this month.  Pragmatic Works will start offering in January a new Reporting Services Masters class for those of you that feel experienced with the basics of SSRS.  The Masters class will assume you know all the basics of building reports and will focus on advanced topics only.  Check out the class outline and register for the class now here:

http://pragmaticworks.com/Services/training/Course/Pragmatic-Master-SSRS-2008.aspx

About these ads

3 Responses

  1. [...] a previous post I wrote about how you can use embedded custom code to extend the capabilities of Reporting [...]

  2. Nice and straightforward. Useful tip. Thanks much!

  3. HI Devin,

    for suppose, I have a situation where I am dividing 2 fields from the dataset. and i should avoid divide by zero. for which I have used 2 approaches.

    1.written a custom code as below

    Public Function getresult(denominator As Double, numerator as Double) As double
    If denominator=0 Then
    Return 0
    Else
    Return numerator/denominator
    End If

    End Function

    and added caluculated field having expression
    =Code.getresult(Fields!numerator.Value,Fields!denominator.Value)

    2 added a calculated field having expression
    =iif(Fields!denominator.Value=0,0,Fields!numerator.Value/Fields!denominator.Value)

    In this two scenario’s which is the optimized approach.(considering large data/ production server).

    will vbcode impacts the performance of the report.

    Thanks

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 29 other followers

%d bloggers like this: