Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

SSRS Expression: How to Handle NULL Values?

Learn how to fix #Error issues in SSRS expressions when handling NULL values and adding line breaks in concatenated fields.
Frustrated developer fixing SSRS expression #Error caused by NULL values using IsNothing and vbCrLf Frustrated developer fixing SSRS expression #Error caused by NULL values using IsNothing and vbCrLf
  • ⚠️ SSRS expressions without NULL checks are a top cause of #Error rendering.
  • 🧠 IsNothing() is the most reliable VB function to check for NULLs in SSRS.
  • 🧾 vbCrLf adds line breaks but needs a check to avoid extra space.
  • 🧑‍💻 Custom VB code in SSRS Reports helps make reports easier to update and read.
  • 📊 Using + instead of & in expressions leads to errors with data types.

When you build reports with SQL Server Reporting Services (SSRS), NULL values are a common problem. They can cause #Error messages in the report output. Or they can make formatting look messy because line breaks are wrong. How to handle NULLs in SSRS expressions is important but sometimes confusing. This guide will show you how to handle SSRS expressions correctly, manage NULLs, and use line breaks. This way, your reports will be right and look good.


1. SSRS and Common Expression Problems

SSRS (SQL Server Reporting Services) is a tool many places use to make reports that change based on data. It lets you show data in many ways. But using SSRS expressions can be hard. This is because they use a syntax like Visual Basic (VB) that often leads to errors if you are not careful.

A main risk is thinking fields will always have data. When they don't, SSRS often shows a #Error. This happens because NULLs are not handled right. You see this often when joining string fields together. But it also happens with logic, adding special looks, or putting in line breaks the wrong way.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

2. The #Error Problem: Why It Happens

The well-known #Error happens for many reasons. But in expressions, it usually comes down to one main thing: trying to do something with NULL values.

Look at this example:

=Fields!Name.Value & vbCrLf & Fields!Address.Value

If Fields!Name.Value is NULL, SSRS treats the whole expression as wrong when it runs. T-SQL treats joining NULL as returning NULL. But SSRS gives you a runtime error in these cases.

What makes it tricky is that fields marked as "Not NULL" in your SQL setup might still show up as NULL in a report. This can happen because of outer joins, missing links between data, problems with grouping, or settings that hide some data.

According to SQLShack (2022), not handling NULL values right is still a main reason for problems when reports are shown in real use.

3. Why Handling NULLs Really Matters

Not handling NULLs well can lead to:

  • Broken looks: lists or text blocks might not look complete.
  • Output that is wrong: missing values might not be seen or are shown the wrong way.
  • Users being confused: people using the report might think data is missing or broken.
  • Taking more time to fix: people who build reports spend time fixing field problems after the report is used.

Handling SSRS NULLs well means fixing things before they break. Making sure your code for joining text checks for missing data makes your report more trustworthy. And it makes making changes later easier.

4. How to Join Strings Together Safely in SSRS

A key part of SSRS NULL handling is the IsNothing() function. This main VB function checks if a value is NULL (which is called Nothing in .NET). When you write expressions, check each value with IIf() using IsNothing.

Simple Field Example

=IIf(IsNothing(Fields!FirstName.Value), "", Fields!FirstName.Value)

Use this idea when you put strings together. It makes sure no NULLs get into your expression logic.

Full Safe Joining

=IIf(IsNothing(Fields!FirstName.Value), "", Fields!FirstName.Value) & " " &
 IIf(IsNothing(Fields!LastName.Value), "", Fields!LastName.Value)

The code above safely puts a full name together. It skips NULLs and empty strings so you don't get #Error.

When you put in many fields with new lines between them, checking for NULLs also keeps spacing right.

5. How to Use vbCrLf Without Breaking Your Report

vbCrLf means a carriage return and line feed. It makes a line break. You use it in SSRS to show text on more than one line.

Problem Without Checks

=Fields!Street.Value & vbCrLf & Fields!City.Value

If either field is NULL, you get #Error.

Right Way Using IsNothing()

=IIf(IsNothing(Fields!Street.Value), "", Fields!Street.Value) & vbCrLf &
 IIf(IsNothing(Fields!City.Value), "", Fields!City.Value)

This makes sure you only include text when it is there. This stops #Error.

Make It Look Better With Trim

=Trim(
    IIf(IsNothing(Fields!Street.Value), "", Fields!Street.Value) & vbCrLf &
    IIf(IsNothing(Fields!City.Value), "", Fields!City.Value)
)

Using Trim() takes away any extra space or line breaks at the end. This often happens when several fields can be NULL.

6. Make a Pattern for Expressions You Can Use Again

Writing IsNothing() checks for every field by hand makes your expressions long. A better way is to make a pattern you can use again. You can change this pattern for different parts of your report.

Example Pattern You Can Use Again

=Trim(
    IIf(IsNothing(Fields!Name.Value), "", Fields!Name.Value) & vbCrLf &
    IIf(IsNothing(Fields!Title.Value), "", Fields!Title.Value) & vbCrLf &
    IIf(IsNothing(Fields!Email.Value), "", Fields!Email.Value)
)

This way creates fields lined up one after another with line breaks. It also handles NULLs. This works well for contact info, addresses, or notes at the bottom.

Tip: You can put this pattern in a Word file or script. Then your team can just copy it and change it. They won't have to figure it out again every time.

7. Don’t Make Reports Slow Just for Looks

