在上一篇中(点击这里查看),我们创建了一个最简单的ECharts VI,但是当添加筛选器的时候发现对这个VI完全不起作用。

因而,本篇就要介绍如何给VI做数据筛选以及如何使用VI作为数据筛选器。

本篇内容包括:

  • 数据接口
  • 将VI用作筛选器
  • 代码整理及优化
  • 最终效果

1. 数据接口

1.1 数据接口API

MSTR的数据接口包括以下几个:

  • mstrmojo.models.templates.DataInterface
  • mstrmojo.models.templates.Titles
  • mstrmojo.models.templates.Title
  • mstrmojo.models.templates.Headers
  • mstrmojo.models.templates.Header
  • mstrmojo.models.templates.MetricValue

想要了解详情,可以查看这里 。用法都很简单的,看下说明就懂了。这里以DataInterface 为例进行说明。
其实在第一篇中我们已经用到了这个接口,用来获取用户传递过来的数据。其中使用到了getRawData这个函数。语法如下:

  • getRawData(format, params)

format 上一篇已介绍,就是获取数据的格式(树形或表)
params 根据数据格式不同有所不同,其中有一个 hasSelection 是大家共有的,表示是否包含筛选,这就是我们今天要用到的参数。这个值默认是false,我们将其设置为true就可以使筛选器起作用。

1.2 获取筛选后的数据

上一篇中只要更改一个地方,就可以是筛选器起作用了。这里顺便让数据的标题显示出来

var rawData = this.dataInterface.getRawData(mstrmojo.models.template.DataInterface. ENUM_RAW_DATA_FORMAT.ROWS_ADV, {hasSelection: true,hasTitleName:true});

1.3 调试

这里要简单讲一下调试,来看看获取的数据结构到底是怎样的。这里我用的火狐浏览器。其他浏览器也差不多。
打开上一篇创建的Dashboard,然后添加筛选器,再按下F12打开调试。然后在调试器下找到我们创建的TestECharts.js,可以发现这里的代码其实就是我们在Plot Code里面写的。设置一个断点,再次刷新数据。

我们看下rawData:
headers 表示数据项的标题,也就是每个数据所对应的维度的值。其中name就是维度的值,tname就是维度的名称。
values 表示数据也就是度量值。name就是度量值的名称,rv是实际的值,v就是显示的值。
还有个mericSelector是将VI用作筛选器用的,稍后再提。
一般也就用到这几个。

1.4 筛选效果

测试一下筛选器吧,已经可以看到效果。3月份的数据被我勾选掉了。

2. 将VI用作筛选器

将VI用作筛选器需要用到EChats的Click事件以及MSTR中applyselection回调。下面这段代码几乎是照抄官方文档,而且几乎所有图表都适用,只要复制粘贴即可。

