我有一个网页,其中一个文本框,用户输入发票号。并按下一个显示按钮 然后向用户显示SSRS报告,该报告具有类似inv_no,地址,名称等的标题,并且该发票的详细信息以表格格式显示在标题中。我成功地使用两个数据集来实现此要求。
ds_header_inv_dtl parameter as @invoiceno and
ds_detail_inv_info parameter as @invoiceno
现在问题是需求已经改变,用户将使用逗号分隔符输入多个发票编号并按下显示报告按钮。 相同的报告应显示为标题信息,然后显示详细信息和分页符,然后再显示标题信息 - >详细信息和分页符等。
是否可以为ssrs报告创建XML文件?
请帮助我如何达到这种要求。
答案 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
用户应该能够在参数框中键入发票编号列表,并将相应的数据返回到Tablix表对象。
该代码适用于SQL Server 2008-R2
和Report Builder 3.0
。我希望它可以帮助你。