通过客户端宏,使堆积图显示合计,如下图所示:
2.操作步骤
- 步骤一:新建一个空白的自助仪表盘新建一个空白的仪表盘
- 步骤二:拖入图形 ,选择数据集或业务主题,选择数据来源
效果如下:
- 步骤三:选中图形,右键进入宏管理页
- 步骤四:在界面新建客户端宏,弹出的新建模块对话框中输入名称,勾选对象为组件、事件为onBeforeRender
- 步骤五:编写宏代码实现效果
- 把下面宏代码复制到代码区域;
代码块 | ||||
---|---|---|---|---|
| ||||
/** * 类型:ClientSide * 对象:图形组件 * 事件:onBeforeRender * 实现效果:堆积图显示合计 */ function main(page: IPage, portlet: IEChartsPortlet) { if (!portlet.getChartOptions) return; let options = portlet.getChartOptions() //获取图形对象 if console.log('!options: ', options) .series || !options.series.length) return; /** 总数 */ let seriestotals = getStackSumData(options.series) /** * 设置显示总数label * 最后一个series显示总数标签,其他的不显示标签 */ let length = options.series[0].data.length.forEach((serie: any, index: number) => { letif data0(index === options.series[0].data.length - 1) { let data1serie.label ={ series[1].data let totals:string[] = [] for (let i in data0) {show: true, let value0 = data0[i].value[1] position: 'top', // 标签显示位置 let value1 = data1[i].value[1] let total = (value0formatter: +function value1).toFixed(2)(params: any) { return totals.push(total)[params.dataIndex] // 显示总数 }, series[1].label = { normaltextStyle: { position color: 'top#000', // 标签文字颜色 show: true, } } } else { serie.label.show = false } }) portlet.setChartOptions(options) } /** * 计算总数据 formatter:*/ function getStackSumData(aseries: any) { if (!series || !series.length) { return totals[a.dataIndex]; } let result: any = [] } series.forEach((serie: any, index: number) => { }, serie.data.forEach((data: any, emphasisidx: number) => { let position: 'top',value = Number((data.value && data.value[1]) || 0) if (typeof result[idx] === 'undefined') { show: true, result.push(value) formatter: function(a: any) } else { return totals[a.dataIndex]result[idx] += value; } result[idx] = parseFloat(result[idx].toFixed(2)) }) }) portlet.setChartOptions(options)return result; } |
- 步骤六:点击 保存,查看效果,需重新打开报表,可看到效果已实现
3. 下载资源
代码资源:migrate-堆积图显示合计.xml