Smartbi集成ECharts作为图形展现的其中一种组件。在Smartbi中,除Excel图形外,其余的图形展现基本都是使用ECharts组件。Smartbi选择ECharts主要的原因有两个:
Smartbi针对ECharts图形,提供了可视化的配置界面,可支持用户在不了解option配置属性的情况下,依然能按自己的需求,制作出丰富的ECharts图形效果。
Smartbi中的图形可视化配置界面,同样是与ECharts图形结构是一一对应的,如下图所示。其本质是根据用户在可视化配置界面中的设置,构建出option配置对象,进而绘制出ECharts图形的。
ECharts的配置项非常丰富及灵活,无法通过Smartbi的可视化配置界面实现一一对应。因此Smartbi提供扩展属性的功能,当可视化配置界面无法配置出所需图形效果时,可以考虑使用扩展属性调整图形。
扩展属性的一般使用方法:
扩展属性使用的一个笨办法:
例如,通过Smartbi的可视化配置界面,如果无法调出圆角的柱子,那么此时,我们就需要通过扩展属性调整图形。接下来,我们以 “将普通柱图的长方形柱子调整为圆角的柱子”为例(如下图所示),分别说明扩展属性使用的一般方法和笨办法。
一般方法
option->series→itemStyle→barBorderRadius。
笨办法
当我们需要将其它地方看到的ECharts图形,直接放到Smartbi中展现,以证明Smartbi支持此类图形时,可以将图形对应的option属性,整个放到扩展属性中,并选择属性合并方式为“覆盖”,Smartbi就会直接以扩展属性的option直接绘制图形。注意,扩展属性中只能放置option属性,此时的数据是静态的,不能存在动态计算的代码段。
例如,在ECharts官网上看到K线图,并且数据是静态的,不存在额外的计算代码,则可以直接将option对象复制到扩展属性中,则可以直接展示K线图。
下图的ECharts图形示例中,除了option属性外,还包含额外的计算代码,以动态计算数据。这类图形不能直接复制代码放到扩展属性中,需要将数据处理成静态后,再放置到扩展属性。
Smartbi支持“鼠标中键”点击图形以展示当前图形的option配置对象。当需要调试Smartbi图形或Smartbi图形显示不正常时,可以取出Smartbi图形的option配置对象,放到ECharts官网的demo示例中运行,以查看效果。
例如,当想调试Smartbi中展现的图形时,可直接“鼠标中键”点击图形,打开option配置对象,然后复制option。
随意打开一个ECharts官网的demo示例,粘贴option,点击“整理代码”,最后点击刷新,即可在显示与Smartbi上相同的图形。此时可以直接在上面调试图形属性,或者确定是否与Smartbi上的图形展现一致,即当用户认为Smartbi上展现的图形不正常时,可以用此方法确定是否为Smartbi上的问题,或者定位问题原因。
当图形需要根据数据,动态展示一些效果的时候,使用扩展属性也难以满足。Smartbi提供“图形宏”功能,以便用户能根据需求实现各种动态效果。基本上,使用Smartbi的图形宏功能,可以在Smartbi实现任何使用ECharts能够实现的图形。功能界面如下图所示。
Smartbi图形宏目前开放了三个事件,图形加载前(beforeRender),图形加载完成后(afterRender),点击元素(pointClick)。事件触发流程如下图所示。
如要在图形宏中灵活操作ECharts,则需要能在图形宏中获取到与ECharts相关的对象,并调用ECharts开放的API接口,使其实现所需的图形效果。下面是常用的ECharts相关的对象和方法:
其余对象及方法,请自行调试查看,本文不再赘述。
示例需求:设置饼图中面积最大的扇区加红色边框,并设置弹出效果。
由于图形加载前,就已经可以获取到option对象,以及里面的系列数据,则可以选择beforeRender事件,然后获取到option对象,修改属性即可。
图形宏执行效果如下图所示。
示例需求:打开图形后,自动显示最大值扇区的鼠标提示框。
由于需要自动显示鼠标提示,则必须在图形加载之后才能进行操作。因此选择afterRender事件。而自动显示鼠标提示,我们需要用到ECharts提供的API接口方法echartsInstance.dispatchAction触发图表行为。
在报表宏中,先获取到ECharts原生实例对象echartsInstance,然后调用dipatchAction方法触发鼠标提示效果。
图形宏执行结果如下图所示,当图形打开后,会自动显示提示框。
示例需求:当点击饼图扇区时,更新图形标题为所点击扇区的信息。
需求为在点击扇区之后修改标题,自然想到使用图形元素点击事件pointClick。在图形宏中获取到option对象,然后根据点击扇区的信息,修改图形标题option.title内容。由于此时图形已经加载完成,修改option对象后,需要主动调用ECharts实例对象提供的echartsInstance.setOption方法,重新加载图形。
图形宏执行效果如下图所示。
前面3.2.3节提到,当使用“覆盖式”扩展属性可以直接展示完整option对象的图形,但是不支持动态计算的代码。学习完图形宏,我们可以借助图形宏,在Smartbi中快速复制其他地方的ECharts图形,作为Demo展现。下面以实际案例讲述制作方法。
在ECharts官网上看到一个3D折线图,想要直接在Smartbi中展现,由于其中包含动态计算data的代码,无法直接使用“覆盖式”扩展属性。
此时我们可以考虑使用图形宏,由于图形宏里面是可以正常运行动态计算代码的,因此可以直接在beforeRender事件中,替换掉整个option。
于是,创建一个beforeRender事件的图形宏,直接复制“3D折线图”的全部代码,放到图形宏里面。然后调用Smartbi封装的ECharts对象smartbiECharts的setOptions方法,更新Smartbi构建的option为“3D折线图”的option。(注意,不是调用ECharts实例对象的echartsInstance.setOption方法)
图形宏执行效果如下图所示,这样即可快速实现Demo效果。