【问题标题】:When to use RDLC over RDL reports?何时在 RDL 报告上使用 RDLC?
【发布时间】:2009-07-03 12:33:15
【问题描述】:

过去几周我一直在研究 SSRS 2005 / 2008,并创建了一些服务器端报告。对于某些应用程序,一位同事建议我针对该特定情况研究 RDLC。我现在正试图弄清楚 RDL 和 RDLC 之间的主要区别。

搜索此信息最多会产生零散的信息。我了解到:

  • RDLC 报告不存储有关如何获取数据的信息。
  • RDLC 报告可以直接由 ReportViewer 控件执行。

但我仍然不完全了解 RDLC 文件与其他相关系统(报告服务器、源数据库、客户端)之间的关系。

为了更好地掌握 RDLC 文件,我想知道它们的使用与 RDL 文件有何不同,以及在什么情况下会选择 RDLC 而不是 RDL。也欢迎提供资源链接。

更新:

thread on the ASP.NET forums 讨论了同样的问题。从中,我对这个问题有了更好的理解。

RDLC 的一个特点是它可以在 ReportViewer 控件中完全在客户端运行。

  • 这消除了对 Reporting Services 实例的需求,甚至消除了对任何数据库连接的需求,但是:
  • 它增加了报告中需要的数据必须手动提供的要求。

这是优点还是缺点取决于特定的应用程序。

在我的应用程序中,无论如何都可以使用 Reporting Services 实例,并且可以轻松地从数据库中提取报告所需的数据。我还有什么理由考虑 RDLC,还是我应该坚持使用 RDL?

