我需要在 ASP.NET 中编写一个动态报表生成器,我应该从哪里开始?

Posted

技术标签:

【中文标题】我需要在 ASP.NET 中编写一个动态报表生成器,我应该从哪里开始?【英文标题】:I need to code a dynamic report builder in ASP.NET, where should I start? 【发布时间】:2012-12-28 21:51:09 【问题描述】:

我的任务是创建一个动态报告构建器来扩展我们当前的产品,该产品应该允许我们的用户相对轻松地配置一个有用的报告,从他们输入到系统中的数据中提取数据。目前我们手动定制这些报告,这个过程涉及开发人员(我)获取报告的要求(字段、总计、百分比等)并将结果发布为一个相对交互式的页面,允许“向下钻取” ' 在记录行等中获取更多信息。

这些报告并不是非常复杂,但它们涉及的内容足够多,以至于以编程方式生成这些报告似乎是不可能的。我觉得创建一个界面以允许用户自定义报告的外观应该不会太难,尽管它本身就涉及到。我不知所措的是如何创建一个界面,让完全没有“编程”素养的用户能够轻松生成 SQL 查询,从而获取他们需要的信息。

事实上,他们需要能够创建这些查询并访问其输入数据的内部内容,而无需知道自己真正在做什么。我觉得要按要求工作,报告的生成必须尽可能与魔法没有区别。用户应该能够从可能的数据集中拖放他/她需要的内容并神奇地生成报告。

我当然愿意接受挑战,但我真的不知道从哪里开始。一旦我开始行动,解决个别问题将变得“容易”(实际上更像是过程的一部分),但起步一直充满挑战和令人沮丧。如果有人能给我一个搜索的方向,我不怕花时间。感谢您的宝贵时间,我期待一些积极的建议。

【问题讨论】:

我不知道您是否正在寻找开箱即用的解决方案,但您是否调查过 s-s-rS 附带的report builder?它的行为类似于 Office 应用程序(尽管是一个复杂的应用程序),并且不需要太多的技术敏锐度来构建报告。 Excel 高级用户可以掌握基础知识。 好眼光,但我们已经讨论了这一点以及想要在内部创建不需要先前知识的东西的力量:像拖放这样的东西点击这里 UX。我也曾短暂地研究过诸如 Crystal Reports 之类的东西,但我很早就在这条路上被击落了。感谢您的评论。 好吧,Google Analytics 有一个拖放式 UI 可用于创建简单的临时报告……您可以将它展示给您的业务用户,然后看看该范例是否足够简单(但稳健)你花时间建造任何东西。显然,谷歌在这方面投入了大量时间,所以真正构建这样的东西并非易事。 在我之前的工作中,我们浪费了几个月的时间来尝试在一个 2 开发人员团队中设计和构建您所描述的内容。除非您计划在未来 2 年(或更长时间)致力于构建此系统,否则您的管理层需要考虑替代方案,或者开箱即用的解决方案是否可行 我绝对不想在这方面工作 2 年!在大约三个月的时间里,这一直在冒泡,因为自定义报告的输出使我们的资源不堪重负,我们需要“快速”采取行动(或至少有一个长期计划)。 【参考方案1】:

我之前曾接到过类似的任务。我的建议:不要。除非所需的报告非常基本,并且您的用户不关心报告的外观,否则实施将花费大量时间。随着您指示您的单人团队,请不要。雇用初级开发人员或实习生或其他人来处理这部分工作对您来说(即使从长远来看)会更便宜。

现在,有几种不同的报表设计器。我还没有看到任何完全在网页上工作的东西,而且从非程序员的角度来看,它们都非常糟糕。

现在,有办法解决这个问题。大多数想要这些类型的报告的人都知道如何使用 Microsoft Access。您可以利用他们的知识让他们创建自己的报告。这不是微不足道的,因为您不希望它们只是连接到您的数据库。所以,这是我的建议:

    生成与 Access 兼容的可下载数据库 确保下载的数据库“易于”使用。这意味着复制数据并对很多东西进行非规范化 确保您不会在可下载的数据库中留下任何敏感信息(密码、他们不应该看到的内部信息等) 最后,确保他们能够以安全的方式下载它并且它是高性能的。您可能需要告诉您的用户,可下载的数据库仅每周或每月“同步”一次,因为实时同步的成本相对较高

