Search code examples
sql-server-2008reporting-servicesssrs-2008

Handling Multi Value Parameters in SSRS


I'm having 6 filters on my SSRS, out of which 1 is of Department. I have to select multiple departments and on the basis of these selections, Report will be generated. But I'm not getting how to make this done.

I created a stored procedure which is getting called in Reports.

ALTER PROC [dbo].[usp_getLessonLearntDetails]
@AssetID nvarchar(50),
@DepartmentID nvarchar(50),
@Category varchar(50),
@AuditType varchar(50),
@AuditStartYear nvarchar(50),
@AuditEndYear nvarchar(50)

AS

BEGIN

SELECT 
ROW_NUMBER() OVER(ORDER BY AssetName ASC) AS Sno,
LLD.LessonComputedID, tbl_Asset.AssetName, AT.AuditType, SY.Year+' - '+EY.Year as 'Audit Period',
DE.DepartmentName, CT.CategoryName, LLD.Learnings, 
CAST(CASE WHEN (LLD.RepeatedObservation = 1) THEN 'True' ELSE 'False' END AS varchar(10)) as RepeatedObservation, 
LLD.RepeatedObservationReference, Att.Attachment
FROM         tbl_LessonLearntDetails LLD INNER JOIN
             tbl_Category CT ON CT.CategoryID = LLD.Title  INNER JOIN
             tbl_Asset ON LLD.AssetID = tbl_Asset.AssetID INNER JOIN
             tbl_Department DE ON LLD.DepartmentID = DE.DepartmentID INNER JOIN
             tbl_AuditType AT ON LLD.AuditTypeID = AT.AuditTypeID INNER JOIN
             tbl_Attachment Att ON LLD.LessonLearntID= Att.LeassonLearntID INNER JOIN
             tbl_AuditYear SY on SY.Year = LLD.AuditStartYear INNER JOIN                   
             tbl_AuditYear EY on EY.Year = LLD.AuditEndYear

        where ( (('0'=@AssetID and (1=1)) or LLD.AssetID=@AssetID) and 
                (('0'=@DepartmentID and (1=1)) or LLD.DepartmentID IN (@DepartmentID)) and
                (('0'=@Category and (1=1)) or LLD.Title=@Category) and
                (('0'=@AuditType and (1=1)) or LLD.AuditTypeID=@AuditType) and
                (('0'=@AuditStartYear and (1=1)) or (LLD.AuditStartYear >= @AuditStartYear)) and
                (('0'=@AuditEndYear and (1=1)) or (LLD.AuditEndYear <= @AuditEndYear))
              );

END;

Solution

  • Using Split Function will work here. I did it.

    In where condition, use split function.

    (('0'=@DepartmentID AND (1=1)) OR LLD.DepartmentID IN (SELECT * FROM fnSplit(@DepartmentID,',')))
    

    Thanks everyone for your response. Because of you guys only I will be able to get hit by an idea of Splitting.