【问题标题】:Handling Multi Value Parameters in SSRS处理 SSRS 中的多值参数
【发布时间】:2017-07-11 07:05:37
【问题描述】:

我的 SSRS 上有 6 filters,其中有 1 is of Department。我必须选择multiple departments,并根据这些选择生成报告。但我不知道如何做到这一点。

我创建了一个stored procedure,它在报告中被调用。

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;

【问题讨论】:

  • 您可以使用表值参数或传入逗号分隔列表并使用LIKE 进行检查
  • @MWillemse SSRS 不知道什么表值参数是 ad 不向 sp 传递任何内容
  • @Aakash Srivastava 您应该将多值参数作为 varchar(...) 传递,SSRS 将传递一个逗号分隔的列表。那么你应该使用拆分功能
  • 如果可以...不要使用存储过程。只需将 SP 的主要代码部分复制到数据集查询中即可。 @Department 将作为逗号分隔值传入并注入到您的 SQL 语句中。无需做任何其他事情,无需拆分,加入等。

标签: sql-server-2008 reporting-services ssrs-2008


【解决方案1】:

使用拆分功能将在这里工作。我做到了。

在where条件下,使用split函数。

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

感谢大家的回复。因为只有你们,我才能被分裂的想法击中。

【讨论】:

    猜你喜欢
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    相关资源
    最近更新 更多