开源 BI 实践:将表和字段显示成业务术语
将表和字段显示成业务术语
制作语义层
数据库表、字段名通常是英文的,而且常常也是缩写,直接查出来做多维分析不友好,业务用户常常会看不懂。
当然,在写 SQL 时可以用 AS 改成其它名称,例如:
SELECT name AS 姓名, gender AS 性别 FROM employees
但这样每次都要写,临时写一两句 SQL,涉及字段不多时还凑合,否则长期重复在 SQL 中做中英文名称匹配就会比较烦。
润乾 BI 提供 DQL 语义层,可以一次性重定义表名、字段名,然后基于这个语义层提供 DQL 查询服务,DQL 查询语句将使用重定义的 (中文) 名称。下面从 Mysql 的 tpch 库开始创建语义层、部署 DQL 服务、用 DQL 查询数据做多维分析。
打开 DQL 设计器:{润乾报表根目录}/bin/dql.exe,新建一个语义层元数据:
在菜单“系统→数据源”里创建 tpch 数据源:
然后连接上 tpch 数据源(连接成功后变为粉色):
之后就可以直接选择整个数据库的表导入 (系统→导入数据库表):
然后对各个表、字段设置中文名称:
设置完成后,可以尝试执行 DQL(系统→翻译 DQL),能看到 DQL 被翻译成了带别名的 SQL,并且查询出了数据,这个简单查询语句的语法看起来和 SQL 一样,实际上它是 DQL 语句,以后涉及多表关联查询时,就会看出显著差异,现在先把它当 SQL 用:
部署配置 DQL 查询服务
在设计器里完成了语义层元数据的制作,经过测试也能正确执行 DQL 语句了。
下一步把它部署为 DQL 服务,就能用 JDBC 方式给 WEB 端提供 DQL 查询服务了。
{润乾报表安装根目录}/services 下每个文件夹是一个 DQL 服务,默认有 datalogic 服务,我们新建一个 tpch 文件夹,把上面做好的 tpch.lmd 放到 services/tpch/conf 目录下:
然后新建这个服务的配置文件 services/tpch/service.xml,指定语义层元数据文件 tpch.lmd,配置原始 Mysql 数据库连接:
<?xml version="1.0" encoding="UTF-8"?>
<SERVICE logicmetadata="tpch.lmd">
<DB type="MYSQL">
<CONNECTION name="db1" type="jdbc" url="jdbc:mysql://127.0.0.1:3306/tpch"
driver="com.mysql.jdbc.Driver" user="root" password="123456"/>
</DB>
<USERS>
<USER name="root" password="root">
<CONNECTION name="db1"/>
</USER>
</USERS>
</SERVICE>
再编辑 DQL Server 的配置文件 services/server.xml,增加 tpch 服务:
这样就配置完成了,然后启动 ${润乾报表安装根目录}/bin/startDQLSERVER.bat,看到 datalogic、tpch 两个服务都成功启动了:
WEB 端使用 DQL 服务查询数据
在 WEB 的配置文件 {WEB 应用根目录}/WEB-INF/raqsoftConfig.xml 里增加这个 DQL 服务的 JDBC 数据源,连接地址为 jdbc:datalogic://127.0.0.1:3366/tpch,指定了连接 DQL Server 的 tpch 服务,连接的驱动类是 com.datalogic.jdbc.LogicDriver:
……
<DB name="TPCH">
<property name="url" value="jdbc:datalogic://127.0.0.1:3366/tpch"/>
<property name="driver" value="com.datalogic.jdbc.LogicDriver"/>
<property name="type" value="16"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
</DB>
……
之后就可以在界面上使用 TPCH 这个数据源做 DQL 查询了,创建一个 DQL 数据集:
用这个数据集做个多维分析报表:
预定义计算字段
除了可把表名和字段名翻译成业务语外,元数据里还可以预定义计算字段,把基础信息预先加工出更多用于多维分析的信息:
在 DQL 里增加成交价格,也查询出来结果了:
后记
本篇文章了解了 DQL 语义层的制作、部署以及使用。数据库结构在较长时间里通常比较稳定,通过一次性定义语义层,改善后续长久的查询体验。
但语义层的作用不仅仅是翻译字段名、预定义计算字段,DQL 对表关联的认识方法与 SQL 有本质上的不同,业务人员缺乏技术能力,但借助 DQL 的思维方式,将很大程度提升自己获取数据的能力,多维分析时减少对技术人员的依赖,就会显著提升敏捷性,下篇文章我们继续详细了解。