【BI 可视化插件】怎么做? 手把手教你实现

背景

对于现在的用户来说,插件已经成为一个熟悉的概念。无论是在使用软件、 IDE 还是浏览器时,插件都是为了在原有产品基础上提供更多更便利的操作。在 BI 领域,图表的丰富性和对接各种场景的自定义是最吸引人的特点。虽然市面上现有的 BI 软件内置了许多图表组件和自定义属性设置,但对于多元化的需求来说,仍然会有无法满足需求的地方。因此,为了更好地满足用户多元化地需求,插件应运而生。那要怎么才能在 BI 软件中 DIY 一个插件呢?

1、开发环境准备及工程创建

首先我们需要准备开发的环境:

  • Node.js
  • 任意IDE(VScode 为例)
  • BI 软件设计器: Wyn商业智能软件设计器(简称Wyn)

开发环境准备完之后,安装依赖并创建一个插件工程:

//安装依赖
npm i @grapecity/wyn-visual-tools -g
//创建工程
wyn-visual-tools init

创建的工程目录结构如下所示:

2、开发和调试

创建好后就可以做开发了。从上面可以介绍可以知道,src/visual.ts是自定义可视化插件的入口。所以我们所有的开发都是在这个里面实现。开发时我们使用 wyn-visual-tools develop 进行启动调试(如下图所示)。项目运行过程中,点击刷新按钮就可以查看本地运行的工程。

而所有的开发,都是在src/visual.ts中实现的。每次图表加载,数据绑定以及属性修改,都是执行visual.ts。并且在其中我们也可以获取到所有绑定的数据以及右侧的属性操作。那么接下来我们大概看一下visual.ts的结构:

构造函数就是在组件被拖出来时,每次初始化加载一次,一般用来做一些全局对象、事件的初始化定义等。

**Update():**这个方法会在每次组件更新时执行,包括组件第一次加载、数据更新、数据字段更改,属性更改时,都会更新,并且通过他的参数我们就可以获取到所有的数据以及看板右侧的属性。也是我们主要逻辑实现的地方。

**OnDestory():**OnDestory是在组件被销毁时,将注册的相关事件做销毁。

**GetInspectorHiddenState():**隐藏右侧的所有属性设置。

**GetActionBarHiddenstate():**隐藏组件旁边的属性设置。

3、打包上传

开发和调试完之后,我们可以将项目打包并上传到 Wyn商业智能软件设计器中。

打包指令:

wyn-visual-tools.cmd package

输入打包指令后,会在同级目录下生成一个 ***.viz的文件,而这个文件就可以直接在 Wyn商业智能软件设计器的门户上传,上传之后就会生成一个插件。

开发案例

下面小编借助 Echarts 生成一个柱形图插件为例,为大家介绍一下如何从头到尾实现一个BI 插件:

1.Echarts对象初始化及调试

首先我们使用的echarts。所以要引入,wyn内置已经将一个echarts做了内嵌,可以有效的减少重复引入和速度。使用方法如下:

我们在visual.json中配置引用echarts:“dependencies”: [“echarts”]

使用host.moduleManager.getModule(‘echarts’).init(dom);对echart进行初始化。这时就获取了一个echarts对象。然后就开启调试:

wyn-visual-tools.cmd develop

运行后即可在wyn的可视化插件中使用开发工具调试。添加调试工具并刷新:

2.获取数据

在组件加载时,除了初始化外,每次就是首先进入的就是update方法。而updata有一个入参:options。而我们所需要所有在页面上交互的东西,都会在这个属性里面被传进来。

Options: {dataViews: data,properties: properties
}

dataViews就是我们所有传递的数据,而properties就是所有右侧里面的属性。那么我们这次的示例需要一个分类,一个数值。所以我们就需要先将这两个定义出来。而这个定义就在capabilities.json中。方法如下:

 "dataBinding": {"dataRoles": [{"name": "ActualValue","displayNameKey": "数值","kind": "value","options": [{"displayNameKey": "数据格式","type": "format","name": "valueFormat"}]},{"name": "dimension","displayNameKey": "分类","kind": "grouping"}]},

我们用grouping定义分类字段,value定义数值字段。所有数据按照分类字段分组,并透视聚合数值字段。这时候,我们随便绑定两个字段,在update中console一下options。看一下输出结果:

可以看到,绑定的数据已经获取到了。

3.图表绘制

