基础查询 / 分析

阅读(3926) 标签: 权限, 查询,

通常提到查询首先想到的就是编写SQL语句进行数据库查询,这种方式不仅需要对数据库表结构,以及表间关联关系有了解,还需要有一定SQL语法功底,这对于业务人员应该是比较困难的,而我们的查询控件就可以为业务人员解决这个困扰。润乾报表的查询控件,没有表和字段,只有指标的概念。

DQL 模型介绍

在多维分析中处理复杂条件或多表关联时,使用SQL数据集会难以书写,更难以理解,因此可以选择使用DQL模型的数据集。DQL模型提供了便于灵活建模的语义层,简明清晰的DQL语法,使得用户能基于更加简洁易懂的数据结构使用更加友好的查询语句进行数据查询。

使用DQL数据集是指通过DQL语句生成的数据集,它提供了更简单的查询语法来取代复杂的SQL。使用DQL数据集时需要连接报表DQL服务器,并且为服务配置元数据文件。

 

启动报表 DQL Server 服务

安装了润乾报表后,产品里自带一全套基于HSQL数据库的元数据层文件和与之关联的报表DQL Server服务和DEMO应用。在DQL元数据层设计器里,可以通过【服务】菜单,启动内置的TOMCAT服务和报表DQL Server服务,启动报表DQL Server时会自动将产品自带的报表DQL Server所引用的HSQL数据库启动。

除了通过上述菜单启动报表DQL Server,还可通过启动文件启动:

[raqsoft安装根目录]/report/bin下,我们可以直接通过startDQLSERVER.bat启动报表DQL Server,如果是单独部署报表DQL Server,那么可以通过如下命令启动服务:

在启动报表DQL Server时,需要指定参数start.home,指明服务器的主路径,并保证在该路径下存在services目录。如:

在运行命令中设定了java.ext.dirs参数,指定javajar加载路径,同时设定了start.home参数,指定报表DQL Server的主路径。

当然也可以做成启动文件,譬如我们产品已提供的[润乾报表安装根目录]/report/bin/startDQLSERVER.bat文件。

linux系统下,还可以使用非图形控制台。首先进入到润乾报表的[润乾报表安装根目录]\report\bin,然后执行如下命令:

执行命令:./startDQLSERVER.sh  -d,即可启动报表DQL Server服务;

执行命令:./startDQLSERVER.sh  -x,即可关闭报表DQL Server服务。

基础分析

通过数据集分析小节的学习,相信您已经对如何在多维分析中添加常用数据集有了初步的了解。为了在使用上更加灵活便捷,多维分析还可以使用DQL模型的数据集,DQL模型提供了便于灵活建模的语义层,简明清晰的DQL语法,使得用户能基于更加简洁易懂的数据结构使用更加友好的查询语句进行数据查询。

DQL模型提供了两种类型的数据集:DQL数据集/DQL表。需要写复杂DQL语句的用户可以使用DQL数据集,当然了,如果只是想简单的对某个表做分析,则可以选择使用DQL表,这种类型的数据集无需手动输入DQL语句,直接选择要使用的表即可。

 

如上图所示,业务人员想要分析订单表中的订单ID,客户ID,签单日期,订单金额四个指标,并且要让客户ID直接显示中文名。那怎样能让业务人员无需了解数据库表结构,只要在页面上拖拽指标就可以随意查询呢?

很简单,只需几步就能轻松搞定!下面我们分别以DQL数据集和DQL表为例,让您对DQL模型建立个初步的认识。

DQL数据集

DQL数据集适合熟悉一定DQL语法的用户,它是通过将DQL语句翻译成SQL语句,然后到物理数据库中检索满足一定条件的数据作为数据集。

步骤一:

本例以产品自带的dqldemo数据源为例,打开DQL元数据层设计器,点击菜单“服务”à“启动示例数据库”,“系统”à“控制台”会输出“数据库已启动”信息,表示HSQL数据库已启动。

 

步骤二:

打开DQL元数据层设计器,在菜单栏中通过系统>数据源或者点击,连接数据源:

步骤三:

新建元数据文件将数据库中订单和客户表导入到元数据中

在工具栏中点击导入数据库表

在弹出窗口中选择订单和客户表,点击确定。

导入数据表的元数据文件:

步骤四:

给导入的表设置主键:

