查询 JSON

阅读(503) 标签: 查询json,

查询JSON是通用查询控件的输出结果。它的作用除了生成SQL,还可用于还原通用查询界面,进行二次编辑。

参数说明

业务人员在查询面设置好了查询细节,点击【查询】按钮,系统会把这些细节封装到一个查询JSON里,接下来我们将详细讲解下什么是查询JSON,以及不同的查询JSON会查询出什么样的数据。

 

查询JSON结构:

{

fields : [

{

name : "field1",

alias:"销售额合计",

dataType :1,

comparison : ">=",

values : [50000],

aggr : "sum"

}

],

currGroup : ‘group1’

}

 

通用查询页面提供JS方法getCommonQueryJSON()返回查询JSONfields为所有要查询出或参与查询的字段,每个字段对象中参数定义如下:

name:字段名;

alias:在结果集中的列名,为空时只参与查询不显示;

dataType: 数据类型,1整数;2实数;3字符串;4日期;

comparison:条件比较符,>=<inlikenot like…

values 条件值;

aggr:聚合方式,sum求和;count计数;icount去重计数;。存在聚合字段时,显示的非聚合字段就是分组字段。

 

和查询无关的属性,用于还原查询页面:

currGroup:当前选中的字段组。

 

操作说明

查询面可根据用户不同的过滤分析需求做不同操作,生成不同的查询JSON

界面如下:

  删除按钮,删除选出字段。

  调整字段顺序的功能按钮,鼠标位于此按钮上,可拖动改变字段顺序。

  设置是否显示字段的按钮,用于设置选出字段是否显示。字段不显示时,条件依然有效。

  字段别名编辑框,可重新编辑字段别名。

  分组汇总下拉框,包含:不汇总、求和、计数、去重计数、最大、最小和平均。

  条件比较符下拉框。字段类型为数值时,条件比较符包含:等于、大于等于、大于、小于等于、小于;字段类型为字符串时,条件比较符包含:等于、包含和不包含;字段类型为日期串时,条件比较符包含:等于、迟于等于、迟于、早于等于、早于。

  条件值编辑框。可编辑条件值或者通过按钮选择值。条件值有多个时以逗号分隔。

 

l  筛选字段

将字段列表中的字段拖拽到右边查询区域,这样就可以选出想看的字段里面的数据。

 

此时的查询JSON为:

{

"fields":[

{

"name":"EMPID",

"alias":"员工编号",

"title":"员工编号",

"comparison":"=",

"values":[],

"show":1,

"aggr":"",

"dataType":1

},

{

"name":"DEPT",

"alias":"部门",

"title":"部门",

"comparison":"=",

"values":[],

"show":1,

"aggr":"",

"dataType":1

},

{

"name":"SALARY",

"alias":"工资",

"title":"工资",

"comparison":"=",

"values":[],

"show":1,

"aggr":"",

"dataType":1

}

],

"currGroup":"_all"

}

l  设置过滤条件

按照选出字段生成数据,不显示字段的条件依然有效。

此时的查询JSON为:

{

"fields":[

{

"name":"EMPID",

"alias":"员工编号",

"title":"员工编号","comparison":"=",

"values":[],

"show":1,

"aggr":"",

"dataType":1

},

{

"name":"DEPT",

"alias":"部门",

"title":"部门",

"comparison":"=",

"values":[],

"show":1,

"aggr":"",

"dataType":1

},

{

"name":"SALARY",

"alias":"工资",

"title":"工资",

"comparison":"=",

"values":[],

"show":1,

"aggr":"",

"dataType":1

},

{

"name":"GENDER",

"alias":"",

"title":"性别",

"comparison":"=",

"values":["1"],

"show":2,

"aggr":"",

"dataType":1

}

],

"currGroup":"_all"

}

性别设置不显示,alias为空,但它只选出男性的条件仍然有效。

l  聚合分组

如果只有聚合字段,没有非聚合的,那就聚合全部数据,相当于只有一组。