【问题讨论】:

    标签: reporting-services rdlc rdl


    【解决方案1】:

    根据我的经验,两件事都需要考虑:

    我。 RDL 报告通常是 HOSTED 报告。这意味着您需要实现 SSRS Server。它们是来自 SQL Server 的 Visual Studio 的内置扩展,用于报告语言。当您安装 SSRS 时,您应该有一个名为“商业智能开发工作室”的附加组件,它比没有它更容易使用报告。

    R报告

    D定义

    L 距离

    RDL 报告的好处:

    1. 您可以在为您运行服务的环境中托管报告。
    2. 您可以在项目或继承级别上配置安全性,以将安全性作为独立概念处理
    3. 您可以将服务配置为发送电子邮件(前提是您有可以访问的 SMTP 服务器)并按计划保存文件
    4. 您有一个通常称为“ReportServer”的数据库,您可以在报告发布后查询有关信息。
    5. 您仍然可以通过使用“ProcessingMode.Remote”在 ASP.NET、WPF(带有 winform 控件!)或 .NET 中的 Winforms 编写的客户端应用程序中的“ReportViewer”访问这些报告。
    6. 您可以设置用户可以看到和使用的参数以获得更大的灵活性。
    7. 您可以将报表的某些部分配置为“数据源”用于连接字符串,也可以将 sql 查询、xml 或其他数据集配置为“数据集”。这些部分和其他部分可以存储并配置为定期缓存数据。
    8. 您可以编写服务 http:///ReportServer/ReportingService2010 或 /ReportExecution2005 的 .NET 代理类。然后,您可以在 .NET 中构建您的 OWN 方法,用于直接从以代码形式托管 SSRS 报告的服务器的服务发送电子邮件、保存或操作 SSRS 数据。 Programmatically Export SSRS report from sharepoint using ReportService2010.asmx

    缺点:

    1. SSRS 与其他东西相比,在快速启动方面有点不可思议。大多数人对安全策略和将报告设计为 VS 的“附加”感到困惑。 SQL 2005 = VS BIDS 2005,SQL 2008 = VS BIDS 2008,SQL 2012 = VS BIDS 2010(LOL)。
    2. 继续 1 安全设置策略恕我直言,过于复杂。在为服务托管的页面上有服务器安全、数据库安全和角色这两个安全设置。大多数人只设置了一个无法进入的管理员,并想知道为什么其他用户不能。根据我的经验,关于 SSRS 的最常见投诉或问题通常与加入有关。
    3. 您可以使用据说会“增强”您的报告的“表达式”。很多时候,您执行的操作不止几项,您的报告就会在性能上一蹶不振。
    4. 您可以执行和导出到一定数量的事情。 SSRS 不会悬停在我所知道的没有 javascript hack 的报告上。
    5. 速度和性能可能会受到影响,因为愚蠢的 SSRS 配置会回收系统,而且第一次报告有时可能需要一段时间才能加载站点。您可以通过更改它来解决这个问题,但我发现为它制作一个保持活动服务效果更好。

    二。 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 恕我直言。

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

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

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

      RDL 和 RDLC 格式具有相同的 XML 架构。然而,在 RDLC 文件中,一些 值(例如查询文本)是 允许为空,这意味着 他们还没有立即准备好 发布到报表服务器。这 缺失值可以通过 使用 SQL 打开 RDLC 文件 Server 2005 版报告 设计师。 (您必须将 .rdlc 重命名为 .rdl 首先。)

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

      请注意,ReportViewer 控件 不包含任何逻辑 连接数据库或执行 查询。通过分离出这样的逻辑, ReportViewer 已制作完成 兼容所有数据源, 包括非数据库数据源。 然而,这意味着当 RDL 文件由 ReportViewer 使用 控制,SQL相关信息 在 RDL 文件中被简单地忽略 控制。它是主机 应用程序的责任 连接数据库,执行查询 并向 ReportViewer 提供数据 ADO.NET 形式的控件 数据表。

      http://www.gotreportviewer.com/

      【讨论】:

      • 我可以使用自定义对象(MyEntityList<T>)作为远程报告的来源(RDL),不是 RDLC ?
      【解决方案3】:

      我一直认为 RDL 和 RDLC 的区别在于 RDL 用于 SQL Server Reporting Services,而 RDLC 在 Visual Studio 中用于客户端报告。实现和编辑器几乎相同。 RDL 代表 Report Defintion LanguageRDLC Report Definition Language Client-side

      希望对你有帮助。

      【讨论】:

      • 我无法理解“客户端”部分,直到我意识到使用 RDLC 可以(甚至需要)手动向报告提供数据,而无需强制连接到某个数据库。
      【解决方案4】:

      根据我的经验,如果您需要高性能(这在一定程度上取决于您的客户规格)大型报告,请使用 rdlc。此外,rdlc 报告使您可以对数据进行非常全面的控制,您可以通过使用客户端报告来节省自己浪费的数据库行程等。在我目前正在处理的项目中,关键报告需要大约 2 分钟才能在服务器端呈现,并且几乎可以取出它在该时间命中的任何报告服务器。将其切换到客户端渲染,我们看到性能更接近 20-40 秒,报表服务器上没有负载并且使用的带宽更少,因为只下载数据集。

      您的里程可能会有所不同,而且我发现 rdlc 增加了开发和维护的复杂性,尤其是当您的报告被设计为服务器端报告时。

      【讨论】:

      • 我认为,就性能而言,最好将 RDL 报告放在运行 Reporting Services 的远程服务器中。您不需要更新每个客户工作站(您只需更新一个站点中的一份报告)。 2005 版本存在内存泄漏和一些在使用报告服务时似乎可以避免的小错误。
      • 我不肯定你想说什么。我们已经使用客户端报告找到了最佳性能。远程服务器上的 RDL 是我们的一大瓶颈。
      • 这在很大程度上取决于 a) 报表服务器的相关处理能力和 b) 您的报表查看器控件是否配置为本地或远程处理。通过在本地处理模式下使用报表查看器控件,您可以将报表处理工作转移到客户端,这在报表服务器没有能力处理工作负载的情况下(例如,如果有很多客户端)可能是有益的。但是,配置合理的报表服务器应该能够处理大多数报表工作负载。其他瓶颈可能是报告/查询设计和数据源。
      • 在我回答这个问题时,服务器端报告并不能很好地处理并发用户,基本上一次只处理一个请求(如果这完全得到增强,我会感到非常惊讶)。此外,在我们的环境中(以及我必须假设的许多其他环境),与数据库服务器完成的工作相比,报表的呈现只是一个非常小的细节。客户端报告使我们能够更好地控制应用程序的并发方面。然而,它确实增加了系统的复杂性。因此,这是一个工程决策。
      • @marr75 -- 服务器与客户端的规模不同。对于服务器端,当您雇用 25 名员工并且他们都同时使用服务器时,您更有可能碰壁。对于客户端,所有 25 人都有自己的 PC 来帮助承担负担,因此您可能根本不会碰壁——随着公司的发展,服务器端解决方案需要更多的保姆。也就是说,您可以进一步优化服务器,而这只需要在一个地方完成——我正在考虑构建正确的索引——让您的 DBA 参与其中。我的偏好是使用客户端,但同时优化两者以获得最大性能!
      【解决方案5】:

      上面已经解决了其中一些问题,但这是我对 VS2008 环境的 2 美分。

      RDL(远程报告):更好的开发体验,如果您需要使用一些高级功能(如计划、临时报告等),则更灵活......

      RDLC(本地报告):在将数据发送到报告之前更好地控制数据(在将数据发送到报告之前更容易验证或操作数据)。部署更简单,无需 Reporting Services 实例。

      本地报告的一个重要警告是已知的内存泄漏,如果您的客户端将运行大量大型报告,则会严重影响性能。这应该通过新的 VS2010 版本的报表查看器来解决。

      在我的例子中,由于我们有一个可用的 Reporting Services 实例,我将新报表开发为 RDL,然后将它们转换为本地报表(这很容易)并将它们部署为本地报表。

      【讨论】:

        【解决方案6】:

        如果您有可用的报告服务基础架构,请使用它。您会发现 RDL 开发更令人愉快。您可以预览报告,轻松设置参数等。

        【讨论】:

          【解决方案7】:

          虽然我目前倾向于 RDL,因为它看起来更灵活且更易于管理,但 RDLC 的优势在于它似乎可以简化您的许可。由于 RDLC 不需要 Reporting Services 实例,因此您不需要 Reporting Services 许可证即可使用它。

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

          您可以Bing 获取有关 Reporting Services 许可的其他类似博客和帖子。

          【讨论】:

          • SQL Server 许可仍然要求您为每台安装了任何 SQL Server 组件的计算机都拥有许可证。因此,报表服务器数据库与报表服务器服务位于不同服务器上的横向扩展部署需要为每台服务器提供单独的许可证。
          【解决方案8】:

          对于 VS2008,我相信 RDL 提供了比 RDLC 更好的编辑功能。例如,我可以使用 RDL 更改文本框中选定数量文本的粗体,而在 RDLC 中这是不可能的。

          RDL: abcd efgh ijklmnop

          RDLC:abcd efgh ijklmnop -或- abcd efgh ijklmnop(是您唯一的选择)

          这是因为 RDLC 使用的是 2005 年更早的命名空间/格式,而 RDL 使用的是 2008 年。但是这将随着 VS2010 改变

          【讨论】:

          • 这不是因为 rdl 和 rdlc 之间的差异,这是 sql server 报告服务 2005 和 2008 之间的差异。报告查看器可再发行组件,落后于 sql server 开发,支持客户端报告,这种滞后是您所描述的差异的原因。
          • 由于存在大量错误,我正在从 2005 (RDLC) 迁移到 2008 Reporting Services (RDL)
          【解决方案9】:

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

          缺点:与 SSrs 设计师相比,在 Visual Studio 中设计 rdlc 难度不大。

          Pro:维护简单。 在从我们的页面导出报告时,观察到与服务器端报告相比的性能提升。

          【讨论】:

            【解决方案10】:

            如果您想在 asp.net 中使用报告,请使用 .rdl 如果您想在报表生成器/报表服务器中使用 /view,请使用 .rdlc 只需手动转换格式就可以了

            【讨论】:

            • 这似乎使 RDL 和 RDLC 在运行位置方面交换了 - 即使没有,这也不会为现有的数十个答案添加任何有用的东西。跨度>
            • rdlc 是本地报告的扩展,您可以在 aspnet、winforms 或 wpf 中使用。 msdn.microsoft.com/es-es/library/ms252104.aspx。您不能在远程处理模式下使用 .rdlc 文件
            • 在修改方面是一样的吗?两者都可以在报表生成器中进行编辑?
            猜你喜欢
            • 2023-03-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-09-22
            • 2017-08-25
            • 2017-10-27
            • 1970-01-01
            相关资源
            最近更新 更多