编译原理之美
宫文学
北京原点代码 CEO
46197 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 45 讲
开篇词 (1讲)
编译原理 · 期中考试周 (1讲)
编译原理之美
15
15
1.0x
00:00/00:00
登录|注册

15 | 前端技术应用(二):如何设计一个报表工具?

其他函数
统计函数
排名次
人均销售额计算公式
Excel
BI软件
SQL语句作为数据源
暴露技术细节
renderReport方法
运行时对字段和公式进行计算
专注领域问题
屏蔽实现细节
HTML模板
XML文件
计算字段的公式组合
支持函数
计算字段
业务级用户
程序员
编译技术的帮助
实现方式
用户自定义功能的需求
一课一思
应用编译器前端技术
DSL
编译技术支持
灵活、强大的报表工具
示例报表模板
优化
报表数据的存储
向量数据的计算器
主控程序
渲染报表
FieldEvaluator类
获取数据源数据
解析报表的定义
支持函数调用
表达式语法
PlayReport.g4规则文件
DSL
报表定义文件
图形化界面设计报表
面向用户类型
一课一思
课程小结
实现一个简单的报表引擎
编写所需要的语法规则
如何设计报表
报表工具所需要的编译技术
前端技术应用(二):如何设计一个报表工具?

该思维导图由 AI 生成,仅供参考

众所周知,很多软件都需要面向开发者甚至最终用户提供自定义功能,在开篇词里,我提到自己曾经做过工作流软件和电子表单软件,它们都需要提供自定义功能,报表软件也是其中的典型代表。
在每个应用系统中,我们对数据的处理大致会分成两类:一类是在线交易,叫做 OLTP,比如在网上下订单;一类是在线分析,叫做 OLAP,它是对应用中积累的数据进行进一步分析利用。而报表工具就是最简单,但也是最常用的数据分析和利用的工具。
本节课,我们就来分析一下,如果我们要做一个通用的报表工具,需要用到哪些编译技术,又该怎样去实现。

报表工具所需要的编译技术

如果要做一个报表软件,我们要想清楚软件面对的用户是谁。有一类报表工具面向的用户是程序员,那么这种软件可以暴露更多技术细节。比如,如果报表要从数据库获取数据,你可以写一个 SQL 语句作为数据源。
还有一类软件是给业务级的用户使用的,很多 BI 软件包都是这种类型。带有 IT 背景的顾问给用户做一些基础配置,然后用户就可以用这个软件包了。Excel 可以看做是这种报表工具,IT 人员建立 Excel 与数据库之间的连接,剩下的就是业务人员自己去操作了。
这些业务人员可以采用一个图形化的界面设计报表,对数据进行加工处理。我们来看看几个场景。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何设计一个报表工具所需要的编译技术、报表设计以及编写所需的语法规则。文章指出报表工具需要面向不同类型的用户,包括程序员和业务级用户,因此需要暴露更多技术细节或提供图形化界面设计。详细介绍了报表工具中的计算字段和支持的函数,以及如何设计报表的XML文件和HTML模板。还提到了DSL(特定领域语言)的应用,以及编写报表所需的语法规则。强调了实现一个简单的报表引擎的重要性,以便实际生成报表。文章深入浅出地介绍了报表工具的设计和实现过程,为读者提供了全面的技术指导。通过示例代码展示了报表引擎的工作原理,包括报表定义的解析、数据源获取、字段计算和报表渲染。同时,强调了编译技术在报表工具中的应用,以及如何结合领域特点形成DSL,赋予用户编程能力。总体而言,本文为读者提供了在某个应用领域应用编译技术的直观了解和启发。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《编译原理之美》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • 风的呢喃,爱的絮语
     这个也可以用来做代码自动生成吧,通过一个图形化的界面拖拖拽拽设置下值 自动生成符合文法的业务功能描述文件 解析这个文件生成程序代码

    作者回复: 没错的。 通过图形化的界面,进行可视化的编程,实际上是目前发展比较快的一个领域。现在被叫做“低代码开发”或“零代码开发”。我曾经也在这方面做过工作。

    2019-12-07
    2
    11
  • hhhh
    目前在做一个监控报警系统,用户可以自定义规则,例如 request_timeout > 10s | cpu_usage > 2, 需要用到简单的词法分析,语法分析,以及语义分析,从而执行对应的操作。

    作者回复: 用户自定义规则。非常好。非常典型的场景。感谢分享!

    2020-05-25
    2
  • 雲至
    老师 生成的解析器是怎么样调用的 能在详细说一下吗?

    作者回复: 调用的主控逻辑在PlayReport.renderReport中。要编译报表模板中的每个字段(含公式),然后在渲染报表的时候,调用FieldEvaluator进行计算。 FieldEvaluator跟之前的计算器没什么差别,只不过进行的是向量(矢量)计算,一次计算一整列。都是解释执行AST。

    2019-09-17
    2
  • 神经旷野舞者
    最近也要学数据库,公司数据很多,客服,产品都要查数据,有什么思路可以让他们自己查的

    作者回复: 这需要普通用户(非技术人员)可以使用的那种报表工具。有一些产品是针对这种场景的。 基本思路是:你要设计一个语义层,屏蔽底层的细节,让用户拖拽过来几个数据指标,就能实现查询。你可以用编译技术实现语义层与底层实现之间的翻译。 采用这个思路,你还可以实现低代码或无代码的编程工具,让不怎么懂技术的人也可以做编程。

    2020-04-03
    1
  • 万木春
    老师,这节课怎么没有提供相关的源代码?

    作者回复: 在lab/report目录下。 https://github.com/RichardGong/PlayWithCompiler/tree/master/lab/report 我在文章末尾加一下链接!

    2019-10-06
    1
  • 竟舟
    有时候想和老师道个歉, 向自己道个歉, 从来没认清自己的现状.

    作者回复: 啥情况? 从学习中获取乐趣就是了!

    2021-08-08
  • James Deng
    老师,我们遇到用户自定义的场景实际还是研发把某些function定义并实现好,然后用户看着去用,但真正的自定义应该是用户自己定义并且实现该function的,这个就要开放用户去编码了?
    2022-10-26归属地:广东
    1
  • 神经旷野舞者
    老师那拖拽可视化实现有什么框架吗,对前端也不懂,感觉有点迷茫,这种封装语义拖拽有什么开源推荐码
    2020-04-17
    1
  • 柯察金
    老师,我请假一下,根据用户已经输入的 sql,自动提示补充,一般怎么做啊,可以给个思路嘛
    2024-02-12归属地:美国
  • 潜龙勿用
    数据权限也可以用编译技术来实现。数据权限可以表达成一个表达式,比如 city=广州。那么通过解析这个表达式,然后生成对应数据库的条件语句来实现数据权限。
    2021-07-05
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部