Script数据集

<< Click to Display Table of Contents >>

当前位置:  脚本 

Script数据集

Previous pageReturn to chapter overviewNext page

Script 数据集提供脚本语言和数据接口的方式,实现 SQL 数据集所提供的功能。但这种方式比较于 SQL 数据集本身设计上的局限,又能使数据集操作更加灵活自由,为专业人士提供了便利。通过在工具库里提供了一些常用 Javascript 函数接口, Script 数据集支持客户通过编程的方式进行查询。虽然这些接口被限制在设定功能范围内,但是已经能够满足现有日常的工作。

此外 Script 数据集提供了 SQL 数据集不支持的跨数据库联合数据集功能。其类似于 SQL 中的联合查询,根据客户需求,将来自不同数据表单上的数据,通过脚本 JOIN 数据集方法展现在一张表单上。但 Script 数据集提供了比 SQL 的联合查询更为强大的功能。 SQL 联合数据集的前提是所有的数据表单都来自于同一个数据库,而 Script 数据集可以连接不同数据库的数据表单,例如某个公司的经营数据保存在 DB2,而其管理数据保存在 ORACLE,客户通过 Script 数据集可以把他们联合在一起并组成一张新的数据集表用来分析,实现了不同数据库之间的数据合并。

用户可以建立一个脚本数据集,以便把不同数据源的数据混搭到一张查询表上。例如一个是 access 数据库的 Sql 表,一个 embed 类型的查询表,先把数据执行出来,再 Join 到一起,形成新表。

 

编辑界面

先启动编辑 Script 数据集的界面,(如何启动,请参考创建数据集->Script数据集->创建Script数据集)。在打开的界面中,用户可编写脚本语句,来实现多表的连接。

script1

界面中有三块区域,最上面是提供工具函数的树状结构,中间是一个供输入脚本的编辑区域;最下面是一个信息校验反馈栏。点击树节点时,会自动将点中节点的文本内容插入到脚本编辑区域 , 而且是光标所在的位置。当前编辑区域的内容会在每隔一段时间被自动校验,校验的结果显示在反馈栏里。

此编辑区间的目的是需要返回一个查询结果。中间可以有其他运行结果,但最后必须返回是一个查询结果。Script 数据集的主要用途是把不同数据源的数据混搭到一张查询表上。那就需要把其他的查询先执行出来,再通过一些 Join 函数,把各表连接起来。

Script 数据集可实现不同类型数据集的链接,各数据集的类型与对应标识显示如下图所示:

数据集

对应标识

SQL数据集

SQL

Excel数据集

EXCEL

Script数据集

SCRIPT

定制数据集

CUSTOM

数据集市数据集

CLOUD

内嵌数据集

EMBED

组合数据集

COMPOSITE

Mongo数据集

MONGO

自服务数据集

DATA_FLOW

多维数据集

MDX

 

执行查询的函数

一个已经定义的数据集,可以通过调用执行函数,返回查询的结果。

execute(Scriptable scope, int type, String path, Object allCols)

参数

scope 是指运行此脚本的作用域,通常用 this,表示当前作用域。

type 是指数据集的类型,支持的 10种类型 :SQL, EXCEL, SCRIPT, CUSTOM, CLOUD, EMBED,COMPOSITE,  MONGO,  DATA_FLOW, MDX。

path 是指数据集的路径及名称。如果有目录就用 '/' 连接起来。

allCols 是指当为 true 时,数据集的表达式列可见,当为 false 时 , 数据集的表达式列不可见。

返回

一个查询的结果

举例

execute(this, EMBED, "folder1/query1", true);

 

Join函数

将两个任意的数据集执行后的查询结果,做联接,并返回新的查询结果。要求做映射的关键字段的数据类型要匹配。

join(Scriptable scope, int jhint, int jop, Object jleft, Object jright, Object jlkeys, Object jrkeys, Object jlcols, Object jrcols)

参数:

scope 是指运行此脚本的作用域,通常用 this,表示当前作用域。

jhint 是 join 的提示。 LEFT_MAIN 左表为主, RIGHT_MAIN 右表为主, FINAL_JOIN 是最终表,

TEMP_JOIN 是个临时表,会被回收的表。

jop 是连接操作符。 JOIN 是内连接; LEFT_JOIN 左连接; RIGHT_JOIN 右连接; FULL_JOIN全连接。

jleft 左表

jright 右表

jlkeys 左表的连接的字段

jrkeys 右表的连接的字段

jlcols 左表的留下哪些字段

jrcols 右表的留下哪些字段

返回:

一个查询的结果

举例:

join(this, FINAL_JOIN | LEFT_MAIN, LEFT_JOIN, query1, query2, [1], [3], [1,2], [3,1]);// 左表 query1 的第 1 列和右表 query2 的第 3 列连接,留下 query1 的 1 和 2 列, query2 的 3 和 1 列。

 

Union函数

将两个任意的数据集执行后的查询结果进行合并,并返回新的查询结果。两个数据集的字段个数是匹配的,而且数据类型也是匹配的。

union(Scriptable scope, Object ugrids)

参数:

scope 是指运行此脚本的作用域,通常用 this,表示当前作用域。

ugrids 哪些表求交集。如果列不匹配会出错。此参数是个数组。

返回:

一个查询的结果

举例:

union(this, [a, b]);// 将 a 和 b 进行合并。

 

取列函数

将某些列的数据从一个数据集结果里提取出来,并返回一个新的查询结果。

columns(Scriptable scope, Object cgrid, Object ccols)

参数:

scope 是指运行此脚本的作用域,通常用 this,表示当前作用域。

cgrid 是指哪个数据集结果被提取。

ccols 是指哪些列被提取。

返回:

一个查询的结果

举例:

columns(this, a, [3,1]);// 将 a 的第 3 列和第 1 列提取出现。

 

排序函数

将数据集结果中的某些列做排序,并返回一个新的查询结果。

sort(Scriptable scope, Object sgrid, Object scols, Object sascs)

参数:

scope 是指运行此脚本的作用域,通常用 this,表示当前作用域。

sgrid 是指哪个查询结果被排序。

scols 哪些字段被排序。

sascs 各字段用什么排序类型:true( 升序 ), false (降序)。

返回:

一个查询的结果

举例:

sort(this, a, [3,1], [false, true]);// 先将 a 的第 3 列降序,再将 a 的第 1 列升序。

例如,希望把一个 sybase 数据库的查询结果和一个 excel 文件作为数据来源的查询结果做一个联接。假设这两个查询的关键字段的数据类型是匹配的。

var lt = execute(this, SQL, "sybase/customer"); // 左表

var rt = execute(this, SQL, "Excel_Coffee_chain"); // 右表

var lkeys = [0];// 左表的第 0 列做 join

var rkeys = [1];// 右表的第 1 列做 join

var lcols = [0, 1];// 左表保留第 0 和 1 列

var rcols = [0, 2];// 右表保留第 0 和 2 列

join(this, FINAL_JOIN, LEFT_JOIN, lt, rt, lkeys, rkeys, lcols, rcols); // 做左联接,此结果是最终结果,返回新查询结果。