sql - 关于已知模式的自定义用户驱动报告

标签 sql reporting

有一个即将开展的项目旨在满足最终用户能够根据我们固定/已知架构关系数据库中的数据生成自定义报告的要求。

界面需要对用户非常友好,因此将所有 t-sql 的语言概念转换为图形范式对于项目团队和最终用户来说都过于复杂。

围绕满足这一业务需求存在哪些研究或产品(开源或其他)?我知道一般的业务分析工具,但这是更具体的,我试图更好地理解问题域,而不是试图从供应商营销 Material 中进行逆向工程。

我假设研究将采用某种模式编码的形式,该模式指定允许哪些连接和表,哪些字段可用,然后是一种允许用户在可能的组合中选择一个特定有效组合的方法许多,生成查询,并显示结果。

头脑 Storm - 按复杂程度排序的功能支持:SELECT、WHERE 过滤器、FULL JOIN、LEFT JOIN、排序、分页、分组、聚合、HAVING 过滤器。

我的备份计划是将其简化为预先编写的 SQL View (内置 JOIN),并能够通过自定义行过滤显示可用列。分页和排序是可行的。这本身不允许分组、聚合函数、HAVING 过滤器或其他行间分析。

最佳答案

作为@Dems 帖子的后续(评论框还不够 :))..

在大多数情况下都同意。如果您的数据主要是分析性的,那么您可能需要研究像 PowerPivot 这样的工具。 .在这种情况下,您可以编写一个通用查询,然后允许用户根据熟悉的工具 (Excel) 中的结果集派生报告。

在每个临时报告引擎的核心,您会发现一些共同的主题:

元数据
将有一些描述模式的方式,以便用户可以轻松使用模型。 Sql Server Reporting Services (SSRS) 需要您构建元数据模型才能使用报表生成器。使用 PowerPivot 时,您可以为列名称起别名以使其更具可读性,但最终,您只是提供了一个平面数据集并允许用户构建连接/关系。

查询生成器
一旦用户操作了元数据,就必须有一个中介系统将概念报告转换为实际查询。许多工具是根据它们生成的 Sql 的复杂性来衡量的,因为这会极大地影响性能。解决这个问题的一种方法是创建报告引擎可以针对其构建查询的 View 。我见过的最好的开源示例之一是支持 Hibernate/NHibernate 的引擎(查看在构建查询时如何使用各种 Dialects)。

渲染引擎
根据我的经验,构建渲染引擎并不是一条你想走的路。有许多特定于设备的问题以及外观问题(即您打算如何表示级联连接/关系?)。每个渲染引擎都有自己的怪癖(PowerPivot 使用 Excel,SSRS 有一项服务可以构建原始结果并将其返回给消费应用程序),因此必须考虑到这一点,因此请谨慎选择。

之前我提到我同意大多数情况。我不建议鼓励您的用户学习 Sql 或允许他们将 Sql 传递到底层数据存储。这为编写恶意代码打开了大门,并可能成为安全噩梦。更不用说大多数业务用户考虑的是平面表,而不是分层集。

弄清楚您的用户对什么感到满意,并尝试使您的解决方案适合该领域。我经常发现对于经验丰富的业务用户来说,像 PowerPivot 这样的东西是完美的。对于更多的日常最终用户,拥有可能由最终用户通过允许他们修改限制/分组/排序的简单用户界面修改的“固定”报告更有用。

关于sql - 关于已知模式的自定义用户驱动报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6425347/

相关文章:

mysql - 如何在 MySQL 上仅使用 SQL 将数字添加到表中?

sql - 练习 “exists (select 1 from …)”来自哪里?

mysql - 相同的 MySQL 查询在 5.6 中的运行速度比在 5.1 中慢得多

c#-4.0 - ReportViewer页面方向

sql - MySQL 中的串联范围描述

mysql - SQL注入(inject)易受攻击?

elasticsearch - 反对将 Elasticsearch 用作 OLAP 多维数据集的原因

web-services - 您可以将 Web 服务用作邮件合并的数据源吗

c++ - Linux/C++/Gtk 的报告库?

wpf - WinForms ReportViewer 挂起应用程序 WPF