给维字段设置更直观的维名,这样页面设置显示值的下拉列表显示会更友好。

制作好的元数据文件保存为后缀lmd 的文件。

步骤五:

定义字典文件:

打开前一步做好的元数据文件,系统菜单下选择【生成字典】,一个字典文件就自动生成了。

在字典文件里设置客户维的显示列名称为客户表的客户名称:

制作好的字典文件保存为后缀为dct的文件。

更多关于语义层中元数据和字典文件的细节可参考语义层小节。

 

步骤六:

通过服务à发布并浏览 DQL 分组分析菜单打开发布对话框,选择前面制作好的元数据文件和字典文件,进行发布。发布前需保证要使用的报表DQL Server服务为启动状态(报表DQL Server服务的启动可参考启动报表DQL Server服务小节):

元数据层设计器中可以直接发布元数据和字典文件。当然,也可以将创建好的元数据文件和字典文件部署到独立报表DQL Server服务和WEB应用中。语义层中的元数据文件需部署在报表DQL Server服务中,字典文件则需要在WEB应用的多维分析jsp文件中添加JS API部署。

字典文件部署方法如下所示,以产品自带的多维分析页面为例,打开 [安装根目录]\report\web\webapps\demo\raqsoft\guide\jsp\olap.jsp,添加如下代码:

<script>

guideConf.dct="D:/test.dct";//设置字典文件

</script>

更多关于多维分析JS API的介绍可参考JS API控制初始化界面小节;

关于报表DQL Server独立部署可参见报表DQL服务器部署集成小节。

步骤七:

点击【发布】按钮,后台程序会自动启动内置的 TOMCAT服务,并打开分组分析页面。

在多维分析页面中点击右上角数据集菜单,新建DQL数据集:

选择产品自带的报表DQL Server服务,添加DQL语句点击查询数据,缓存入文件,然后保存DQL数据集就创建完成了。

新建报表:

如上图所示客户ID列显示的代码,接下来我们就通过设置显示值,将客户ID显示为客户名称。

点击客户ID后面的在【显示值】菜单中选择客户的代码表:

客户ID就变成客户名称了。

多维分析中的数据集除了可以直接在页面上添加DQL数据集,同时为了方便用户自定义修改,润乾报表还提供了在jsp中通过添加Tag标签属性来添加DQL数据集。

JSPTag标签发布如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"%> 

<%@ taglib uri="/WEB-INF/raqsoftAnalyse.tld" prefix="raqsoft" %>

<raqsoft:analysev2 

dataSource="DataLogic"  //指定报表DQL Server服务

ql="select * from 订单"    //DQL查询语句

/>

Tag标签中数据集类型对应的属性为dataSourceql。具体关于Tag标签属性介绍可参考《程序员参考》分组分析控件详细说明小节。

 

DQL

对已有报表DQL Server中的表分析,可以选择此类数据集。在页面上选择单表后单表的表字段以及单表所关联的广义外键都会列出。这种类型的数据集不需要用户自己写DQL语句,而是通过下拉列表的形式由用户去选择需要使用的DQL表即可。

接上例,我们在多维分析页面中添加一个DQL表类型的数据集。

新建DQL表类型的数据集,选择产品自带的报表DQL Server服务,添加DQL语句:

点击保存,数据集就创建完成了。

新建报表:

如果想让客户ID显示为客户名称,可参见DQL数据集中对显示值的设置。

添加DQL表类型的数据集不仅可以在数据集窗口中选择DQL表,还可通过修改jspTag标签实现对DQL表类型数据集的添加。

使用Tag标签添加DQL表类型数据集时支持设置一个或多个DQL表。

JSPTag标签发布如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"%> 

<%@ taglib uri="/WEB-INF/raqsoftAnalyse.tld" prefix="raqsoft" %>

<raqsoft:analysev2 

dataSource="DataLogic"  //指定报表DQL Server服务

fixedTable="订单"    //DQL表,多个表时用逗号隔开

/>

Tag标签中数据集类型对应的属性为dataSourcefixedTable。具体关于Tag标签属性介绍可参考《程序员参考》分组分析控件详细说明小节。

基础查询

前端做业务查询时,业务人员因为不清楚SQL语法或DQL语法的使用,因此无法直接使用多维分析,为此产品特别提供了查询控件,可直观的看到报表DQL Server服务中的所有指标,业务人员只需简单的动动手指拖拽指标就可以完成查询分析。

