在 SSRS 中处理多值参数
Handling Multi Value Parameters in SSRS
我的 SSRS 上有 6 filters
,其中 1 is of Department
。我必须 select multiple departments
并根据这些 select 离子生成报告。但我不知道如何完成这项工作。
我创建了一个 stored procedure
,它在 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;
在这里可以使用拆分功能。我做到了。
where条件,使用split函数
(('0'=@DepartmentID AND (1=1)) OR LLD.DepartmentID IN (SELECT * FROM fnSplit(@DepartmentID,',')))
感谢大家的回复。因为你们,我才能被分裂的想法击中。
我的 SSRS 上有 6 filters
,其中 1 is of Department
。我必须 select multiple departments
并根据这些 select 离子生成报告。但我不知道如何完成这项工作。
我创建了一个 stored procedure
,它在 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;
在这里可以使用拆分功能。我做到了。
where条件,使用split函数
(('0'=@DepartmentID AND (1=1)) OR LLD.DepartmentID IN (SELECT * FROM fnSplit(@DepartmentID,',')))
感谢大家的回复。因为你们,我才能被分裂的想法击中。