【讨论】:

MS Access 带来了自己的问题。通常,这些用户开始在数据库之外构建自己的应用程序,突然之间,您就有了一个未记录的 MS Access 系统,该系统严重依赖于您必须支持或重新集成到主应用程序中。【参考方案2】:

看看数据仓库的作用(例如The Data Warehouse Toolkit)。他们创建了几个非常宽的基本表,包含大量冗余数据并涵盖数据库的某个方面。

我会创建几个这样的宽视图,并让用户选择一个视图作为动态报告的基础。然后他们可以选择要显示的列、排序和分组。但他们不能选择任何额外的表或视图。

当然,一个典型的视图必须真正涵盖有关数据库某个方面的所有内容。假设您有一个 Order Items 视图。这样的视图将包含所有订单的所有项目,提供数百列,涵盖:

订单产品 ID、产品名称、正常价格、折扣、支付价格、含价格运费等相关部分。 订单 ID、订单日期、交货日期、运费等。 客户 ID、客户名称、客户地址等 每个日期由几列组成:完整日期、一年中的某天、月份、年份、季度、带有年份的季度等。 每个地址由完整地址、城市、州、地区、区号等组成。

这样,动态报告相当容易使用,因为用户不需要加入任何表格,而是拥有他们需要的所有数据。

【讨论】:

我喜欢使用视图和排除键等的“大表”方法的想法。想到的问题是您如何处理聚合数据、汇总等。我创建了一些自定义交互式报告这解决了将所有信息放在一个大表中并允许用户使用复选框或其他任何东西来决定进出什么的想法,但是您如何允许用户访问汇总的内容?我有几份报告涉及 10 个表联合和总和以及所有内容,它有点棘手。感谢您的评论! 是的,我也喜欢这种方法,我想知道聚合数据。【参考方案3】:

我建议您查看现成的报告组件。例如Microsoft's Reporting Services、Telerik、DevExpress 或(我应该承认,我们的产品)SharpShooter Reports

【讨论】:

【参考方案4】:

开始环顾四周,有哪些报告工具?那里有什么东西甚至接近他们的期望吗? 周围的工具将是通用的,您的案例可能相当具体。您已经知道用户正在寻找的部分答案。 您的解决方案应该以这种方式帮助他们。

你使用了“魔法”这个词。这应该是一个巨大的警告信号。作为开发人员,我们不做魔法,我们做逻辑。我们可以创造幻觉,我们不能施展魔法。

我会深入研究 Sql Analysis Services 和 Excel。 有一个演示文稿over here。这些人也不会魔法,但他们可以做很多事情。

【讨论】:

也许我应该用错觉这个词,但就是这样。我想创造轻松的错觉,而所有繁重的工作都在幕后无形中进行。感谢您的评论!【参考方案5】:

我们结合使用 EasyQuery 和 FastReport.NET。

EasyQuery 允许我们的用户构建动态查询并提取报告和 FastReport 所需的数据 - 用于实际报告生成并将其导出到 Excel 或 PDF。

【讨论】:

【参考方案6】:

看看 zpmsoftware.com。它有一个用于 ASP.NET MVC 的开源报告生成器,并输出到屏幕、excel 和 pdf。适应Webforms没有太多麻烦。由于大多数花哨的东西都在 jquery/javascript 中,因此适应其他服务器环境应该是可行的。

【讨论】:

以上是关于我需要在 ASP.NET 中编写一个动态报表生成器,我应该从哪里开始?的主要内容,如果未能解决你的问题,请参考以下文章

即时生成水晶报表

在 Crystal Report 和 ASP.NET C# 中使用子报表

ASP.NET 在运行时动态生成引导面板

asp.net mvc 3 和动态视图生成

Asp.Net 动态生成验证码

如何在 ASP.NET 中动态生成列表项到无序列表?