Saturday, October 3, 2015

Allow NULL value in Multi Value Report Parameter in SQL Server Reporting Services

Your SQL Server Reporting Services (SSRS) report has a multi value parameter, but it doesn't show NULL in the parameter drop down along with the other parameter values. In SSRS a multi-value parameter cannot include a NULLvalue, so users can't filter the data for NULL values. Your requirements state a need to be able to filter the data forNULL values, so in this tip I will demonstrate how to allow NULL values in a multi value SSRS report parameter.


Problem
Your SQL Server Reporting Services (SSRS) report has a multi value parameter, but it doesn't show NULL in the parameter drop down along with the other parameter values. In SSRS a multi-value parameter cannot include a NULLvalue, so users can't filter the data for NULL values. Your requirements state a need to be able to filter the data forNULL values, so in this tip I will demonstrate how to allow NULL values in a multi value SSRS report parameter.
Solution
This tip assumes that you have previous real time work experience building a simple SQL Server Reporting Services (SSRS) report with parameters.
I have prepared this tip in such a way that a beginner SSRS Developer can also understand the problem and implement the solution. In this tip we will first look at the problem with a simple example and later I will demonstrate the solution. I will use AdventureworksDW2008R2 sample database for SQL Server and SQL Server 2012 Reporting Services.

Let's understand the problem with a simple example

I have already created a data source connection to the AdventureworksDW2008R2 sample database. Let's create the below two datasets for the sample report.
ReportDataset: This dataset will be used for the report body.
SELECT     ProductKey, EnglishProductName, Size
FROM       DimProduct
WHERE      Size IN (@ProductSize)
ORDER BY   ProductKey
SizeDataset: This dataset will be used to get a list of values for the ProductSize report parameter. This dataset will return one NULL value. You can verify it.
SELECT     Distinct Size
FROM       DimProduct
ORDER BY   Size
ReportDataset has one query parameter named @ProductSize, so SSRS will automatically create one report parameter name as ProductSize. After creating both datasets, your Report Data pane will look like the below image.
Report Data Pane Window
Let's configure the ProductSize report parameter. Right click on the ProductSize report parameter and click on theParameter Properties, it will open the Report Parameter Properties window. Please make the below changes in the properties for the ProductSize report parameter.
Report Parameter Properties
Let's add a Tablix for data viewing purposes. Please pull all the data fields from ReportDataset into the Tablix. Your report will look like the below image after adding the Tablix.
Adding Tablix
Let's preview the report; As you can see from the below image, the ProductSize report parameter doesn't show NULLin the drop down list. So the report will not show products where the Size is NULL. You can verify this by previewing the report.
Multi Value Parameter Without NULL Value
If you will try to enable "Allow null value" for the ProductSize report parameter, you will get this error message “A multi-value parameter cannot include null values” as shown below.
Allow NULL In Multi Value Parameter Error
You get this error because if you perform any String or Mathematical operation with a NULL value then result will beNULL that is why NULL is not allowed in a multi value report parameter. How can we allow a NULL value in a multi value parameter? I will demonstrate the solution below.

Steps to allow NULL value in Multi Value Parameter in SSRS

SizeDataset is responsible to return the list of values for the ProductSize report parameter. We have to modifySizeDataset in such a way that NULL can be displayed in the Productsize report parameter dropdown list.
Modify the SizeDataset with the below query.
SELECT     Distinct ISNULL(Size,'NULL') as Size
FROM       DimProduct
ORDER BY   Size
I have used the ISNULL() function in the above query which will return NULL (a string value) if the NULL value is found for Size. Now SizeDataset will return NULL along with the other list of values in the ProductSize report parameter dropdown. You can refer to the below image.
Multi Value Parameter With NULL Value
We have to modify the ReportDataset in such a way that when NULL is passed from the ProductSize report parameter then ReportDataset must return the products for which Size is NULL.
Modify the ReportDataset with below query.
SELECT     ProductKey, EnglishProductName, Size
FROM       DimProduct
WHERE      ISNULL(Size,'NULL') IN (@ProductSize)
ORDER BY   ProductKey
I have used ISNULL() again in the where clause so the report parameter value can match the where clause value.
We have made all necessary changes, now let's preview the report. As you can see from the below image, our sample report is returning all the records with NULL values.
Report Preview