此时的查询JSON为:

{

"fields":[

{

"name":"EMPID",

"alias":"员工数",

"title":"员工数",

"comparison":"=",

"values":[],

"show":1,

"aggr":"count",

"dataType":1

}

],

"currGroup":"_all"

}

存在聚合时,进行分组查询,按所有显示的非聚合字段分组。

此时的查询JSON为:

{

"fields":[

{

"name":"EMPID",

"alias":"员工数",

"title":"员工数",

"comparison":"=",

"values":[],

"show":1,

"aggr":"count",

"dataType":1

},

{

"name":"GENDER",

"alias":"性别",

"title":"性别",

"comparison":"=",

"values":[],

"show":1,

"aggr":"",

"dataType":1

}

],

"currGroup":"_all"

}

l  聚合后过滤

聚合字段上设置的条件为聚合后的条件,相当于sql中的having,这里是要找出员工数少于5个的部门。

此时的查询JSON为:

{

"fields":[

{

"name":"EMPID",

"alias":"员工数",

"title":"员工数",

"comparison":"<",

"values":["5"],

"show":1,

"aggr":"count",

"dataType":1

},

{

"name":"DEPT",

"alias":"部门",

"title":"部门",

"comparison":"=",

"values":[],

"show":1,

"aggr":"",

"dataType":1

}

],

"currGroup":"_all"

}

l  同一字段聚合前后都参与过滤

需求变成:找出员工编号<=30且员工数小于5的部门,这时把员工编号字段拖入两次,聚合前的员工编号要设置成小于等于30,并且设置不显示;而计数的条件设置小于5

也就是说员工编号聚合前后都参与了过滤。

此时的查询JSON为:

{

"fields":[

{

"name":"DEPT",

"alias":"部门",

"title":"部门",

"comparison":"=",

"values":[],

"show":1,

"aggr":"",

"dataType":1

},

{

"name":"EMPID",

"alias":"员工数",

"title":"员工数",

"comparison":"<",

"values":["5"],

"show":1,

"aggr":"count",

"dataType":1

},

{

"name":"EMPID",

"alias":"",

"title":"员工编号",

"comparison":"<=",

"values":["30"],

"show":2,

"aggr":"",

"dataType":1

}

],

"currGroup":"_all"

}

还原界面

还原界面是指对已保存的查询json做二次编辑,将页面还原成原来的编辑状态。

可通过查询页面提供的JS方法getCommonQueryJSON()获取查询JSON

查询JSON还原界面的方式有如下两种:

方法一:直接提供json字符串。

编辑【安装目录】\report\web\webapps\demo\raqsoft\guide\jsp\下的cq.jsp,使用json字符串生成查询JSON

String cqx = "{'fields':[{'name':'NATIVE','alias':'户籍城市','title':'户籍城市','comparison':'=','values':['2','5','6','8'],'show':1,'aggr':'','dataType':1},{'name':'GENDER','alias':'性别','title':'性别','comparison':'=','values':[1],'show':1,'aggr':'','dataType':1},{'name':'DEGREE','alias':'学历','title':'学历','comparison':'=','values':['2','4'],'show':1,'aggr':'','dataType':1}],'currGroup':'_all'}";

通过Tag标签<raqsoft:commonQuery>发布:

<raqsoft:commonQuery

… …

cqx="<%=cqx%>"

/>

结果如下图:

 

方法二:根据页面参数和当前登录用户提供json字符串。

官方界面只是查询工具,不具备用户权限系统,客户把通用查询页面引入到自己的系统后,需要在jsp上部的java代码处根据当前用户的不同准备不同的Tag属性值,达到权限控制的目的。

多种JSON类型的使用 中的第3种生成方式类似,具体参考该小节。

 

……

cqx = "";

%>

<raqsoft:commonQuery

metadata="<%=metadata%>"

params="<%=params%>"

cqx="<%=cqx%>"

/>