2016-07-26 80 views
17

当我们使用SSRS创建报表时,我们可以使用数据集窗口中的查询框来创建自定义查询。但在本地报告(.RDLC)中,当我们想要创建报告时,我们应该设计一个设计的数据集来报告。使用微软报表数据集

enter image description here

的问题是,当我们有100份报告中,我们也应该有100 Datasets.Currently我们使用DataSet这些字段(F1,F2,F3,...,F100),并结合我们之前的DataTable报告我们更改了数据表列的名称。但它的可读性很低。

我想问问有没有更好的方法来解决这个问题?

感谢

+0

你没事吧与在运行时创建dynmaic数据集的解决方案,并将其设置为数据源为您的报告? – lokusking

+0

我不能真正udnerstand你的问题。你想知道你的GUI是否过于复杂,或者如果你的代码的可读性可能需要一些提升? 无论哪种方式,它会帮助很多代码片段和或截图。 – Megajin

回答

1

我可能需要以更多的信息,以帮助 - 你真的你有标记领域的数据集F1,F2,F3,...那你现在需要绑定到具有标记(例如)Id,CustType,IsActive,...的列的实际表?

如果是这种情况,那么我会建议使用视图,将每个字段名称别名为F1,F2,...这听起来像您原来的问题一样多的工作,但一切都可以自动化。

创建这100个视图可以通过脚本实现。这个脚本可以通过运行一些智能T-SQL来获得存储在SQL Server中的模式数据并输出所需的脚本。

看一看How can I get column names from a table in SQL Server?即可开始使用。

您可能需要在您的T-SQL中使用游标来遍历模式数据并输出脚本以创建视图。

最后,如果您需要以相同的方式修改您的每个100个SSRS报告,请不要忘记每个都以报告定义语言(XML)存储,因此您可以编写一个小型实用程序, XML文件并进行必要的更改。不要忘记先备份这些文件,然后让新的应用程序松动。

我希望这一切都有所帮助,答案还没有到达太晚。

+0

谢谢,但我知道所有你说的,我尝试了一些。所以我寻找更好的解决方案 – Arian

3

其最佳解决方案是对数据集进行分组。 您可以将他们的业务避免分组数据集。例如POLICY.xsd,USER.xsd,INVOICE.xsd并将其他数据集添加到xsd文件中。

例如在visual studio中,您会看到10个数据集文件。但每个项目都有不同的数据表。

第二次升级是你会写出更好的t-sql。当你一般选择你的列的类似报告,你会使用相同的数据表。

例如报告包括5 columsn A1,A2,A3,A4,A5 B类报告包括6列A1,A2,A3,A4,A5,A6

这些报告将使用B类报告的数据表

0

我必须承认,我并不完全理解到目前为止提供的信息存在的问题,但这里有一个解决方案,可能会对您有很大的好处。

您是否尝试过从存储过程创建报告?通过这样做,RDLC文件将不包含查询,而是查看存储过程中查询的定义,并在RDLC文件内创建数据集。然后在运行时,以代码执行存储过程,并将返回的数据传递到RDLC文件中执行。

这样做的好处是查询被封装为数据库对象,最终不会在项目中产生数百万个数据集,并且您可以从报告中取消查询,所以如果您有6个版本的报告全部使用相同的字段,但使用不同的WHERE子句,例如,您可以只使用1个报告(并在运行时调用相关的存储过程)。

0

虽然很高兴看到Minimal, Complete, and Verifiable example我也会给它一个镜头。

你可以做的是,在你的数据库中创建一个表,把你需要的数据与每个DataSet相关,并循环这些数据。

ID .............字段........................ .................. QueryType .............. SqlQuery/StoredProcedure

1 ......... ...... ProducID,ProductName ............ 0 ............................ ..SP_GetBasicProductInfo

2 ............... OrderID,ProductId ..................... 0 .. ............................ SP_GetOrderIdsByProduct

3 ... ............ CustomerID,CustomerName .... 1 ..............................选择客户ID,客户名称从Northwind.Customers

这样,您就可以得到字段映射到和SQL查询来执行。 您可以最终将此信息传递给您的Data Access Layer以执行查询并填写您需要的数据集。

你可以尝试一切转换为字符串,甚至使用分隔符为每种类型的如int|ProductID,string|ProductName