将逗号分隔的输入参数传递给SSRS Reporting Service

时间:2015-05-23 15:33:20

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

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

ds_header_inv_dtl parameter as @invoiceno and 
ds_detail_inv_info parameter as @invoiceno

现在问题是需求已经改变,用户将使用逗号分隔符输入多个发票编号并按下显示报告按钮。 相同的报告应显示为标题信息,然后显示详细信息和分页符,然后再显示标题信息 - >详细信息和分页符等。

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

请帮助我如何达到这种要求。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我希望我不会误解您的意图,但如果您只是希望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的参数。它应该是text数据类型,默认值为blank string。

第三: 创建数据集

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;

第四: 使用数据集spGetInvoices

中的所需字段在SSRS报告中创建Tablix表对象

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

该代码适用于SQL Server 2008-R2Report Builder 3.0。我希望它可以帮助你。