一不小心竟然把自己写的文章给改了,我晕啊。只能重写。。。。

MSTR(MicroStrategy)是一个BI的工具,其默认的VI(视觉效果模板)很有限。官方推荐使用D3.js虽然强大,可实在很复杂,对于JS苦手的我确实很难弄。好在ECharts可以集成其中,要知道ECharts的便捷性对于D3.js来说不是一个数量级的。
本篇从一个简单的示例入手,演示如何在MSTR中使用ECharts。

本篇内容包括:

  • 创建VI并引入ECharts
  • 创建ECharts图表
  • 数据绑定
  • 代码整理与优化
  • 最终效果

1. 获取筛选后的数据

1.1 准备工作

正式开始前,我们需要准备几样东西:

  • D3.js
    这个是D3.js的标准库,我们其实用它来建一个Div作为ECharts的容器,地址为https://d3js.org/d3.v4.min.js这个是V4版本的,不过我习惯使用V3版本的,略微有一些不同,地址为https://d3js.org/d3.v4.min.js
  • ECharts.js
    这个不用说了,百度ECharts的库,地址为http://echarts.baidu.com/dist/echarts.min.js

当然还可以有其他的库,比如Jquery等等。可以都下载下来。然后放在MSTR目录下的Tomcat中MicroStrategy的Plugins目录下。我就直接丢在这个根目录了。

1.2 创建VI

我是在Web版,利用Visualization Builder来创建的。也可以参照文档,使用它规定的格式直接创建那些Js,XML文件。当然VI Builder要省力很多。

1.3 引用库

在VI Builder中选择Configuration标签,然后在下方输入库的地址,点击“Add Library”按钮即可。
然后取一个名字,这个名字将用在Dashboard中作为识别用。
最后先保存一下,保存的时候系统会提示保存在哪个文件夹,取一个文件夹名称吧。因为VI是一个按照指定方式存储的文件夹和文件组成的,所以需要给一个文件夹的名称。在以后有空的时候再来讲这个文件夹的构成。

由于我把几个库直接放在了Plugins更目录下,所以引用的代码为:

../plugins/d3.v3.min.js
../plugins/echarts.min.js

至于这个Plugins,是在MSTR下自带的Tomcat目录下的webapp下的MicroStrategy下的Plugins。很复杂,试着找找。

2. 创建ECharts图表

2.1 创建第一个ECharts图表

作为测试,我用了ECharts给的最简单的柱形图的示例。代码来自于这里。我们稍微做一下改动,作为ECharts容器的Div我们使用D3.js来创建。代码直接写在Plot Code里面即可。

代码如下:

//Div名称和高宽配置
var divName="main" + parseInt(Math.random()*100000000);// 指定图表的配置项和数据
var option = {title: {text: 'ECharts 入门示例'},tooltip: {},legend: {data:['销量']},xAxis: {data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]},yAxis: {},series: [{name: '销量',type: 'bar',data: [5, 20, 36, 10, 10, 20]}]
};// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);

2.2 效果演示

正常情况下(至少是按照官方说明的情况下),当代码写好,直接点击Apply按钮或者保存一下,就可以直接看到效果。但是我这里怎么都不行,D3.js代码倒是可以,ECharts总是提示找不到对象。

无奈只能创建一个Dashboard看效果,这里倒是显示正常。顺便说一下,我这个MSTR的版本是10.0.6。还有个问题就是每次VI代码更新,需要清空浏览器缓存才能看到最新版。查看了VI的JS源代码,它默认是去读缓存的,但是改了之后没啥效果,如果有解决的朋友也跟我说一下。

题外话说多了,正常情况下,你可以看见这样一张图。

3 数据绑定

3.1 数据绑定接口

刚才做好的图表是死的,和数据一点关系没有,因而需要绑定一个数据接口。获取数据的接口代码如下,共有两种形式,树形结构和表结构,返回的都是Json数据。

