何时在RDL报告上使用RDLC?


117

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

搜索此信息最多只能得到零碎的信息。我了解到:

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

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

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

更新:

ASP.NET论坛上的一个线程讨论了同样的问题。由此,我对这个问题有了更好的理解。

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

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

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

在我的应用程序中,仍然可以使用Reporting Services实例,并且可以轻松地从数据库中提取报表所需的数据。我是否有任何理由考虑使用RDLC,还是应该坚持使用RDL?

Answers:


83

根据我的经验,几乎没有两件事需要考虑:

I. RDL报告通常是HOSTED报告。这意味着您需要实现SSRS服务器。它们是SQL Server的Visual Studio的内置扩展,用于报告语言。安装SSRS时,应该添加一个名为“ Business Intelligence Development Studio”的插件,与没有报告相比,使用报告要容易得多。

[R扩展端口

d efinition

大号 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中组成OWN方法,以直接通过代码托管SSRS报告的服务器从服务中通过电子邮件发送,保存或处理SSRS数据。 使用ReportService2010.asmx从共享点以编程方式导出SSRS报告

缺点:

  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报告是任何地方都没有托管的CLIENT CONTAINED报告。名称中的额外c表示“客户”。通常,这是RDL语言的扩展,只能在Visual Studio客户端应用程序中使用。当您添加“报告”项时,它存在于Visual Studio中。

RDLC报告的优点:

  1. 您可以将wcf服务连接到数据集要容易得多。
  2. 您可以更好地控制数据集,并且可以直接使用填充有Entity Framework对象或ADO.NET的POCO类以及表本身。在将数据绑定到报表之前,您可以先对其进行优化。
  3. 您可以直接在后面的代码中使用添加项自定义外观。

缺点:

  1. 您需要自己处理参数,并且可以实现包装器方法来帮助进行常规工作,这比预期的和不幸的多了一点。
  2. 除非它处于远程模式并访问RLD报告,否则用户无法在“ ReportViewer”控件中查看参数。因此,您需要在控件外部自己制作文本框,下拉菜单,单选按钮以传递给它。有些人喜欢这种添加的控件,我个人没有。
  3. 您想要为报告提供服务时要做的任何事情都需要自己构建。电子邮件,订阅,保存。抱歉,您需要在.NET中进行构建,或者实现一个已经从上面完成此操作的代理,您可能只是在使用托管报表。

老实说,我出于不同的目的都喜欢。如果我想让分析人员知道他们一直在使用并调整图表,图表,向下钻取并导出到Excel,我会使用RDL,而让SSRS的站点负责处理电子邮件分发的所有工作。如果我想要一个具有报告部分的应用程序,并且我知道该应用程序是具有规则和治理的自己的模块,那么我将使用RDLC并使其参数更小,并由用户在进入报告部分之前所做的决定来驱动客户在现场,然后他们通常只选择时间范围或类型,仅此而已。所以通常来说,一个复杂的报告我将使用RDL,对于简单的事情,我将使用RDLC IMHO。

希望对您有所帮助。


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>MyEntity)自定义对象作为远程报告(RDL而不是RDLC的源吗?
Kiquenet

21

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

希望对您有所帮助。


3
我无法理解“客户端”部分,直到我意识到使用RDLC可以(甚至需要)手动将数据提供给报表,而不必强制连接到某些数据库。
达安

16

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

您的工作量可能会有所不同,并且我发现rdlc会增加开发和维护的复杂性,尤其是当您将报告设计为服务器端报告时。


我认为,就性能而言,最好将RDL报告放在运行Reporting Services的远程服务器中。您不需要更新每个客户工作站(您只需要在一个站点中更新一个报表)即可。在2005版本中存在内存泄漏,并且在使用报表服务时似乎可以避免一些小错误。
少年梅耶

1
我不赞成您要说的话。我们已经使用客户端报告找到了最佳性能。远程服务器上的RDL对我们来说是一个很大的瓶颈。
marr75 2010年

2
这在很大程度上取决于a)报表服务器的相对处理能力,以及b)是否将报表查看器控件配置为本地或远程处理。通过在本地处理模式下使用报表查看器控件,您正在将报表处理工作转移到客户端,这在报表服务器没有能力处理工作负载的情况下(例如,如果有很多客户端)可能是有益的。但是,规格合理的报表服务器应该能够处理大多数报表工作负载。其他瓶颈可能是报告/查询设计和数据源。
内森·格里菲斯

1
在我回答这个问题时,服务器端报告不能很好地处理并发用户,基本上一次只能处理一个请求(如果对此有所增强,我会感到非常惊讶)。此外,在我们的环境(以及我不得不假设的许多其他环境)中,与数据库服务器所做的工作相比,报告的呈现是非常小的细节。客户端报告使我们对应用程序的并发方面有了更多的控制。但是,它的确增加了系统的复杂性。因此,这是要做出的工程决策。
marr75 2012年

@ marr75-服务器与客户端的缩放比例不同。在服务器端,雇用25名员工时,您更有可能碰到一堵墙,而他们都一次撞到服务器。在客户端方面,所有25家企业都拥有自己的PC来担负重担,因此您可能根本不会遇到任何障碍-随着公司的发展,服务器端解决方案需要更多保姆。也就是说,您可以进一步优化服务器,并且只需要在一个地方完成-我在考虑建立正确的索引-涉及您的DBA。我的首选是使用客户端,但要同时优化两者以实现最佳性能!
MicroservicesOnDDD

11

其中一些要点已在上面解决,但是这是我在VS2008环境中的2美分。

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

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

关于本地报告的一个巨大警告是已知的内存泄漏,如果您的客户端将运行大量大型报告,则可能严重影响性能。应该使用新的VS2010版本的报表查看器解决此问题。

就我而言,由于我们有一个可用的Reporting Services实例,因此我将新报告开发为RDL,然后将它们转换为本地报告(这很简单)并将其部署为本地报告。


7

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


7

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

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

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


3
SQL Server许可仍然要求您为每台安装了SQL Server的ANY组件的计算机都拥有一个许可证。因此,报表服务器数据库与报表服务器服务位于不同服务器上的横向扩展部署需要为每个服务器分配单独的许可证。
内森·格里菲思

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之间的差异。Report View Redistributables(滞后于sql Server开发)支持客户端报告,这种滞后是造成差异的原因您正在描述。
marr75

1
由于存在大量错误,我从2005(RDLC)迁移到2008 Reporting Services(RDL)
JuniorMayhé2010年

1

如果我们的报告数量较少,那么报告的复杂性就会降低,asp.net网页会使用这些报告。最好使用rdlc,原因是我们可以避免维护RS实例的报告。但是我们必须手动从数据库中获取数据并将其绑定到rdlc。

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

优点:维护很容易。从我们的页面导出报告时,观察到与服务器端报告相比性能有所提高。


-3

如果要在asp.net中使用报表,请使用.rdl;如果要在报表构建器/报表服务器中使用/ view,请使用.rdlc,只需手动转换格式即可


这似乎使RDL和RDLC在它们的运行位置进行了交换-即使没有运行,也不会为数十个现有答案添加任何有用的东西。
underscore_d

rdlc是用于本地报告的扩展,可以在aspnet,winforms或wpf中使用。msdn.microsoft.com/es-es/library/ms252104.aspx。您无法在远程处理模式下使用.rdlc文件
dgzornoza
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.