【问题标题】:pass comma separated input parameter to SSRS Reporting Service将逗号分隔的输入参数传递给 SSRS 报告服务
【发布时间】:2015-05-27 10:21:26
【问题描述】:

我有一个网页,其中有一个文本框,用户可以在其中输入发票编号。并按下显示按钮 然后向用户显示一个 SSRS 报告,该报告具有类似 inv_no、地址、名称等的标题,并且该发票的详细信息以表格格式显示到标题中。,我成功地使用两个数据集实现了这一要求

ds_header_inv_dtl parameter as @invoiceno and 
ds_detail_inv_info parameter as @invoiceno

现在的问题是需求发生了变化,用户将输入带有逗号分隔符的多个发票编号,然后按显示报告按钮。 同样的报告应该显示为标题信息,然后是详细信息和分页符,然后是标题信息-> 详细信息和分页符等等。

是否可以为 ssrs 报告创建 XML 文件?

请帮助我如何实现这种要求。

【问题讨论】:

    标签: asp.net reporting-services ssrs-2008


    【解决方案1】:

    为什么要创建一个xml文件?执行此操作的常用方法是使用一个参数,该参数是以逗号分隔的发票编号列表。您将列表作为字符串传递,然后将其转换为 sql 中的不同值(请参阅 http://blogs.msdn.com/b/amitjet/archive/2009/12/11/sql-server-comma-separated-string-to-table.aspx 示例如何执行此操作)

    另一种方法是创建带有接受多个值的参数的报表。然后您无法通过 url 设置该参数,但如果您使用 SSRS Web 服务生成报告,则可以。

    【讨论】:

      【解决方案2】:

      我希望我没有误解您的意图,但如果您只想让 SSRS 显示一个简单的表格,您可以让它生成一个表格对象 - 无需生成 XML .RDL 文件。但是,托管和执行的报告中有一个Export to XML 选项。

      如果您只想允许用户动态添加记录,那么我现在正在做类似的事情,这就是我的解决方案。很抱歉,它相当糟糕且令人费解,但当我无法抽出时间进行更优雅的演示时,它对我来说非常有用。

      首先: UDF 为您想要的发票编号获取分隔字符串并转换为可搜索的文本数组

      CREATE FUNCTION [dbo].[fnDelimitedListToVarcharTableVariable]
      (
          @DelimitedList nvarchar(max),
          @Delimiter varchar(1)
      )
      RETURNS @tbl table(SplitValues nvarchar(max))
      AS
      BEGIN
          DECLARE @DelimiterPos int
      -- Find the first comma
          SET @DelimiterPos = PATINDEX( '%,%', @DelimitedList)
      -- If a delimiter was found, @DelimiterPos will be > 0.
          WHILE @DelimiterPos > 0
              BEGIN
      -- Insert the value between the start of the string and the first delimiter, into the table variable.
                  INSERT INTO @tbl(SplitValues) SELECT CAST(LTRIM(RTRIM((SUBSTRING(@DelimitedList, 1, @DelimiterPos -1)))) AS nvarchar(max))
      -- Trim the string of the first value and delimiter.
                  SET @DelimitedList = SUBSTRING(@DelimitedList, @DelimiterPos +1, LEN(@DelimitedList) - @DelimiterPos)
      -- Look for the next delimiter in the string.
                  SET @DelimiterPos = PATINDEX( '%,%', @DelimitedList)
              END
      -- Ensure the last / only value in the @DelimitedList string gets inserted into the table variable.
          INSERT INTO @Tbl(SplitValues) SELECT CAST(LTRIM(RTRIM((@DelimitedList))) AS nvarchar(max))
          RETURN
      END;
      

      第二: 在您的 SSRS 报告中创建一个名为 param_DelimitedList 的参数。它应该是文本数据类型,默认值为空白字符串。

      第三: 创建数据集

      Create proc spGetInvoices
          @param_DelimitedList varchar( max )
      as
      begin
          Select
              tbl.InvoiceNumber
              ,tbl.*
          from MyTable tbl
          where cast( tbl.InvoiceNumber as varchar(max) ) in ( select SplitValues from dbo.fnDelimitedListToVarcharTableVariable( @param_DelimitedList, ',' ) );
      end;
      

      第四: 在您的 SSRS 报告中创建一个 Tablix 表对象,其中包含来自数据集spGetInvoices的所需字段@

      用户应该能够在参数框中输入发票编号列表,并将相应的数据返回到 Tablix 表对象。

      代码在SQL Server 2008-R2Report Builder 3.0 中运行良好。希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        相关资源
        最近更新 更多