//获取树形结构
var rawData = this.dataInterface.getRawData(mstrmojo.models.template.DataInterface.ENUM_RAW_DATA_FORMAT.TREE);
//获取表结构
var rawData = this.dataInterface.getRawData(mstrmojo.models.template.DataInterface.ENUM_RAW_DATA_FORMAT.ROWS_ADV);

我这里使用了第二种表结构做示例,两者略有不同

3.2 绑定数据

接下去的代码很简单了,数据给了rawData变量,只要按照ECharts所需要的数据要求整理一下即可。获取数据及图表设置代码如下:

//获取数据
var rawData = this.dataInterface.getRawData(mstrmojo.models.template.DataInterface.ENUM_RAW_DATA_FORMAT.ROWS_ADV);
var xTitle=[];
var xValue=[];
for(i=0;i < rawData.length;i++){xTitle[i]=rawData[i].headers[0]["name"];xValue[i]=rawData[i].values[0]["rv"];
}// 指定图表的配置项和数据
var option = {title: {text: 'ECharts示例'},tooltip: {},legend: {data:['销量']},xAxis: {data: xTitle},yAxis: {},series: [{name: '销量',type: 'bar',data: xValue}]
};

这时候可以尝试再到Dashboard里面去添加一个数据集看看效果,正常情况下是可行的。

4 代码整理与优化

最后我们将代码整理并优化一下,使图表自适应。最终代码如下:

//Div名称和高宽配置
var divName="main" + parseInt(Math.random()*100000000);
var margin = {top : 10,right : 10,bottom : 30,left : 30}, width = parseInt(this.width, 10) - margin.left- margin.right, height = parseInt(this.height, 10) - margin.top - margin.bottom;//删除已有的图形
if(this.domNode.childNodes.length>=1){for(i=0;i< this.domNode.childNodes.length;i++){this.domNode.removeChild(this.domNode.childNodes[i]);}
}//使用D3创建一段Div
d3.select(this.domNode).append("div").attr("ID",divName).style("height",height + "px").style("width",width + "px");//初始化Echarts对象
var myChart = echarts.init(document.getElementById(divName));//获取数据
var rawData = this.dataInterface.getRawData(mstrmojo.models.template.DataInterface.ENUM_RAW_DATA_FORMAT.ROWS_ADV);
var xTitle=[];
var xValue=[];
for(i=0;i < rawData.length;i++){xTitle[i]=rawData[i].headers[0]["name"];xValue[i]=rawData[i].values[0]["rv"];
}// 指定图表的配置项和数据
var option = {title: {text: 'ECharts示例'},tooltip: {},legend: {data:['销量']},xAxis: {data: xTitle},yAxis: {},series: [{name: '销量',type: 'bar',data: xValue}]
};// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);

5 最终效果


参考

MSTR官方文档 最近这个文档经常更新,我写这篇文章的时候,文档已经和我之前看到的不一样了,越来越完善了,但是地址也可能会变。

