最后说一下,最开始的demo
我们已经知道如何使用echarts来展示mysql数据源中的数据了
后面就是写各种统计的sql语句,并组装成各种echarts的option了
然后就是对其就行布局就可以了。布局用到了一个前端框架 UIkit
数据源CDA
一个xml中有多个查询
折叠
<?xml version="1.0" encoding="UTF-8"?><CDADescriptor> <DataSources> <Connection id="mysql" type="sql.jdbc"> <Driver>com.mysql.jdbc.Driver</Driver> <Pass>123456</Pass> <Url>jdbc:mysql://192.168.103.90:3306</Url> <User>root</User> </Connection> </DataSources> <DataAccess access="public" connection="mysql" id="query1" type="sql"> <Name>query1</Name> <Cache duration="3600" enabled="true"/> <Columns/> <Parameters/> <Query><![CDATA[ SELECT 单位名称,count(0) as num FROM pentaho.salesdata group by 单位名称 ORDER BY count(0) desc LIMIT 10; ]]></Query> </DataAccess> <DataAccess access="public" connection="mysql" id="query2" type="sql"> <Name>query2</Name> <Cache duration="3600" enabled="true"/> <Columns/> <Parameters/> <Query><![CDATA[ select c.`销售`,c.`销售额` from (SELECT m.`销售` as 销售,SUM(m.`售价`) as 销售额 FROM pentaho.salesdata m GROUP BY m.`销售` ORDER BY SUM(m.`售价`) desc LIMIT 0,10 ) as c ORDER BY c.`销售额`; ]]></Query> </DataAccess> <DataAccess access="public" connection="mysql" id="query3" type="sql"> <Name>query2</Name> <Cache duration="3600" enabled="true"/> <Columns/> <Parameters/> <Query><![CDATA[ SELECT m.`产品类别名称`,SUM(m.`数量`) as 销售总量 FROM pentaho.salesdata m GROUP BY m.`产品类别名称` ORDER BY SUM(m.`数量`) desc LIMIT 10; ]]></Query> </DataAccess> <DataAccess access="public" connection="mysql" id="query4" type="sql"> <Name>query2</Name> <Cache duration="3600" enabled="true"/> <Columns/> <Parameters/> <Query><![CDATA[ SELECT m.`订单日期`,m.`订单数` as 订单数 FROM pentaho.t_daycount m GROUP BY m.`订单日期` ; ]]></Query> </DataAccess> <DataAccess access="public" connection="mysql" id="query5" type="sql"> <Name>query2</Name> <Cache duration="3600" enabled="true"/> <Columns/> <Parameters/> <Query><![CDATA[ select t.`产品类别名称`,SUM(t.`总价`) as 总销售额 from t_price t GROUP BY t.`产品类别名称` ORDER BY SUM(t.`总价`) desc LIMIT 0,5 ]]></Query> </DataAccess> <DataAccess access="public" connection="mysql" id="query6" type="sql"> <Name>query6</Name> <Cache duration="3600" enabled="true"/> <Columns/> <Parameters/> <Query><![CDATA[ SELECT t.`订单日期`,t.type,t.`订单量` FROM pentaho.t_addorcontinue t; ]]></Query> </DataAccess></CDADescriptor>
前端结构
mycss:是自定义样式(内置类型)
echarts:引入的echarts文件
china:地图文件
myjs:初始化图表的文件
containerabc:写html的对象
mycss 内容:
折叠
.container{ width:100%; background-color:#030A19;} .uk-panel-box{ background:#151726 !important;}
containerabc 的HTML属性:
折叠
<script src="https://cdn.bootcss.com/uikit/2.27.5/js/uikit.min.js"></script><link href="https://cdn.bootcss.com/uikit/2.27.5/css/uikit.min.css" rel="stylesheet"><div class='uk-grid uk-grid-small'> <div class='uk-width-2-10'> <div class='uk-grid'> <div class='uk-width-1-1'> <div class='uk-panel uk-panel-box uk-panel-primary'> <div id='container' style='width:100%;height:400px;'>加载中... </div> </div> </div> </div> <div class='uk-grid'> <div class='uk-width-1-1'> <div class='uk-panel uk-panel-box uk-panel-primary' > <div id='container2' style='width:100%;height:400px;'>加载中... </div> </div> </div> </div> </div> <div class='uk-width-6-10'> <div class='uk-grid'> <div class='uk-width-1-1'> <div class='uk-panel uk-panel-box uk-panel-primary'> <div id="containermap" style="width:100%;height:600px;">加载中...</div> </div> </div> <div class='uk-width-1-1'> <div class='uk-panel uk-panel-box uk-panel-primary'> <div id="container5" style="width:100%;height:236px;">加载中...</div> </div> </div> </div> <div class='uk-grid'> </div> </div> <div class='uk-width-2-10'> <div class='uk-grid'> <div class='uk-width-1-1'> <div class='uk-panel uk-panel-box uk-panel-primary'> <div id='container3' style='width:100%;height:400px;'>加载中... </div> </div> </div> </div> <div class='uk-grid'> <div class='uk-width-1-1'> <div class='uk-panel uk-panel-box uk-panel-primary' > <div id='container4' style='width:100%;height:400px;'>加载中... </div> </div> </div> </div> </div></div>
myjs文件:
折叠
function getCDAData(url){ var result; $.ajax({ type:'get', url:url, async:false, success:function(data){ result = data; } }); return result;}function chartSet(ele,option){ var dom = document.getElementById(ele); var myChart = echarts.init(dom); var app = {}; if (option && typeof option === "object") { myChart.setOption(option, true); }}function getLineOption(){ return { title: { left: 'center', text: '', textStyle:{ color:'#fff' } }, tooltip: { trigger: 'axis' }, xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], splitLine : { show:false }, axisLabel:{ rotate:45, color:'#fff', fontSize :10 } }, yAxis: { type: 'value', data:[], splitLine : { show:false }, axisLabel:{ rotate:45, color:'#fff', fontSize :10 } }, series: [{ data: [820, 932, 901, 934, 1290, 1330, 1320], type: 'line', smooth: false, }] };}function getPieOption(){ return{ title: { left: 'center', text: '', textStyle:{ color:'#fff' } }, tooltip: { trigger: 'item', formatter: "{a} <br/>{b}: {c} ({d}%)" }, legend: { //orient: 'vertical', x : 'center', y : 'bottom', padding :[15,0,0,0], data:['直接访问','邮件营销','联盟广告','视频广告','搜索引擎'], textStyle :{ color:'#fff' } }, series: [ { center: ['50%', '40%'], name:'访问来源', type:'pie', radius: ['50%', '70%'], avoidLabelOverlap: false, label: { normal: { show: false, position: 'center' }, emphasis: { show: true, textStyle: { fontSize: '30', fontWeight: 'bold' } } }, labelLine: { normal: { show: false } }, data:[ {value:335, name:'直接访问'}, {value:310, name:'邮件营销'}, {value:234, name:'联盟广告'}, {value:135, name:'视频广告'}, {value:1548, name:'搜索引擎'} ] } ] }}function getBarOption(){ return { title: { left: 'center', text: '', textStyle:{ color:'#fff' } }, tooltip: { trigger: 'axis', }, xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], axisLabel:{ rotate:45, color:'#fff', fontSize :8 }, splitLine : { show:false } }, yAxis: { type: 'value', axisLabel:{ rotate:45, color:'#fff', fontSize :8 }, splitLine : { show:false } }, series: [{ center: ['55%', '40%'], data: [120, 200, 150, 80, 70, 110, 130], type: 'bar', show:true, label:{ rotate:90 } }] };}function initChart1(){ var result = getCDAData('/pentaho/plugin/cda/api/doQuery?path=/public/demo/pentahodemo.cda&dataAccessId=query1'); //var option = getLineOption(); var option = getBarOption(); var xdata = []; var ydata = []; for(var i=0; i<result.resultset.length; i++){ xdata.push(result.resultset[i][0]); ydata.push(result.resultset[i][1]); } option.title.text='订单量 top 10' option.xAxis.data = xdata; option.series[0].data = ydata; chartSet('container',option);}function initChart2(){ var result = getCDAData('/pentaho/plugin/cda/api/doQuery?path=/public/demo/pentahodemo.cda&dataAccessId=query2'); var option = getBarOption(); var xdata = []; var ydata = []; for(var i=0; i<result.resultset.length; i++){ xdata.push(result.resultset[i][0]); ydata.push(result.resultset[i][1]); } option.title.text='销售额 top 10' option.xAxis.type = 'value'; option.xAxis.data = []; option.yAxis.type = 'category'; option.yAxis.data = xdata; option.series[0].data = ydata; option.series[0].center=['60%', '40%']; option.series[0].itemStyle ={ color:'#4a86e8' } chartSet('container2',option);}function initChart3(){ var result = getCDAData('/pentaho/plugin/cda/api/doQuery?path=/public/demo/pentahodemo.cda&dataAccessId=query3'); var option = getPieOption(); var sdata = []; var ldata = []; for(var i=0; i<result.resultset.length; i++){ sdata.push( { 'name':result.resultset[i][0], 'value':result.resultset[i][1] }); ldata.push(result.resultset[i][0]); } option.title.text='畅销产品类别 top 10' option.legend.data = ldata; option.series[0].name='销售量 ' option.series[0].data = sdata; chartSet('container3',option);}function initChart4(){ var result = getCDAData('/pentaho/plugin/cda/api/doQuery?path=/public/demo/pentahodemo.cda&dataAccessId=query4'); var option = getLineOption(); var xdata = []; var ydata = []; for(var i=0; i<result.resultset.length; i++){ xdata.push(result.resultset[i][0]); ydata.push(result.resultset[i][1]); } option.title.text='日销量趋势分析 ' option.xAxis.data = xdata; option.series[0].data = ydata; option.series[0].smooth = true; option.series[0].center= ['55%', '40%']; option.series[0].markPoint= { data: [ {type: 'max', name: '最大值'}, {type: 'min', name: '最小值'} ] }; option.series[0].markLine= { data: [ {type: 'average', name: '平均值'} ] } chartSet('container4',option);}function initChart5(){ var result = getCDAData('/pentaho/plugin/cda/api/doQuery?path=/public/demo/pentahodemo.cda&dataAccessId=query6'); option = { title: { text: '销量堆叠区域图', textStyle:{ color:'#fff' } }, tooltip : { trigger: 'axis', axisPointer: { type: 'cross', label: { backgroundColor: '#6a7985' } } }, legend: { data:['新增','续订'], textStyle:{ color:'#fff' } }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, xAxis : [ { type : 'category', boundaryGap : false, data : [], splitLine : { show:false }, axisLabel:{ color:'#fff', } } ], yAxis : [ { type : 'value', splitLine : { show:false }, axisLabel:{ color:'#fff', } } ], series : [ { name:'新增', type:'line', stack: '总量', areaStyle: {normal: {}}, data:[120, 132, 101, 134, 90, 230, 210] }, { name:'续订', type:'line', stack: '总量', areaStyle: {normal: {}}, data:[220, 182, 191, 234, 290, 330, 310] } ]}; var xdata = []; var ydata = []; var xdata1 = []; var ydata1 = []; for(var i=0; i<result.resultset.length; i++){ if(result.resultset[i][1]=='新增') { xdata.push(result.resultset[i][0]); ydata.push(result.resultset[i][2]); }else{ xdata1.push(result.resultset[i][0]); ydata1.push(result.resultset[i][2]); } } debugger option.xAxis[0].data = xdata; option.series[0].data = ydata; option.series[1].data= ydata1; chartSet('container5',option);}var convertData = function (data) { var res = []; for (var i = 0; i < data.length; i++) { var geoCoord = geoCoordMap[data[i].name]; if (geoCoord) { res.push({ name: data[i].name, value: geoCoord.concat(data[i].value) }); } } return res;};function getMapOption(){ return { backgroundColor: '#030A19', title: { text: '销售量分布', subtext: '', sublink: '', left: 'left', textStyle: { color: '#fff' } }, tooltip : { trigger: 'item' }, legend: { orient: 'vertical', y: 'bottom', x:'right', data:['销量'], textStyle: { color: '#fff' } }, geo: { zoom:1.2, map: 'china', label: { emphasis: { show: false } }, roam: true, itemStyle: { normal: { areaColor: '#151726', borderColor: '#111' }, emphasis: { areaColor: '#2a333d' } } }, series : [ { name: '销量', type: 'scatter', coordinateSystem: 'geo', data: convertData(data), symbolSize: function (val) { return val[2] / 80; }, label: { normal: { formatter: '{b}', position: 'right', show: false }, emphasis: { show: true } }, itemStyle: { normal: { color: '#ddb926' } } }, { name: 'Top 5', type: 'effectScatter', coordinateSystem: 'geo', data: convertData(data.sort(function (a, b) { return b.value - a.value; }).slice(0, 6)), symbolSize: function (val) { return val[2] / 80; }, showEffectOn: 'render', rippleEffect: { brushType: 'stroke' }, hoverAnimation: true, label: { normal: { formatter: '{b}', position: 'right', show: true } }, itemStyle: { normal: { color: '#f4e925', shadowBlur: 10, shadowColor: '#333' } }, zlevel: 1 } ]};}var data = [];var geoCoordMap = {};function initChart21(){ var result = getCDAData('/pentaho/plugin/cda/api/doQuery?path=/public/demo/mapsource.cda&dataAccessId=query11'); for(var i=0; i<result.resultset.length; i++){ geoCoordMap[result.resultset[i][0]]=[result.resultset[i][2],result.resultset[i][3]];//只有这种方法可以变量传入 data.push({name:result.resultset[i][0],value:result.resultset[i][1] }); } //var option = getLineOption(); var option = getMapOption(); chartSet('containermap',option);}function init(){ initChart1(); initChart2(); initChart3(); initChart4(); initChart21(); initChart5();}//window.onload = init();$(function(){ init();});
完
更多内容请访问:IT源点
注意:本文归作者所有,未经作者允许,不得转载