<< Click to Display Table of Contents >> Script数据集 |
Script 数据集提供脚本语言和数据接口的方式,实现 SQL 数据集所提供的功能。但这种方式比较于 SQL 数据集本身设计上的局限,又能使数据集操作更加灵活自由,为专业人士提供了便利。通过在工具库里提供了一些常用 Javascript 函数接口, Script 数据集支持客户通过编程的方式进行查询。虽然这些接口被限制在设定功能范围内,但是已经能够满足现有日常的工作。
此外 Script 数据集提供了 SQL 数据集不支持的跨数据库联合数据集功能。其类似于 SQL 中的联合查询,根据客户需求,将来自不同数据表单上的数据,通过脚本 JOIN 数据集方法展现在一张表单上。但 Script 数据集提供了比 SQL 的联合查询更为强大的功能。 SQL 联合数据集的前提是所有的数据表单都来自于同一个数据库,而 Script 数据集可以连接不同数据库的数据表单,例如某个公司的经营数据保存在 DB2,而其管理数据保存在 ORACLE,客户通过 Script 数据集可以把他们联合在一起并组成一张新的数据集表用来分析,实现了不同数据库之间的数据合并。
用户可以建立一个脚本数据集,以便把不同数据源的数据混搭到一张查询表上。例如一个是 access 数据库的 Sql 表,一个 embed 类型的查询表,先把数据执行出来,再 Join 到一起,形成新表。
❖编辑界面
先启动编辑 Script 数据集的界面,(如何启动,请参考创建数据集->Script数据集->创建Script数据集)。在打开的界面中,用户可编写脚本语句,来实现多表的连接。
界面中有三块区域,最上面是提供工具函数的树状结构,中间是一个供输入脚本的编辑区域;最下面是一个信息校验反馈栏。点击树节点时,会自动将点中节点的文本内容插入到脚本编辑区域 , 而且是光标所在的位置。当前编辑区域的内容会在每隔一段时间被自动校验,校验的结果显示在反馈栏里。
此编辑区间的目的是需要返回一个查询结果。中间可以有其他运行结果,但最后必须返回是一个查询结果。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); // 做左联接,此结果是最终结果,返回新查询结果。