接下来我们以基础分析中制作的元数据和字典文件为例,介绍DQL模型在查询控件中的使用。

步骤一:

在元数据层设计器中打开基础分析小节中创建的lmd文件。点击工具栏中的追加行按钮,为订单表中的客户字段添加外键:

保存元数据文件。

步骤二:

通过服务à发布并浏览 DQL 明细查询菜单打开发布对话框,选择前面制作好的元数据文件和字典文件,进行发布,发布前需保证要使用的报表DQL Server服务为启动状态(报表DQL Server服务的启动可参考启动报表DQL Server服务小节):

元数据层设计器中可以直接发布元数据和字典文件。当然,也可以将创建好的元数据文件和字典文件部署到独立报表DQL Server服务和WEB应用中。语义层中的元数据文件需部署在报表DQL Server服务中,字典文件的部署则需要在WEB应用的多维分析jsp中添加Tag标签属性。

字典文件部署方法如下所示,以产品自带的多维分析页面为例,打开 [安装根目录]\report\web\webapps\demo\raqsoft\guide\jsp\olap.jsp,添加如下代码:

<raqsoft:detailQuery

……

dct="D:/test.dct"  //指定字典文件

/>

更多关于明细查询控件的Tag标签属性介绍可参考《程序员参考》明细查询控件详细说明小节;

关于报表DQL Server独立部署可参见报表DQL器部署集小节。

点击【发布】按钮,后台程序会自动启动内置的 TOMCAT服务,并打开明细查询页面:

将左侧指标区中想要查询的指标拖拽到右侧,然后点击按钮就可以进入分析页面,查看分析数据。

拖拽订单ID客户ID签单日期三个指标后左侧报表就展现出来了。此时客户ID列显示的是客户名称,而不是客户ID,其实这些都是预定义语义层的功劳。

更多关于语义层中元数据和字典文件的细节可参考语义层小节。

查询控件是通过在JSP文件中添加Tag标签实现的,因此在润乾报表demo应用下可以通过访问润乾报表demo应用下已有的raqsoft/guide/jsp/qyx.jsp进入查询控件,也可以直接新建JSP文件添加Tag标签访问查询控件。

Tag标签内容如下所示:

<raqsoft:detailQuery

dataSource="DataLogic"   //指定要访问的报表DQL Server服务名,产品自带的报表DQL服务器名为DataLogic

qyx="D:/test.qyx"  //指定要展现的查询文件

/>

Tag标签中数据集类型对应的属性为dataSourceqyx,属性介绍可参考《程序员参考》明细查询控件详细说明小节。

动态语句替换

DQL分组分析在使用SQL数据集时,可以通过参数传递的形式对SQL语句进行修改。

示例:

使用SQL数据集查询雇员表,并且过滤出职务为销售代表的雇员信息,首先设置[安装根目录]\report\web\webapps\demo\raqsoft\guide\jsp\olap.jsp中需要传递的参数”test1”及参数值销售代表

<%

...

//如果之前有条件了,而且这次访问没有拼vsb参数,那么用老条件

if(oldFilters != null && oldFilters.size()>0 && (vsb == null || vsb.length() == 0) && norefreshfilter.equals("yes")){

filters = oldFilters;

}else {

session.setAttribute("_raqsoft_filters_",filters);

DQLTableFilter f = new DQLTableFilter("default",dataSource);

filters.add(f);

if (vsb.length()>0) f.setVsb(vsb);

if (macro.length()>0) f.setMacro(macro, null);

//f.getFilters().put("雇员","${T}.雇员=${雇员}"); //用户可以自己补充表的过滤条件

f.getParamValues().put("test1","销售代表");//设置过滤条件里的参数值(宏值)

}

%>

然后编辑SQL数据集如图:

点击“查询数据,缓存入文件”,可以看到控制台输出的SQL语句,如图:

参数传递成功,并且可以在分析界面展示:

参数值可以为任意内容,如:f.getParamValues().put("test1","职务 = '销售代表'"),则数据集语句为:select * from 雇员 where ${test1}f.getParamValues().put("test1","select * from 雇员 where 职务 = '销售代表'"),则数据集语句为:${test1}