18

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

在此处输入图像描述

问题是当我们有 100 个报告时,我们还应该有 100 个数据集。目前我们使用具有这些字段(F1、F2、F3、...、F100)的数据集,并且在将数据表绑定到报告之前,我们更改了数据表列的名称. 但它的可读性很低。

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

谢谢

4

4 回答 4

3

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

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

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

例如 A 报表包括 5 列 A1,A2,A3,A4,A5 B 报表包括 6 列 A1,A2,A3,A4,A5,A6

对于这些报告,您将使用 B 报告的数据表

于 2016-08-12T06:55:14.773 回答
1

我可能需要更多信息才能提供帮助-您真的是说您的数据集带有标记为 F1、F2、F3... 的字段,并且您现在需要绑定到带有标记(例如)Id 的列的实际表, CustType, IsActive, ... ?

如果是这种情况,那么我建议使用将每个字段名别名为 F1、F2、...

可以通过脚本来创建这 100 个视图。该脚本可以通过运行一些智能 T-SQL 来生成,该 T-SQL 获取存储在 SQL Server 中的架构数据并输出所需的脚本。

看看如何从 SQL Server 中的表中获取列名?开始。

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

最后,如果您需要以相同的方式修改 100 个 SSRS 报告中的每一个,那么不要忘记每个都以报告定义语言 (XML) 存储,这样您就可以编写一个小型实用程序来读取每个 XML 文件并生成必要的改变。不要忘记先备份这些文件,然后再让新的实用程序松动它们。

我希望所有这些都会有所帮助,并且答案还没有来得太晚。

于 2016-08-09T14:01:01.697 回答
0

虽然很高兴看到一个最小、完整和可验证的示例,但我也会试一试。

您可以做的是,在您的数据库中创建一个表,将您需要的数据与每个数据相关联DataSet并遍历该数据。

IE

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

1.......产品ID,产品名称............0...... .......SP_GetBasicProductInfo

2......订单ID,产品ID............0...... .....................SP_GetOrderIdsByProduct

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

等等

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

您可以尝试将所有内容都转换为字符串,甚至可以为每种类型使用分隔符,例如int|ProductID,string|ProductName

于 2016-08-16T12:56:25.983 回答
0

我必须承认,到目前为止,我还没有完全理解所提供信息的问题,但这里有一个解决方案,它可能对你有很大的好处。

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

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

于 2016-08-16T11:09:50.337 回答