如何动态创建SSRS报告?

我试图在SSRS中创建一个报告。 该报告为其数据调用存储过程。 我想在表格中显示数据。 但问题是,存储过程的结果会不时发生变化,因为每个客户都有自己的“模板”。 这意味着客户A的结果可能是:

AccountNumber | 顾客ID
1234567890 0987654321
1579086421 1234565465
…………………. ………………..

而对于客户B可能是:

客户名称 | 地址
客户B Teststreet 1
客户测试测试街2
…………………. ………………..

有50种不同的列可供选择。 列的顺序也是可编辑的。 我的存储过程负责这一点。 我唯一想要的是将storedprocedure的结果集1:1放在我的报告中(标题+正文)。 你们知道怎么做吗?

如果那不可能,那么有一个C#解决方案吗? 即在C#中创建报表对象,调整设置等。

谢谢

您可以根据存储过程返回的数据集动态创建SSRS报告。 报告格式(RDL)已记录在案,其格式为XML格式。 因此,您可以使用System.XML命名空间生成RDL。 替代(和不支持)方式是引用RDL对象模型程序集(Microsoft.ReportingServices.RdlObjectModel) – 您可以在SSRS 2008服务器计算机上找到程序集并将其复制到本地计算机上。 它提供了一个读取/生成RDL的对象模型。

我采用的方法是基于数据表动态生成RDL(作为XML),然后使用Web服务API在SSRS服务器上发布RDL。

一种解决方案可能是修改您的SP,以便返回的数据类似于:

ColNameA DataA ColNameB DataB AccountNumber, 1234567890, CustomerID, 948477586 AccountNumber, 5466584426, CustomerID, 458852244 

然后,在SSRS中拖出一个表。 在ColNameA上创建一个组。 在该组行中,将Field ColNameA放在第一列中,将ColNameB放在第二列中。

在Details Row中,将DataA放在第一列中,将DataB放在第二列中,它应如下所示:

替代文字

我使用的示例查询是:

 select 'AccountNumber' as ColNameA, 1234567890 as DataA, 'CustomerID' as ColNameB, 0987654321 as DataB UNION select 'AccountNumber' as ColNameA, 5546488393 as DataA, 'CustomerID' as ColNameB, 4747599393 as DataB 

获取列的名称(AccountNumber,CustomerID或CustomerName,CustomerAddress)将是关键。 你可以通过以下方式获得:

 select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'my_table_name'