基础查询语句
<mapper namespace="com.visual.chart.mapper.ProductInfoMapper"> <!-- 商品种类 --> <select resultType="java.lang.Integer"> SELECT COUNT(product_name) FROM vc_product_info </select> <!-- 销售总额度 --> <select resultType="java.lang.Double"> SELECT SUM(sales_amount) FROM vc_product_info </select> <!-- 分组求和 --> <select resultType="java.util.Map"> SELECT product_sort,SUM(sales_amount) FROM vc_product_info GROUP BY product_sort </select> <!-- 平均单价 --> <select resultType="java.lang.Double"> SELECT AVG(price) FROM vc_product_info </select> </mapper> 四、自定义工具 1、数据集数据集概念
DataSet是一个数据的集合,通常以列表形式出现。每一列代表一个特定变量。每一行都对应于某一成员的数据集的问题。在统计分析的业务中,通常称为大宽表,方便业务分析。
数据集生成
视图方式
基于视图的方式,生成一个单表的数据集,方便简化操作。该方式不提倡,视图在大部分公司里是禁止使用的,这里只是单纯演示。
基于上述产品信息表和维度表,通过视图手段生成数据集,单纯为了简化业务分析的操作难度,因为多表联合简化成感觉上的单表。
CREATE OR REPLACE VIEW data_set_view AS SELECT t1.*, t2.place_origin, t2.weight, t2.color, t2.high_praise, t2.low_praise FROM vc_product_info t1 LEFT JOIN vc_product_detail t2 ON t1.id = t2.product_id任务方式
通过定时任务,获取要分析的数据结构,不断注入到分析表中,这是业务开发中最常见的报表数据集生成方式,有的甚至通过定时任务直接统计出报表需要的数据,不适应于大数据场景。
离线或实时计算
通过大数据分析手段,离线计算或者实时计算,获取业务报表数据,注入OLAP实时分析计算库,使用大数据分析场景。
2、定制化BI工具BI工具可以快速对业务数据进行有效的整合,快速准确的提供报表并提出决策依据,帮助企业做出明智的业务经营决策。商业智能的概念最早在1996年提出。当时将商业智能定义为一类由数据仓库(或数据集市)、查询报表、数据分析、数据挖掘、数据备份和恢复等部分组成的、以帮助企业决策为目的技术及其应用。
基本搭建思路:
管理数据源,建立数据表之间关系,维护特定数据集;
创建可拖拉拽的报告面板,用来承载单个图表组合;
封装不同的图表的处理逻辑,规则展示,关联数据集字段;
封装图表样式,例如大小、颜色、背景、交互等可配置;
图表关联分析数据集,报告面板组合多个图表生成报告;
实际的开发过程是非常复杂的,管理各个业务线的数据源,联合分析,适配各种图表规范和样式,都是一个十分漫长的过程。
3、基础案例接口入参
承接上述业务场景,这里参数都需要动态传入,例如操作的:数据集、图表、参数归属轴、或者业务产品参数等。
@RestController public class DefineController { @Resource private DataSetService dataSetService ; /** * 自定义可视化报告入参 */ @GetMapping("/getDefChart") public Map<Integer, List<ChartParam>> getDefChart (){ List<ChartParam> chartParamList = new ArrayList<>() ; chartParamList.add(new ChartParam("X",1,"data_set_view","product_sort")) ; chartParamList.add(new ChartParam("X",1,"data_set_view","product_name")) ; chartParamList.add(new ChartParam("Y",2,"data_set_view","high_praise")) ; chartParamList.add(new ChartParam("Y",2,"data_set_view","low_praise")) ; chartParamList.add(new ChartParam("Z",3,"data_set_view","inventory",1)) ; chartParamList.add(new ChartParam("Z",3,"data_set_view","total_sales",1)) ; return dataSetService.analyData(chartParamList); } }参数解析