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

一、学前须知

学习本节课程前需要对于JavaScript、TypeScript语法以及图形扩展属性有一定的了解,在前面的视频中已经讲解了JavaScript、TypeScript语法及图形扩展属性的入门,建议先行学习后再开始本节课程的学习。

二、图形宏简介

当图形需要根据数据,动态展示一些效果的时候,使用扩展属性也难以满足。Smartbi提供了“图形宏”功能,用户能根据需求实现图形的各种动态效果。“图形宏”是报表宏的一部分,是单指作用在ECharts图形对象上的报表宏,用户可以使用“图形宏”实现丰富的图形效果。

注:本次课程主要以讲解仪表盘中的图形宏为主。

1.图形宏创建方式

注:在新建入口进行创建并选择【对象】为组件,找到相应的组件进行创建。

事件:

onBeforeRender(组件渲染前):在Smartbi中,onBeforeRender 用于在图形(如ECharts图表)渲染之前执行一些自定义的操作,主要用于修改图形的配置选项

onAfterRender(组件渲染后):在Smartbi中,onAfterRender 用于在图形(如ECharts图表)渲染完成后执行一些自定义的操作。例如添加额外的交互功能、调整DOM元素、记录日志等。

注:onBeforeRender和onAfterRender实际上是报表中的生命周期的钩子。

2.图形宏中的API

获取相关API文档:

function main(page: IPage, portlet: IPortlet) {
     //Page表示整个仪表盘页面
     //Portlet表示仪表盘页面中的组件
     // 实际宏代码
 }

组件获取图表的ECharts属性:portlet.getChartOptions()

组件设置图表的ECharts属性:portlet.setChartOptions(option)

三、案例:如何实现图表只选中当前系列值最高的图例?

需求:当前组件类型为堆积线图展示了各区域各月份的销售额趋势,目前想要实现堆积线图只展示当前年度销售额最高的区域趋势,如何实现?

思考:在图表中实现只展示某个系列,可以通过控制其图例的选中状态来实现(图形扩展属性入门的时候有讲过如何实现设置图例的选中状态)。

那么我们可以直接使用扩展属性来做吗?

由于系列值需要进行计算后才能得出,设置的系列是不确定的,直接通过扩展属性不能实现该需求故需要使用到图形宏代码来实现。

需求宏实现步骤:

1.获取目标图表的ECharts属性。

2.计算出各序列的销售额总和并取到最大值。

3.设置ECharts属性:对该序列进行设置图例为选中状态,其他序列图例设置为不选中的状态。

4.测试验证。

实现宏示例:

function main(page: IPage, portlet: IEChartsPortlet) {
     // 获取 echarts 图表配置对象
     let opt = portlet.getChartOptions();
     // 获取图表中的系列数据(每个数据系列)
     let series = opt.series;
     // 创建用于存储各系列总和值的数组
     let arr = new Array(series.length).fill(0);
     // 初始化最大值索引为0(第一个系列)
     let maxDataIndex = 0;
 ​
     // 遍历每个数据系列
     for (index in series) {
         // 获取当前系列对象
         let item = series[index];
         // 获取当前系列的数据数组
         let data = item.data;
 ​
         // 遍历当前系列的每个数据点
         for (dateIndex in data) {
             // 获取数据点的第二个数值(假设数据结构为 [x, y])
             let value = data[dateIndex].value[1];
             // 累加到当前系列的总和
             arr[index] += value;
         }
 ​
         // 比较并更新最大值索引
         if (arr[maxDataIndex] < arr[index]) {
             maxDataIndex = index; // 注意这里 index 是字符串类型
         }
     }
 ​
     // 图例配置
     // 确保 legend 配置对象存在(如果不存在则创建空对象)
     opt.legend = opt.legend || {};
     
     
     // 初始化选中状态对象(清空原有配置)
     opt.legend.selected = {};
     // 遍历所有系列设置选中状态
     for (let idx in series) {
         // 获取当前系列名称
         const seriesName = series[idx].name;
         // 只有当前索引等于最大值索引时设为 true(选中状态)
         opt.legend.selected[seriesName] = (idx === maxDataIndex);
         console.log(opt.legend.selected)
     }
     
     // 将修改后的配置重新应用到图表
     portlet.setChartOptions(opt);
 ​
 }

实现效果:

四、总结

在Smartbi中,图形宏作为高级可视化工具,能够有效突破内置组件限制,实现多维度的定制化需求。其核心优势体现在对动态数据流的深度支持,当常规组件设置和扩展属性无法满足复杂业务场景时,可通过图形宏的脚本化编程接口构建定制化解决方案,特别适用于需要动态响应数据变化的智能可视化场景。

五、视频教学

图形宏入门:https://my.smartbi.com.cn/edu/course-128

  • 无标签