页面树结构
转至元数据结尾
转至元数据起始

关键字

      自定义图形、空白图形、集成echarts其他图形、漏斗图

背景说明

      Smartbi没有把echarts所有图形集成进来,对于未集成进来的图形,smartbi提供了一种只使用smartbi提供的数据,其他通过扩展属性+图形宏拼凑echarts图形的方法。这种方式实际就是使用smartbi提供数据,实现产品没有支持的echarts图形

已知适用范围

      目前已知echarts地图通过这种扩展方式是没有支持的,并且对业务人员不便直接使用,如果想要配置界面,建议参考 Smartbi新增图形类型指南

入口及接口说明

      当基于数据集新建一种图形,在"扩展属性"标签页,选择"覆盖(所有设置项不生效)",此时除了扩展属性设置的option,通过界面设置的所有配置都不会生效,同时在图形宏中(对象chart, 事件:beforeRenderer)可以接收到一个返回所有数据的参数:allFieldsData,用户再在图形宏中将数据解析成echarts图形接收的数据,再回写到图形options,新的echarts图形即可集成进来。接口说明如下:

注意:如果没有选覆盖(所有设置项不生效),默认是没有带allFieldsData属性的,需要设置扩展属性:{"chartex": {"allFieldsData": true}},前端宏才会接收到所有数据。

接口说明
//通过宏获取所有数据的方式:
//对象chart, 事件:beforeRenderer
function main(chartView) {
	var options = chartView.getChartObject().getOptions();  //echarts options对象 参考:http://echarts.baidu.com/option.html#title
	var allFieldsData = options.allFieldsData; //所有数据
}
//返回的数据结构:
//返回的数据结构定义,包含数据、字段和参数信息,字段定义、数据格式等信息都来源于数据集,可在作图的数据集中查看
options.allFieldsData:{
	rowsCount:, //数据行数
	columnsCount:,//数据列数
	//返回的数据表,是个object数组,
	data:[[{
		displayValue:'', //显示值
		value:''  //真实值
	}]],
	//字段的定义
	fields:[{
		id:'', //数据集中输出字段唯一标识,在数据集中可以查看
		alias:'', //字段别名
		//数据集中设置的数据格式定义
		dataFormat:{
			dateFormat:'', //日期格式
			forceDecimal:true, 
			prefix:
			scale:
			suffix:
			timeFormat:
			type:"STRING",
			viewType:"NONE"
		}
	}],
	//数据集中参数键值对
	paramsData:[{
		key:,  //数据集中输出参数唯一标识,譬如"OutputParameter.I2c949e121d27be5d011d284d6b170049.销售月份"
		value:  //参数值
	}]
}

示例说明

     通过上面的接口,实现漏斗图,效果如下:
     

    实现步骤:

    1, 新建组合分析分析并添加图形,数据设置可以按柱图随便勾选,实际不会用到,只是骗过验证

     

    2, 切换到:"扩展属性",勾选"覆盖(所有设置项不生效)"

    

    3, 设置扩展属性(见上图),固化的和数据不会有关系的可以在此设置,譬如示例直接把echarts漏斗示例options(去除数据部分)粘贴与此

扩展图形_漏斗图扩展属性
{
    "title": {
        "text": "漏斗图",
        "subtext": "纯属虚构"
    },
    "tooltip": {
        "trigger": "item",
        "formatter": "{a} <br/>{b} : {c}%"
    },
    "toolbox": {
        "feature": {
            "dataView": {
                "readOnly": false
            },
            "restore": {},
            "saveAsImage": {}
        }
    },
    "calculable": true,
    "series": [{
        "name": "漏斗图",
        "type": "funnel",
        "left": "10%",
        "top": 60,
        "bottom": 60,
        "width": "80%",
        "min": 0,
        "max": 100,
        "minSize": "0%",
        "maxSize": "100%",
        "sort": "descending",
        "gap": 2,
        "label": {
            "normal": {
                "show": true,
                "position": "inside"
            },
            "emphasis": {
                "textStyle": {
                    "fontSize": 20
                }
            }
        },
        "labelLine": {
            "normal": {
                "length": 10,
                "lineStyle": {
                    "width": 1,
                    "type": "solid"
                }
            }
        },
        "itemStyle": {
            "normal": {
                "borderColor": "#fff",
                "borderWidth": 1
            }
        }
    }]
}


    4, 右键图形编辑宏,给图形添加宏事件

    
    宏代码:

扩展图形_漏斗图宏代码
//对象chart, 事件beforeRenderer
function main(chartView) {
	//漏斗图的名称和值对应的字段别名
	var nameFieldAlias = "指标名称", valueFieldAlias="指标值";
	processFunnelData(chartView,nameFieldAlias, valueFieldAlias);
}
//处理漏斗图的数据,这里假设除数据外的设置已经放在扩展属性里了,如果扩展属性里没有,也可以放在这里
function processFunnelData(chartView, nameFieldAlias, valueFieldAlias){
    //指标名称和值在数据中的索引
	var nameFieldIndex, valueFieldIndex;
	var options = chartView.getChartObject().getOptions();
	var allData = options.allFieldsData;
	//没有数据时,直接设置为空
	if(!allData || allData.rowsCount == 0 || allData.columnsCount == 0){
		options.series[0].data = [];
		return;
	}
	
	//查找字段对应的索引
	var fields = allData.fields;
	for(var i in fields){
	   if(fields[i].alias == nameFieldAlias){
			nameFieldIndex=i;
	   }else if(fields[i].alias == valueFieldAlias){
			valueFieldIndex = i;
	   }
	}
	
	//拼写漏斗图需要的数据options
	if(nameFieldIndex>=0 && valueFieldIndex>=0){
		var chartData = [], legendData=[];
		for(var i in allData.data){
			var item = allData.data[i];
			chartData.push({
				name:item[nameFieldIndex].displayValue,
				value:item[valueFieldIndex].value
			});
			legendData.push(item[nameFieldIndex].displayValue);
		}
		options.series[0].data = chartData;
		//options.legend.data = legendData;
	}else{
		alert("未找到用于作图的对应字段:" + nameFieldAlias + "或" + valueFieldAlias);
	}
}

 

    5, 保存宏后,预览效果如下:

    

下载:示例资源

  • 无标签