this.addUseAsFilterMenuItem();
me=this;
myChart.on('click', function (d) {if(window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.selectionDataJSONString) { // mobile端d.selection.messageType = "selection";window.webkit.messageHandlers.selectionDataJSONString.postMessage(rawData[d.dataIndex].metricSelector);} else {me.applySelection(rawData[d.dataIndex].metricSelector); // web端}
});

其中的 metricSelector 就是上一节提到的,我们根本不用关心里面是啥,就这么用就行了。
不过要注意的是,当原始数据获取采用树形结构时,就不是 metricSelector 了,而要把它换成 attributeSelector,就是这么简单。

3. 代码整理及优化

最终代码如下:

//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, {hasSelection: true,hasTitleName:true});
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"];
}//数据筛选
this.addUseAsFilterMenuItem();
me=this;
myChart.on('click', function (d) {if(window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.selectionDataJSONString) { // mobile端d.selection.messageType = "selection";window.webkit.messageHandlers.selectionDataJSONString.postMessage(rawData[d.dataIndex].metricSelector);} else {me.applySelection(rawData[d.dataIndex].metricSelector); // web端}
});// 指定图表的配置项和数据
var option = {title: {text: 'ECharts示例'},tooltip: {},legend: {data:['销量']},xAxis: {data: xTitle},yAxis: {},series: [{name: '销量',type: 'bar',data: xValue}]
};// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);

4. 最终效果

来测试下,添加一个VI,然后将我们创建的图形作为筛选器。试着点击一下我们的柱形图,筛选效果就出来了。

5. 参考

DataInterface API

在MSTR中使用ECharts作为VI模板(2)-- 数据筛选器相关推荐

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

    一不小心竟然把自己写的文章给改了,我晕啊.只能重写.... MSTR(MicroStrategy)是一个BI的工具,其默认的VI(视觉效果模板)很有限.官方推荐使用D3.js虽然强大,可实在很复杂,对 ...

  2. sql server 快照_添加新文章,删除文章,更改快照文件夹路径和SQL Server复制中的数据筛选器行

    sql server 快照 In the last articles, we have learned Configuring Snapshot and Transactional SQL Serve ...

  3. Django工程中使用echarts怎么循环遍历显示数据

    前言: 后面要开发测试管理平台,需要用到数据可视化,所以研究了一下 先看下最后的图吧,单击最上方的按钮可以控制柱状图显隐 views.py # -*- coding: utf-8 -*- from _ ...

  4. ECharts 全新大版本 4.0 正式发布 即将支持微信小程序中使用ECharts

    2018年1月16日,ECharts (echarts.baidu.com)发布了最新大版本 4.0,新版本在产品的性能.功能.易用性等各个方面进行了全面提升.和 ECharts 4.0 一起发布的还 ...

  5. 创建了一个表之后怎么再次在表中添加字段和字段显示位置_筛选数据透视表中的数据...

    [推荐阅读]资料下载QQ群:562718785(软件下载.精美PPT模板下载) [Excel视频教学]求和及快速求和 [Excel视频教学]跨表快速求和 [Excel视频教学]函数-相对绝对混合引用 ...

  6. 如何更新 Exchange2003 SP2 中的智能邮件筛选器版本

    概要 本文介绍了可用于维护 Microsoft Exchange 2003 Service Pack 2 (SP2) 所附带的智能邮件筛选器版本 2 的更新过程. 在每月的第一个和第三个星期三,将通过 ...

  7. tableau获取筛选器值_认识Tableau中的筛选器

    Tableau中的筛选器: (1)提取筛选器(2)数据源筛选器(3)上下文筛选器(4)维度筛选器(5)度量筛选器(6)参数筛选器(7)表计算筛选器(8)页面筛选器 对筛选器进行简单的分类: 数据层(提 ...

  8. IIS 7中ISAPI筛选器配置

    Internet 服务器应用程序编程接口 (ISAPI) 筛选器是一种可以添加到 IIS 中以增强 Web 服务器行为的程序.ISAPI 筛选器会接收向 Web 服务器发出的每个 HTTP 请求并向服 ...

  9. 计算机表格怎样筛选男女,excel表格数据男女筛选-EXCEL表格中选择性别怎么做 就是如何做筛选 ,比如......

    如何将一张EXCEL表格中同时符合2个条件的数据筛选... 利用excel的数据有效性功能可以达到目标,以下步骤以excel2007为例. 1.首先在电脑上打开目标表格文件,选中目标单元格. 2.然后 ...

最新文章

  1. 使用阿里云的maven私服的setting.xml, 提高maven项目jar下载速度
  2. html中open打开新网页,JavaScript-打开新窗口(window.open)
  3. Nodejs开发微信公众号中控服务
  4. 计算机网络09年考研题,计算机网络考研真题及答案
  5. python字典生成式_【IT专家】Python 简化for循环:列表,集合与字典生成式
  6. 服务端程序的初步实现
  7. annotation-config vs component-scan – Spring Core--转
  8. 经验 | 非科班出身怎么转行计算机?
  9. 命令行添加删除tomcat服务
  10. Java 什么是静态内部类
  11. Python基础之内置函数(二)
  12. Windows 7下的虚拟光驱
  13. excel冻结窗口_怎么设置excel2007冻结窗口
  14. java ftps 证书_FTPS (FTP over SSL) vs. SFTP (SSH 文件传输协议): 我们如何做出选择
  15. 怎样在电脑上设置路由器的WiFi密码
  16. linux下find命令的详细说明
  17. .7z文件 合并、解压
  18. 组织的目的是使平凡的人做出不平凡的事 --- 彼得.德鲁克 《卓有成效的管理者》
  19. Androidnbsp;滑动屏幕效果学习之Gestur…
  20. 在原生开发中控制HTML5视频

热门文章

  1. 抖音取名,抖音打造人设(取名,头像,简介...):国仁楠哥
  2. linux centos7 系统内核参数调优
  3. Java内存溢出与栈溢出
  4. 基于dwr2.0的Push推送技术详细解析以及实例(转)
  5. python使用密钥加密的表述_python 利用Crypto进行RSA解密加密文件
  6. 海绵蛋糕——来至于完美戚风的化身
  7. 9----编程抓小偷(逻辑推理)
  8. 一个神奇的网站 Papers with code
  9. CNS、ENS和PNS的发育过程
  10. Java Web 程序设计期末复习重要知识点总结