自助报表分析 2:给一句 SQL 就能做多维分析
数据库作为最常见的数据源,如果能基于给定的 SQL(查询结果)在应用中实施多维分析将非常方便。
首先将数据库驱动 jar 放置到应用 lib 目录下。然后在核心配置文件 raqsoftConfig.xml 中配置数据源连接。
<?xml version="1.0" encoding="UTF-8"?><Config Version="3">
<Runtime>
<DBList encryptLevel="0">
<DB name="DBTPCH">
<property name="url" value="jdbc:hsqldb:hsql://127.0.0.1/tpch"/>
<property name="driver" value="org.hsqldb.jdbcDriver"/>
<property name="type" value="13"/>
<property name="user" value="sa"/>
<property name="password"/>
…
</DB>
…
</DBList>
</Runtime>
</Config>
配置完成后,准备页面(olap_db.jsp),仍然采用 tag-lib 方式嵌入发布标签。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/raqsoftAnalyse.tld" prefix="raqsoft" %>
<raqsoft:analysev2
dataSource="DBTPCH"
ql="SELECT * FROM customer"
/>
JSP tag-lib(/WEB-INF/raqsoftAnalyse.tld)中用 dataSource、ql 属性分别指定数据库连接名、SQL 语句,当然也可以通过参数传递。
访问 jsp,就看到 customer 表的数据了:
点开管理数据集,可以看到这个数据库查询的单表数据集,在 DBTPCH 源里执行 SQL 查询:
基于这个 SQL 查询出的数据集,可以进一步做分组表格、统计图多维分析:
用 SQL 别名改善数据标题
数据库里的字段名往往是英文的,有时还有缩写,对 BI 用户不友好,可以在 SQL 里用 AS 别名改善:
SELECT C_CUSTKEY AS 编号
, C_NAME AS 名称
,C_NATIONKEY AS 国家编号
,C_PHONE AS 电话
,C_ADDRESS AS 地址
,C_COMMENT AS 备注
FROM customer
修改 SQL 后再访问,可以看到改成中文标题了:
JOIN 维表把代码替换成名称
客户表里存储的是国家编号,显示编号不直观,可以用 SQL JOIN 连接 nation 表获得国家名称:
SELECT c.C_CUSTKEY AS 编号
, c.C_NAME AS 名称
, n.N_NAME AS 国家名称
, c.C_PHONE AS 电话
, c.C_ADDRESS AS 地址
, c.C_COMMENT AS 备注
FROM customer c JOIN nation n ON c.C_NATIONKEY=n.N_NATIONKEY
在应用中集成基于数据库(SQL)的自助报表分析也很简单,文件数据集和 SQL 数据集可以覆盖相当一部分的自助需求,而且这种能力基于润乾 BI 可以在任意应用中轻易获得。