综合应用

<< Click to Display Table of Contents >>

当前位置:  创建数据集 

综合应用

Previous pageReturn to chapter overviewNext page

@query 的实现

@query 的功能介绍

通过 @query 我们可以实现的功能如下:

1. 如果用户想去动态的查询一些信息,比如我想查询浏览过京东和淘宝的用户的信息,或者我想查询既购买牙刷又购买牙膏的用户的信息的时候,我就可以通过 @query 的方式进行动态的查询数据。

2.@query 可以减少数据集的新建数量,比如想实现 20 个不同数据集的关联,我可能需要创建 20 个数据集,但是通过使用 @query 就可以大大减少数据集的数量,我们可以通过给 @query 动态的传递不同的值就能实现不同的数据集关联的问题。

 

@query 的定义

@query 是一个动态的数据集,定义它是只需要定义数据库的连接信息就可以,只需要在 SQL 语句中写 ?{@sql} 就可以动态的接收不同的 SQL 语句。

例如:

1)定义一个 ?{@sql} 进行接收 SQL 语句,名称为 aa。

clip0315

2)创建新的数据集 query,用来进行参数的传递,名称为 query2。

select "Order Id","Market","Cogs" from "Coffee Sales Data of China Market" where  "Order Id"  in ?{a}  OR "Order Id" in ?{b}

如下图:

clip0316

3)创建 Script 数据集

// 需要制定为 true,这样我们才不会去使用 Meta Columns, 因为 Meta Columns 是静态的,而不是动态的。

param["_DYNAMIC_SQL_"]=true;

// 条件 1

param["sql"] = "select * from COFFEE_CHAIN where STATE in ?{state}";

param["state"] = ["Ohio","Florida","Texas"];

var grid = execute(this, SQL, "aa");

// 将其转化为数组的形式

var size = grid.size(-1); //size 函数是计算行数;

var arr = grid!=null ? toArray(grid,0) : []; // 转化为数组

// 条件 2

param["sql"] = "select * from ORDERS where STATE in ?{state1}";

param["state1"] = ["CA","NJ"];

var grid1=execute(this, SQL, "aa");

var size1 = grid1.size(-1);

var arr1 = grid1!=null ? toArray(grid1,0) : []; // 转化为数组

// 将两个不同条件的参数进行传递过去

param["a"]=arr;

param["b"]=arr1;

var grid2=execute(this, SQL, "query2");

// 返回 datagrid 的数据

grid2;

clip0317

4. 运行刷新数据预览就能看到我们想要的数据。

 

实现数据集市数据集的 JOIN 和 SUB QUERY

在 数据集市数据集中不支持 JOIN 和 SUB QEURY,我们需要将数据集进行拆分出来,然后再通过 Script数据集进行连接起来。

JOIN 的实现方式 :有两个不同的 query1 和 query2,然后通过他们之间的共同的字段进行 join, 并且写出保留字段。

SUB QUERY 的实现方式:新建一个 query1,然后在新建一个 query2,通过 query2 去访问 query1 进行实现 SUB QUERY 的功能。

例如:

所有网站的 UV 指标和日均 UV 指标。这个例子就包括了数据集市数据集如何实现的 JOIN 和 SUB QUERY。

具体的 SQL 语句如下:

Select ta.Site_ID, ta.UV, tb.AvgUV

From (

 Select Site_ID, count(distinct panel_id) as UV

 From webdata

 group by site_id

)ta inner join

(

 Select Site_ID, Avg(UV)as AvgUV

 From (

   Select Site_ID, Dwd_date, count(distinct panel_id) as UV

   From webdata

 Group By Site_ID, dwd_date

)tb on ta.Site_ID = tb.Site_ID

 

在我们产品中的运行方式如下:

1. 新建一个 query, Select Site_ID, Dwd_date, count(distinct panel_id) as UV from webdata group by Site_ID, Dwd_date

2. 再新建一个 query1,

Select Site_ID, Avg(UV)as AvgUV from query1 group by Site_ID

3. 新建一个 query2,

Select Site_ID, count(distinct panel_id) as UV From webdata group by Site_id

4.script query 把 query 和 query2 合并。

var lt = execute(this, SQL, "query");

var rt = execute(this, SQL, "query2");

var lkeys = [0];

var rkeys = [0];

var lcols = [0,1];

var rcols = [1];

join(this, FINAL_JOIN | LEFT_MAIN, LEFT_JOIN, lt, rt, lkeys, rkeys, lcols, rcols);

刷新预览就可以得到想要的数据。