自助报表分析 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 可以在任意应用中轻易获得。