有了数据我们下一步就是利用数据将图表绘制出来。

Echart的原始option如上,所以我们只需要将数据作用到series[0]中,然后分类作为xAxis的数据即可。

在如上代码中,我们在update中获取到数据并记录到data对象中,并建立一个bindingName对象,用来存储绑定的字段的名称。用来获取对象数组的数据。然后我们新定义一个方法render()专门用来绘制图表。该方法中,我们去解析data对象。用map去返回一个数组,第一个数组取对象中所有的分类。第二个取对象中所有的数据。然后使用chart对象绘制图表,此时一个简单的echats折线图就绘制出来了:

可以看到,数据也是我们绑定的数据。

4.添加属性

那么在已经做好图表的基础上,我们可以在添加一点对属性的控制。也就是利用wyn右侧的属性面板,去调整图表的样式风格。我们以折线的颜色为例子。

首先需要在右侧添加一个调色板来供用户选择颜色,前面提到过,属性的添加也在capabilities中实现:

可以看到我们添加了一个Color类型的属性,那么仪表板的属性面板就多了一个命名为线条颜色的属性。这个属性同样可以在原先提到的update(options) 的options中获取。

可以看到,我们同样用一个properties对象接收所有属性。并直接用capabilities中定义的name去获取。并赋值给Echarts的lineStyle:color属性。此时,我们再次刷新图表并随便选择一个颜色:

可以看到,一个可以控制颜色的折线图已经实现。

最后我们在对代码做一些简单的完善。

添加页面大小改变时的重绘以及组件销毁事件。至此一个简单的echarts插件就开发完成了。

总结

以上就是实现一款BI插件的全过程,如果您想了解更多信息,欢迎点击这里查看。

扩展链接:

创意展示:打造数据大屏的炫酷天气预报插件

聊一聊数字孪生与3D可视化

探秘移动端BI:发展历程与应用前景解析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见web安全漏洞

一、信息泄露 概念 信息泄露是由于Web服务器或应用程序没有正确处理一些特殊请求,泄露Web服务器的一些敏感信 息,如用户名、密码、源代码、服务器信息、配置信息等。 造成信息泄露主要的三个原因: ①Web服务器配置存在问题,导致一些系统…

爬山算法教程(个人总结版)

背景与简介 爬山算法(Hill Climbing Algorithm)是一种用于解决优化问题的启发式搜索方法。它是一种局部搜索算法,通过不断尝试从当前解出发,在其邻域内寻找更优的解,直到无法找到更优解为止。该算法得名于其类似于登山…

油猴(Tampermonkey)如何实现网站的自动化操作

1. 安装油猴插件:首先,在你使用的浏览器上安装油猴插件。油猴支持多种浏览器,如Chrome、Firefox等。你可以在对应的插件商店中搜索并安装油猴插件。 2. 创建用户脚本:打开油猴插件的管理界面,点击"新建脚本"…

外贸电商数据分析实战指南

亮数据浏览器https://www.bright.cn/proxy-types/?utm_sourcebrand&utm_campaignbrnd-mkt_cn_csdn_yingjie 引言 在行业竞争激烈、市场变化快速的跨境电商领域,数据采集可以帮助企业深入了解客户需求和行为,分析市场趋势和竞争情况,从而…

kyuubi/spark3的catalog 多个数据源配置

在使用kyuubi 的时候,有多个集群,老集群上是hive2,新集群hive3 ,想通过一个网关访问多个集群,或者通过jdbc访问mysql,oracle的数据,这样不用来回数据导入导出。spark 支持跨库访问数据,在spark 中提供两种方…

QtXlsx库编译使用

文章目录 一、前言二、Windows编译使用2.1 用法①:QtXlsx作为Qt的附加模块2.1.1 检验是否安装Perl2.1.2 下载并解压QtXlsx源码2.1.3 MinGW 64-bit安装模块2.1.4 测试 2.2 用法②:直接使用源码 三、Linus编译使用3.1、安装Qt5开发软件包:qtbas…

【权威出版】2024年城市建设、智慧交通与通信网络国际会议(UCSTCN 2024)

2024年城市建设、智慧交通与通信网络国际会议 2024 International Conference on Urban Construction, Smart Transportation, and Communication Networks 【1】会议简介 2024年城市建设、智慧交通与通信网络国际会议即将盛大召开,这是一次聚焦城市建设、智慧交通与…