Expressions help show your data the right way when the report runs. But logic that is too complex can make the report slow. This is especially true when:

  • Reports get data from many or large sources.
  • You use IIf() statements inside parts that repeat or in tables.
  • You figure out values when the report runs instead of doing it in SQL first.

Tips for Better Performance

  • Use SQL to fix and replace NULLs before the report runs (ISNULL(), COALESCE()).
  • Put formatting code in custom code blocks.
  • Don't write the same IIf(IsNothing()) logic many times – make it reusable.

Expressions that work well mean reports show up faster. And they use less computer memory when many reports are being run.

8. More Help: Add Custom Code for Cleaner Reports

To keep your expressions short and clear, use VB functions. Put them in the Code section. You find this section in Report Properties.

Custom Function for Safe Joining

Function SafeConcat(ParamArray args() As Object) As String
  Dim result As String = ""
  For Each item As Object In args
    If Not IsNothing(item) AndAlso CStr(item) <> "" Then
      If result <> "" Then result &= vbCrLf
      result &= CStr(item)
    End If
  Next
  Return result
End Function

How to Use It in an Expression

=Code.SafeConcat(Fields!Phone.Value, Fields!Fax.Value, Fields!Email.Value)

With this, you can give it any number of items. NULL values are skipped, and line breaks are handled well. This saves time and makes the look the same across the report.

9. Debug Better: Test Expressions Before Using Them

When you debug SSRS Expressions, you need to find where the error is. Here is how:

Smart Ways to Debug

  • Test with fake text: Put in words like “Test” instead of field names. This shows if the problem is the logic or the data.
  • Look at Just That Field: Use a simple text box to show only the value of a field you think might have a problem.
  • Check What Type of Data It Is: Use GetType() to see if a field is Text, Date, or a Number.
  • Use Expression = "Working": This helps check if the problem is with SSRS writing the expression or with the data.

If you test small parts, you can find problems faster.

10. Tips From Devsolus People

Here is advice from people who use Devsolus:

  • 🛑 Never think a field marked “Not NULL” in the database means it will have no NULLs in reports.
  • 🤔 Use IsNothing(). Don't compare straight to Nothing or "".
  • 🧰 Make patterns for joining text that you can use again.
  • 💡 Use vbCrLf only when at least one field has data. Don't add empty lines if all fields are NULL.

Here is code that often fails:

=Fields!Address1.Value & vbCrLf & Fields!Address2.Value

Fixed code:

=Trim(
    IIf(IsNothing(Fields!Address1.Value), "", Fields!Address1.Value) & vbCrLf &
    IIf(IsNothing(Fields!Address2.Value), "", Fields!Address2.Value)
)

11. Don’t Mix Up & vs +

In SSRS expressions:

  • Use & to join strings: it works with IIf() to handle NULLs.
  • Do not use +. It tries to add numbers. It returns NULL if any number is NULL.

Bad:

=Fields!FirstName.Value + Fields!LastName.Value

Good:

=Fields!FirstName.Value & Fields!LastName.Value

Even if you use IIf(), using + might not work how you expect. It can even stop the whole expression from working.

12. Examples of How to Use This

Customer Info Cards

=Trim(
   Code.SafeConcat(Fields!ContactName.Value, Fields!Phone.Value, Fields!Email.Value)
)

Shipping Address Block

=Trim(
   Code.SafeConcat(Fields!Address1.Value, Fields!Address2.Value, Fields!City.Value, Fields!State.Value, Fields!ZipCode.Value)
)

Show Department Based on Data

=IIf(IsNothing(Fields!Department.Value), "N/A", Fields!Department.Value)

If you make your report logic reusable and test it for missing data, these parts that format text will work. They work even if some fields have data and others do not.

13. Final List to Check for SSRS Expressions Without NULL Problems

  • ✅ Use IsNothing() to check if something is NULL in expressions.
  • ✅ Use Trim() around text blocks to make the formatting clean.
  • ✅ Use vbCrLf only when you need line breaks.
  • ✅ Use & for text, never +.
  • ✅ Make SQL better for cases where you know there might be NULLs.
  • ✅ Use custom code blocks to reuse expressions and make reports easier to update.
  • ✅ Test each complex expression on its own in the preview mode.

14. Your SSRS Expression Quick Guide

Join Two Fields With a Line Break

=IIf(IsNothing(Fields!Phone.Value), "", Fields!Phone.Value) & vbCrLf &
 IIf(IsNothing(Fields!Fax.Value), "", Fields!Fax.Value)

Show “N/A” If Data Is Missing

=IIf(IsNothing(Fields!Department.Value), "N/A", Fields!Department.Value)

Safe Joining Using Custom Code

=Code.SafeConcat(Fields!Email.Value, Fields!LinkedIn.Value, Fields!Website.Value)

Trim + Format for Address Block

=Trim(
    Code.SafeConcat(Fields!Address1.Value, Fields!Address2.Value, Fields!City.Value, Fields!State.Value, Fields!ZipCode.Value)
)

Using these tips will help you get rid of #Errors. Your reports will handle NULLs correctly. And your line breaks will look better.


Citations

Microsoft Docs. (n.d.). Create and customize expressions in paginated reports (Report Builder). Retrieved from https://learn.microsoft.com

SQLShack. (2022). Understanding SSRS expression and how to use them. Retrieved from https://www.sqlshack.com

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading