何时使用 RDLC 报表而不是 RDL 报表?

124
我最近几周一直在学习 SSRS 2005/2008,并创建了一些服务器端报告。针对某些应用,同事建议我研究 RDLC 在特定情况下的使用。现在我正在努力理解 RDL 和 RDLC 之间的主要区别。
搜索这些信息,最多只能得到零散的信息。我已经了解到:
- RDLC 报告不存储有关如何获取数据的信息。 - RDLC 报告可以直接由 ReportViewer 控件执行。
但我仍然没有完全理解 RDLC 文件与其他相关系统(报表服务器、源数据库、客户端)之间的关系。
为了更好地掌握 RDLC 文件,我想知道它们的使用方式与 RDL 文件有何不同,并在什么情况下会选择 RDLC 而不是 RDL。欢迎提供资源链接。
更新:
ASP.NET 论坛上的 一个帖子 讨论了同样的问题。从中,我对此问题有了更好的理解。
RDLC 的一个特性是它可以在 ReportViewer 控件中完全在客户端运行
这消除了 Reporting Services 实例的需要,甚至消除了任何数据库连接的需要,但:
- 它增加了需要手动提供报告所需数据的要求。
这是优势还是劣势取决于特定应用程序。
在我的应用中,一个Reporting Services的实例已经可用,并且报表所需的数据可以轻松地从数据库中获取。是否还有任何理由让我考虑使用RDLC,或者我应该坚持使用RDL?
10个回答

89
  • RDL报表通常是托管报表。这意味着您需要实施SSRS服务器。它们是SQL Server的Visual Studio的内置扩展,用于报告语言。安装SSRS时,您应该有一个称为“Business Intelligence Development Studio”的附加组件,使用此工具比不使用要容易得多。
  • R eport
  • D efinition
  • L angauge
  • RDL报表的优点:
    1. 您可以将报表托管在已运行服务的环境中。
    2. 您可以在项目或继承级别上配置安全性,以处理安全性作为独立的概念。
    3. 您可以配置服务以定期发送电子邮件(前提是您可以访问SMTP服务器)并在计划中保存文件。
    4. 一旦发布,您通常会有一个名为“ReportServer”的数据库,可以查询其中关于报表的信息。
    5. 您仍然可以通过ASP.NET、WPF(使用winform控件),或.NET中的Winforms使用“ProcessingMode.Remote”在客户端应用程序中通过“ReportViewer”访问这些报表。
    6. 您可以设置参数供用户查看和使用以获得更大的灵活性。
    7. 您可以将报表的部分配置为用作连接字符串的“数据源”,以及sql查询、xml或其他数据集作为“数据集”。这些部分和其他部分可以存储并配置以定期缓存数据。
    8. 您可以编写服务的.NET代理类 http:// /ReportServer/ReportingService2010 或 / ReportExecution2005。然后,您可以在.NET中编写自己的方法,用于通过代码直接从托管SSRS报表的服务器上的服务发送电子邮件、保存或操作SSRS数据。 Programmatically Export SSRS report from sharepoint using ReportService2010.asmx
  • 缺点:
    1. 与其他技术相比,SSRS在快速搭建方面有些棘手。大多数人会对安全策略和将报表设计为Visual Studio的“附加组件”感到困惑。 SQL 2005 = VS BIDS 2005,SQL 2008 = VS BIDS 2008,SQL 2012 = VS BIDS 2010(LOL)。
    2. 继续第一点,安全设置的策略在我看来过于复杂。存在服务器安全、数据库安全和角色,以及托管服务页面的两个安全设置。大多数人只设置了一个管理员账号,却无法登录,然后不知道其他用户为什么也无法登录。根据我的经验,在SSRS中最常见的投诉或问题都与登录相关。
    3. 您可以使用“表达式”来“增强”报表。但通常情况下,如果使用太多表达式,报表性能会非常慢。
    4. 您可以执行一定数量的操作并导出数据。根据我的了解,SSRS没有任何鼠标悬停的报表功能,除非使用JavaScript进行修改。
    5. 性能和速度可能会受到影响,因为愚蠢的SSRS配置会重新启动系统,有时只需加载网站的第一个报表就需要等待一段时间。您可以通过修改解决此问题,但我发现为其创建一个保持活动的服务更有效。

    II. RDLC报表是客户端包含的报表,不会托管在任何地方。名称中的额外"c"表示“客户端”。通常情况下,这是RDL语言的扩展,仅用于Visual Studio客户端应用程序中。当您添加“报表”项目时,它将出现在Visual Studio中。

    RDLC报表的优点:

    1. 您可以更轻松地将WCF服务与数据集连接起来。
    2. 您对数据集有更多的控制权,并且可以使用填充了实体框架对象或直接使用ADO.NET的POCO类,以及表本身。您可以在绑定到报表之前对数据进行优化处理。
    3. 您可以直接在代码后台中添加插件以自定义外观。

    缺点:

    1. 您需要自己处理参数,虽然您可以编写包装方法来帮助完成工作,但工作量比预期的要大一些,这很不幸。
    2. 用户不能在'ReportViewer'控件中看到参数,除非它处于远程模式并访问RLD报告。因此,您需要自己创建文本框、下拉框、单选按钮以传递给它。有些人喜欢这种附加控制,但我个人不喜欢。
    3. 您需要自己构建任何想要用于分发报告的服务。 邮件、订阅、保存。 很抱歉,您需要在.NET中构建或实现已经可以使用托管报告的代理。

    老实说,我根据不同的目的都喜欢两种方式。如果我想要将某些东西发送给分析师,他们会一直使用它,并进行图形、图表、深入钻取和导出到Excel的调整,我就会使用RDL,并且让SSRS网站处理所有处理电子邮件分发的繁琐工作。如果我需要一个具有报告部分的应用程序,并且我知道该应用程序是其自身的模块,具有规则和治理,则我会使用RDLC,并且使参数更小,并由用户在到达报告部分之前做出的决策驱动,例如客户和站点,然后他们通常只选择时间范围或类型,没有更多选择。所以一般来说,对于复杂的报告,我会使用RDL,对于简单的内容,则我会使用RDLC。


    57

    问:RDL和RDLC格式有什么区别?

    答:RDL文件是由SQL Server 2005版本的报表设计器创建的。RDLC文件是由Visual Studio 2008版本的报表设计器创建的。

    RDL和RDLC格式具有相同的XML模式。但是,在RDLC文件中,一些值(例如查询文本)允许为空,这意味着它们不能立即发布到报表服务器。可以通过使用SQL Server 2005版本的报表设计器打开RDLC文件来输入缺失的值。(您必须先将.rdlc重命名为.rdl)

    RDL文件完全兼容ReportViewer控件运行时。但是,RDL文件不包含设计时的ReportViewer控件所依赖的某些信息,以便自动生成数据绑定代码。通过手动绑定数据,可以在ReportViewer控件中使用RDL文件。新!还可以查看RDL Viewer示例程序。

    请注意,ReportViewer控件不包含连接到数据库或执行查询的任何逻辑。通过分离这样的逻辑,ReportViewer已经兼容所有数据源,包括非数据库数据源。但是,这意味着当ReportViewer控件使用RDL文件时,RDL文件中的SQL相关信息将被控件忽略。主机应用程序有责任连接到数据库,执行查询并以ADO.NET DataTables的形式提供数据给ReportViewer控件。

    http://www.gotreportviewer.com/


    我可以使用自定义对象(List<T> of MyEntity)作为远程报表(RDL,而不是RDLC)的数据源吗? - Kiquenet

    23

    我一直认为RDL和RDLC之间的区别在于RDL用于SQL Server报告服务,而RDLC用于客户端报告的Visual Studio。它们的实现和编辑器几乎相同。RDL代表报告定义语言,而RDLC代表客户端报告定义语言

    希望这可以帮助您。


    3
    直到我意识到在 RDLC 中可以手动提供数据到报表而不需要强制连接数据库,我才理解 "客户端" 部分的含义。 - Daan

    16

    根据我的经验,如果你需要在大型报表上获得高性能(这取决于客户端规格略有不同),建议使用rdlc。此外,rdlc报表可以完全控制数据,通过使用客户端报表,您可以避免浪费数据库访问等问题。在我目前的项目中,一个关键报表需要在服务器端渲染约2分钟,几乎会使任何报表服务器在这段时间内瘫痪。将其切换到客户端渲染后,我们看到性能接近20-40秒,而且没有对报表服务器造成负载,因为只有数据集被下载。

    由于rdlc会增加开发和维护的复杂性,特别是当您的报表已被设计为服务器端报表时,所以结果可能因人而异。


    我认为从性能方面考虑,将RDL报告放在运行Reporting Services的远程服务器上是最好的选择。您不需要更新每个客户的工作站(只需在一个站点中更新一个报告即可)。2005版本存在内存泄漏和一些小错误,使用报告服务似乎可以避免这些问题。 - Junior Mayhé
    1
    我不确定你试图表达什么。我们已经发现在客户端报告上使用最佳性能。对于我们来说,远程服务器上的RDL是一个巨大的瓶颈。 - marr75
    4
    这很大程度上取决于两个因素:a)报告服务器的相对处理能力和b)您的报告查看器控件是配置为本地还是远程处理。通过使用本地处理模式中的报告查看器控件,您可以将报告处理工作转移到客户端,这在报告服务器无法处理工作负载的情况下可能会有益(例如,如果有多个客户端)。但是,一个性能良好的报告服务器应该能够处理大多数报告工作负载。其他瓶颈可能包括报告/查询设计和数据源。 - Nathan Griffiths
    1
    截至我回答这个问题的时候,服务器端报告不能很好地处理并发用户,基本上只能一次处理一个请求(如果有任何增强,我会非常惊讶)。此外,在我们的环境中(以及许多其他环境中,我必须假设),与数据库服务器所做的工作相比,报告的呈现是一个非常小的细节。客户端报告使我们对应用程序的并发性方面有了更多的控制。然而,它确实给系统增加了额外的复杂性。因此,这是一个需要做出的工程决策。 - marr75
    @marr75 -- 服务器和客户端的扩展性不同。在服务器端,当您雇用25名员工并且他们同时访问服务器时,您更有可能遇到瓶颈。而在客户端,所有25个员工都有自己的电脑来帮助分担负载,因此您可能根本不会遇到任何瓶颈--随着公司的发展,服务器端解决方案需要更多的维护。话虽如此,您可以更优化服务器,并且这只需要在一个地方完成--我想建立正确的索引--请涉及您的数据库管理员。我的首选是使用客户端,但最大程度地优化两者的性能! - MicroservicesOnDDD

    11

    这里有些观点已经在上面讨论过了,但是针对VS2008环境,以下是我的两点建议:

    RDL(远程报表):更好的开发体验,如果需要使用一些高级功能,如调度、即席报表等等,更具灵活性...

    RDLC(本地报表):在发送到报表之前更好地控制数据(更容易验证或操作数据)。更轻松的部署,不需要 Reporting Services 实例。

    一个极大的局限是本地报表已知存在内存泄漏问题,如果客户端将运行众多大型报表,这可能会严重影响性能。这个问题应该会在新的 VS2010 版本的报表查看器中解决。

    在我的情况下,由于我们有可用的 Reporting Services 实例,我会先将新报表开发为 RDL 然后转换为本地报表(这很容易),然后以本地报表形式部署它们。


    7

    虽然目前我更倾向于使用RDL,因为它似乎更灵活、易于管理,但RDLC有一个优点,它似乎简化了您的许可证。因为RDLC不需要Reporting Services实例,所以您不需要Reporting Services许可证来使用它。

    我不确定这是否仍适用于较新版本的SQL Server,但曾经有一段时间,如果您选择将SQL Server数据库和Reporting Services实例放在两台不同的计算机上,您需要拥有两个单独的SQL Server许可证:
    http://social.msdn.microsoft.com/forums/en-US/sqlgetstarted/thread/82dd5acd-9427-4f64-aea6-511f09aac406/

    您可以Bing搜索其他关于Reporting Services许可证的类似博客和帖子。


    3
    SQL Server的许可仍然要求您为每台安装有SQL Server任何组件的机器拥有许可证。因此,在报告服务器数据库与报告服务器服务不在同一台服务器上的扩展部署中,每个服务器都需要单独的许可证。 - Nathan Griffiths

    7
    如果你有可用的报告服务基础设施,请使用它。这将使RDL开发更加愉快。您可以预览报告,轻松设置参数等。

    2
    对于VS2008,我相信RDL比RDLC具有更好的编辑功能。例如,我可以使用RDL更改文本框中所选文本的加粗样式,而在RDLC中不可能实现。
    RDL:abcd efgh ijklmnop RDLC:abcd efgh ijklmnop - 或 - abcd efgh ijklmnop(这是您唯一的选择)
    这是因为RDLC使用2005年早期的命名空间/格式,而RDL使用2008年的命名空间/格式。但是,这将随着VS2010的推出而改变。

    4
    这不是由于rdl和rdlc之间的差异,而是由于SQL Server Reporting Services 2005和2008之间的差异。报表查看器重新分发程序滞后于SQL Server开发,支持客户端报表,这种滞后是你所描述的差异的原因。 - marr75
    1
    由于存在大量的错误,我正在从2005(RDLC)迁移到2008 Reporting Services(RDL)。 - Junior Mayhé

    1
    如果我们有较少数量的报告,这些报告较不复杂且由asp.net网页使用。 最好选择rdlc,原因是我们可以避免在RS实例上维护报告。 但是,我们必须手动从数据库中获取数据并将其绑定到rdlc。

    缺点:在Visual Studio中设计rdlc与SSrs设计师相比有点困难。

    优点:维护容易。 在从Web页面导出报告时,观察到与服务器端报告相比性能提高。


    -3

    如果你想在ASP.NET中使用报表,则使用.rdl格式。 如果你想在报表生成器/报表服务器中使用/view,则使用.rdlc格式。 只需手动转换格式即可。


    这似乎在运行位置上将RDL和RDLC交换了 - 即使没有交换,这也不会为现有答案中的数十个答案增加任何有用的内容。 - underscore_d
    rdlc是本地报表的扩展,可以在aspnet、winforms或wpf中使用。https://msdn.microsoft.com/es-es/library/ms252104.aspx。您不能在远程处理模式下使用.rdlc文件。 - dgzornoza
    在修改方面,它们是一样的吗?两者都可以在报表生成器中进行编辑吗? - Mark

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接