四轮麦轮平衡车四个轮子安放位置要求,以及编码器测速注意事项(强调,否则无法正常平移)——基于STM32F103ZET6

轮子推荐ABBA,当然BAAB也可以 如图安放: 这两种安防位置可以实现平移效果 若要实现平移则需要先实现PID控制平衡,这里用到520编码电机,相较于370电机他的动力更足,在调节PID时能节约不少时间而且更加容易。 需要注意…

git 检查用户是否是gitlab用户

背景: 公司代码要从老的git库迁到新的git库,老git库上部分提交用户在新git库上没有,解决方法: 让gitlab不再检查提交用户是否是gitlab用户。具体操作: 去掉下面的勾选,保存配置即可。

qt实现秒表功能

最近项目里需要一个计时功能,可以实现暂停,继续,结束,开始的功能,如同秒表一样,我就写了一个demo,效果如图: 代码如下: #ifndef WIDGET_H #define WIDGET_H#include &l…

深入解析与实现:变分自编码器(VAE)完整代码详解

VAE理论上一篇已经详细讲完了,虽然VAE已经是过去的东西了,但是它对后面强大的生成模型是很有指导意义的。接下来,我们简单实现一下其代码吧。 1 VAE在minist数据集上的实现 完整的代码如下,没有什么特别好讲的。 import cv2 im…

【代码随想录】【算法训练营】【第20天】 [654]最大二叉树 [617]合并二叉树 [700]二叉搜索树中的搜索 [98]验证二叉搜索树

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 19,一个愉快的周日~ day 20,一个悲伤的周一~ 题目详情 [654] 最大二叉树 题目描述 654 最大二叉树 解题思路 前提:构造二叉树 思路:寻找根节…

如何设置XHSC(华大)单片机的IO口中断

XHSC(华大)单片机IO口中断使用 一、代码说明 华大单片机的历程在华大或者小华的官网上都可以下载到,但是我们下载的历程基本注释都是非常简单,有的还没有注释;再加上小华跟华大的历程在代码架构上有所区别,所以新手在直接调用华大或者小华历程后,历程代码的可读性并不…

内网安全--域渗透准备知识

目录 知识点: 0x01 0x02 0x03 系列点: Linux主机信息收集 windows主机信息收集 知识点: 0、域产生原因 1、内网域的区别 2、如何判断在域内 3、域内常见信息收集 4、域内自动化工具收集 -局域网&工作组&域环境区别 -域…

# LLM高效微调详解-从Adpter、PrefixTuning到LoRA

一、背景 目前NLP主流范式是在大量通用数据上进行预训练语言模型训练,然后再针对特定下游任务进行微调,达到领域适应(迁移学习)的目的。 Context Learning v.s. SFT 指令微调是预训练语言模型微调的主流范式,其目的是…

通用代码生成器应用场景三,遗留项目反向工程

通用代码生成器应用场景三,遗留项目反向工程 如果您有一个遗留项目,要重新开发,或者源代码遗失,或者需要重新开发,但是希望复用原来的数据,并加快开发。 如果您的项目是通用代码生成器生成的,…

阿里云产品DTU评测报告(二)

阿里云产品DTU评测报告(二) 问题回顾问题处理继续执行 问题回顾 基于上一次DTU评测,在评测过程中遇到了windows系统情况下执行amp命令失败的情况,失败情况如图 导致后续命令无法执行,一时之间不知如何处理&#xff0…

python 两个表格字段列名称值,对比字段差异

支持xlsx,xls文件,相互对比字段列 输出两个表格文件相同字段,置底色为绿色 存在差异的不同字段,输出两个新的表格文件,差异字段,置底色为红色 注意点:读取的文件仅支持xlsx格式,头列需要删除…

【AD21】Gerber文件的输出

Gerber文件是对接生产的文件,该文件包含了PCB的所有层的信息,如铜层、焊盘、丝印层、阻焊层等。板厂使用这些文件来准备生产工艺。虽然可以将PCB发给板厂去打板,但是对于公司而言,直接发PCB会有泄密风险,Gerber文件会相…

《宝贵的人生建议》

致读者 2024/05/25 发表想法 简练表达,发散(灵活)运用。 原文:在写作过程中,我的主要精力是用在这个方面:把这些重要的经验教训浓缩为尽可能紧凑简炼、易于传播的语言。我鼓励读者在阅读时扩展这些“种子”…