在MSTR中使用ECharts作为VI模板(1)-- 创建第一个ECharts的VI模板相关推荐

  1. echarts 设置仪表盘数字的位置_一个 ECharts 做的猜数小游戏

    大概 1 年多之前,一位老同学找到我,问能不能帮他做一个非常简单的猜数字游戏,需求是这样的: 在 1 到 100 的整数里,随机选一个数字,让小朋友们猜: 如果猜错了,告知小朋友猜大了还是猜小了: 如 ...

  2. 用dw制作php网站模板,dw创建站点;如何用DW制作模板?

    一个一个dw创建站点. 来回答你 1.插入模板 插入模板这个我没有明白你的意思dw创建站点! 2.网络下载的模板怎么弄进去 这个就是把你下载下来的文件解压好了dw创建站点,然后用dreamweaver ...

  3. python文件头模板_Pycharm创建py文件时自定义头部模板

    c++防止客户端多开巧妙代码 在读OBS源码时看到一个比较有意思的关于防止用户多开程序的写法,简单有效,记录下 //make sure only one instance of the applica ...

  4. C++ 泛型编程(一):模板基础:函数模板、类模板、模板推演成函数的机制、模板实例化、模板匹配规则

    文章目录 泛型编程 函数模板 函数模板实例化 隐式实例化 显式实例化 函数模板的匹配规则 类模板 类模板的实例化 泛型编程 泛型编程旨在削减重复工作,如: 将一个函数多次重载不如将他写成泛型. voi ...

  5. 在MSTR中使用ECharts作为VI模板(2)-- 数据筛选器

    在上一篇中(点击这里查看),我们创建了一个最简单的ECharts VI,但是当添加筛选器的时候发现对这个VI完全不起作用. 因而,本篇就要介绍如何给VI做数据筛选以及如何使用VI作为数据筛选器. 本篇 ...

  6. 在Visual Studio 2010中创建多项目(解决方案)模板【三】

    前文回顾: 在Visual Studio 2010中创建多项目(解决方案)模板[一]:多项目解决方案模板的创建 在Visual Studio 2010中创建多项目(解决方案)模板[二]:Templat ...

  7. 在Visual Studio 2010中创建多项目(解决方案)模板之关键步骤【四】

    第一步. 在文件夹 ERPTemplate 下面分别创建各个项目模板所对应的文件夹 第二步. 将Properties 文件夹下的AssemblyInfo.cs 和所有 *.cs 文件右击属性编译方式( ...

  8. vscode vue解决跨域_在vs code 中如何创建一个自己的 Vue 模板代码

    首先,在vs code 中打开定义模板代码的地方 第一步,点击"设置"图标按钮,在弹出的菜单中点击的"用户代码片段"(也就是模板) 第二步,在弹出的框中选择新建 ...

  9. beego模板语法循环html块,1.69 beego 模板语法指南 - Beego 中文文档

    本文讲述 beego 中使用的模板语法,与 go 模板语法基本相同. 基本语法 go 统一使用了 {{ 和 }} 作为左右标签,没有其他的标签符号.如果您想要修改为其它符号,可以参考 模板标签. 使用 ...

最新文章

  1. Python入门(good)
  2. J2EE(一)——开发简单WEB服务器
  3. asp.net core系列 47 Identity 自定义用户数据
  4. 安装配置libmemcached
  5. Ubuntu安装BackExec Remote Agent for Linux
  6. Linux 便笺技巧专栏
  7. https open api_Web上的分享(Share)API
  8. C++基础13-类和对象之继承1
  9. (转)postgresql+postgis空间数据库使用总结
  10. 如何给自己的电脑硬盘分区
  11. Atitit 搜集热点,热门文章的整理 attilax 最近
  12. 内蒙古自治区通辽市谷歌高清卫星地图下载(百度网盘离线包下载)
  13. Linux配置jdk环境变量(详细版)
  14. ACD是计算机的应用之一,ACDSee
  15. Qt使用dump定位崩溃位置
  16. Maven详细入门及教学视频推荐
  17. GWAS 总体流程理解版
  18. 粤通院 招聘FPGA工程师
  19. SEDA(Staged Event-Driven Architecture)
  20. CentOS7下mysql定时备份并发送邮件到指定邮箱脚本

热门文章

  1. Location iOS12.3驱动分享
  2. 高中会考做题软件_2020高中通用技术会考试题及答案,搜题找答案的公众号神器,2020高中通用技术会考试题及答案查题必备工具...
  3. 列举常用字节输入流和输出流
  4. 开源私有云盘python_使用Seafile搭建个人专属私有云盘
  5. C#实现类似百度网盘、育网校园云盘在“我的电脑”磁盘驱动器
  6. Flask开发成语接龙游戏,以后闲了手机玩玩自己写的游戏吧!
  7. 易宝java面试_java 易宝支付源码 (已测试成功,有测试步骤图片)
  8. 获取公众号文章小工具
  9. 天地图 android studio,AndroidStudio 加载 天地图 (2019年后开发授权申请)
  10. 北京内推 | 微软亚洲研究院机器学习组招聘研究型实习生