【问题标题】:Twp multi select parameters in SSRS not displaying results for when selected more than one valueSSRS中的Twp多选参数在选择多个值时不显示结果
【发布时间】:2016-04-29 16:40:21
【问题描述】:

我有一个问题,SSRS 报告没有填充第二个多值下拉列表,它依赖于第一个多值下拉列表,因此不填充报告。

所以,我在这里尝试做的是从第一个下拉列表中为选定城市的建筑承包商填充 SSRS 报告,并从第二个下拉列表中填充选定的技能集,一旦我们选择城市下拉列表就会填充。

但我的问题是当我选择一个城市时,技能的下拉列表会毫无问题地填充,当我选择多个城市时,我的技能下拉列表没有任何价值。

我的代码如下。我有 3 个数据集。

数据集 1(主)

ALTER PROCEDURE [dbo].[RPT_ADM_Total_Contractors]

    @Office nvarchar(255),
    @Start datetime,
    @End datetime,
    @Servicetype nvarchar(255)

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    SELECT    fs.skillname,fa.NEW_ContractorIDNAME AS ContractorName, fa.new_Contractorstatusname AS Contractorstatus,
          fa.createdon AS CreatedDate, fa.new_addresscity AS City
    FROM 
        Filterednew_contrator fa
    join
        FilteredService fs
    on fa.new_service = fs.serviceid

    WHERE 
    fa.new_sitename IN (@Office )
    AND fs.skillname IN (@Servicetype)


END

数据集 2

ALTER PROCEDURE [dbo].[RPT_ADM_Total_Contractors_Officelist]
    @Start date,
    @End date
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

        SELECT DISTINCT fa.new_sitename
    FROM 
        Filterednew_contrator fa
    join
        FilteredService fs
    on fa.new_service = fs.serviceid    
    WHERE       
        new_admitdate between @Start and @End
        AND new_sitename like 'Office%'
        fa.new_service is not null

END

数据集 3

ALTER PROCEDURE [dbo].[RPT_ADM_Total_Contractors_Servicetypelist]

        @Office nvarchar(255)
        --@Start datetime,
        --@End datetime

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    SELECT DISTINCT fs.skillname
    FROM 
        Filterednew_contrator fa
    join
        FilteredService fs
    on fa.new_service = fs.serviceid
    WHERE
    fa.new_sitename in (@Office)        
    order by fs.skillname


END

我有 4 个参数

@Start date/time
@End date/time
@Office "Allow Multivalue" AND gets populated from dataset 2
@Servicetype "Allow Mutivalue" AND gets populated from dataset 3

我尝试使用 =Join(Parameters!Office.Value,",") 但没有奏效。 我希望有人能帮我解决这个问题。

谢谢。

【问题讨论】:

  • 我的办公室就像 1) Office-NewYork 2) Office-London 3)Office-Toronto
  • 请分享您的专业知识!
  • 你不能像在 SSRS 中那样传递@VarName。您需要调用一个函数来解析该项目,即@Office

标签: sql sql-server stored-procedures reporting-services


【解决方案1】:

您有 2 个选项。

选项 1. 将 SSRS 下拉菜单设为单值下拉菜单。

如果这不是一个可行的选择,那么这里是选项 2:

您必须将存储过程中@Office 和@Servicetype 参数的数据类型设置为类似于 (n)varchar(1000);足够长的东西来处理具有所有可能值的字符串。然后,您必须将字符串拆分为单独的值,以便可以在 IN 子句中使用它们。这是我过去使用过的拆分 UDF(并在此站点上多次发布)。

CREATE FUNCTION [dbo].[udf_Split] 
   (  @List      varchar(8000), 
      @Delimiter varchar(5)
   ) 
   RETURNS @TableOfValues table 
      (  RowID   smallint IDENTITY(1,1), 
         [Value] varchar(100) 
      ) 
AS 
   BEGIN

      DECLARE @LenString int 

      WHILE len( @List ) > 0 
         BEGIN 

            SELECT @LenString = 
               (CASE charindex( @Delimiter, @List ) 
                   WHEN 0 THEN len( @List ) 
                   ELSE ( charindex( @Delimiter, @List ) -1 )
                END
               ) 

            INSERT INTO @TableOfValues 
               SELECT substring( @List, 1, @LenString )

            SELECT @List = 
               (CASE ( len( @List ) - @LenString ) 
                   WHEN 0 THEN '' 
                   ELSE right( @List, len( @List ) - @LenString - 1 ) 
                END
               ) 
         END

      RETURN 

   END 

一旦你有了它(在你的数据库中),你可以在 WHERE 子句中更改你的 SP 代码,使其看起来像这样。

WHERE 
    fa.new_sitename IN (SELECT value FROM dbo.udf_Split(@Office, ','))
    AND fs.skillname IN (SELECT value FROM dbo.udf_Split(@Servicetype, ','))

享受吧!

【讨论】:

  • 感谢 R.richards 发布此内容。它帮助我得到了我想要的
  • 如果其他人需要,我如何添加完整代码。我的意思是打开日期过滤器的所有 3 个数据集。
  • 我想你只是编辑你的问题并将添加标记为解决方案。我在这里看的不多,但我确实看到了。很高兴为您提供帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 2018-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多