用友BQ商业智能平台设计模式
——信息域&智能查询
信息域概述
一般而言,数据库里的表名和字段名都是一些很难理解的名称,那么业务人员如何基于数据库来构建查询和报表?BQ商业智能平台的信息域功能就用来解决这一难题,它能将数据库中的表名及字段名称改为业务人员容易识别并接受的业务术语。
信息域是为开发或终端用户提供一个良好的视角和语义层,以使得他们能够进行快速开发或自定义报表,来满足应用需求。
信息域构建
为了方便说明,我们暂时借助Oracle的几个系统来完成信息域的构建。
序号 |
表名 |
描述 |
所用字段 |
1 |
USER_TABLESPACES |
用户表空间 |
表空间名称 |
2 |
USER_TABLES |
用户表 |
表名称、表空间名称 |
3 |
USER_TAB_COLS |
用户表字段 |
表名称、字段名称、字段类型、数据长度、数据精度、是否为空、字段序列 |
4 |
USER_CONSTRAINTS |
用户表相关约束 |
所属用户、约束名称、约束类型、表名称 |
1、首先让我们创建一个信息域,在基本功能演示—>信息域处右键点击新建信息域。
2、从关系数据源—>tt(此处为自定义的一个数据源)—>SYS—>所以表、视图、存储过程下找到相关表(USER_TABLESPACES,USER_TABLES,USER_TAB_COLS,USER_CONSTRAINTS)拖入所建信息域下面。
3、建立相关连接,将各个表的相关联字段进行首尾拖拽,BQ商业智能平台的连接分别支持等值连接、左连接、右连接、全连接和自定义连接。
4、双击相应的字段以定义相应的字段语义表达,也可以直接在字段处修改,并删除不需要的字段。
5、最终完成信息域定义后的样式如下:
6、BQ提供了3种方式来进行语义的定义,但感觉都不是很方便;单一的修改效率偏低,通过Excel表的方式进行导入则过于复杂。我的建议是使用列表的方式进行某个对象的批量修改,如果是考虑到界面的风格问题,则可以采用弹出一个新窗口的方式。
参数构建
BQ商业智能平台之所以把参数单独构建,预计是处于两个原因,首先是参数的复用性比较高,参数可以反复应用在多个环境中;其次是参数本身构建比较复杂,甚至参数之间有相互依赖关系。
一个完整的参数包括以下几个部分:
参数的概要信息,包括参数名称、数据类型、参数类型
参数值来源:来自于某个对象(某个信息域中定义的对象);SQL(复杂的SQL表达式);值列(包括值和显示名称),还包括相应的数据转换,即在值和显示名称之间转换。
各种选项:是否允许手工输入、是否为空、是否多值
扩展参数输入方式:即定义参数在应用时的表现形式,文本框|复选框|单选框|多列下拉框|树形下拉框。
1、我们首先构建一个表空间名称的参数。
2、定义名称为表空间名称,数据类型为字符,对象则来自于信息域->用户表->信息域->用户表空间->表空间名称。
3、当然我们也可以用SQL的方式进行参数的直接定义
select {tt}.SYS.USER_TABLESPACES.TABLESPACE_NAME from {tt}.SYS.USER_TABLESPACES
4、接下来我们继续定义表名称参数,表名称是与表空间相关联的,所以在此处我们用SQL的方式进行参数的定义。
select {tt}.SYS.USER_TABLES.TABLE_NAME from {tt}.SYS.USER_TABLES where {tt}.SYS.USER_TABLES.TABLESPACE_NAME={? '表空间名称'}
请记住在BQ商业智能平台中参数以格式{? 'parameter'}定义的
智能查询概念
在BQ智能商业平台中,虽然智能查询没有确切的定义,但却是非常重要的一个功能;在我看来,智能查询就是通过各种查询方式,并类Excel的方式进行数据的展现,并提供了基于类Cell的技术和相应的脚本,实现数据的过滤、排序、格式定义和示警。
智能查询构建一
在使用信息域之前让我首先看看如何定制化一张智能报表,让我们从简单到复杂的步骤逐步构建。
1、在智能查询处右键点击新建智能查询
2、选择相应的查询构建方式,此处我们选择”基于查询语言(SQL)”
3、在空白处拷贝以下命令
selecttable_name,column_name,data_type,data_length,data_precision,nullable,column_id
from user_tab_cols
order by table_name,column_id
4、选择默认数据源为tt
5、执行选定命令,然后选择保存,一张简易的报表就制作出来了。
6、报表标题的重命名,在工作区打开数据列,对字段进行重命名
7、在重命名的过程中,数据区的列名会自动刷新
8、让我们再测试示警器功能,新建一个示警器。
9、在条件格式中输入RecNo()%2=0,即偶数行,数据格式设置为绿色,即偶数行为绿色。
10、在条件格式中输入RecNo()%2=1,即奇数行,数据格式设置为粉红色,即奇数行为粉红色
11、刷新相关数据后,看到的结果
12、关于示警器条件,BQ商业智能平台提供了大量的函数可供使用,必须认真阅读和反复测试,才能够完全掌握,并发挥其最大效能
13、接下来,我们开始定义查询参数
将共享对象—>参数—>表空间名称拖入到工作区参数中
将共享对象—>参数—>表名称拖入到工作区参数中
当然我们也可以像定义共享对象—>参数一样,从头定义参数,但参数仅适用于该报表。
14、为了应用相关查询参数,我们需要到设计视图中修改相关SQL为
selecttable_name,column_name,data_type,data_length,data_precision,nullable,column_id
fromuser_tab_cols
where table_name = (select table_name from user_tables where table_name={? '表名称'} and tablespace_name={? '表空间名称'} )
order by table_name,column_id
15、然后返回表格视图进行相关刷新,系统会自动提示输入相应的参数
一张带查询条件的示警功能的智能查询便完成了
智能查询构建二
下面我们再用基于智能查询构造器实现同样的报表。
1、选择基于智能查询构造器方式
2、报表的包括三个主要构成部分
查询对象,即要展示的报表内容,从相应的信息域中拖入相应的字段即可
数据排序,即默认报表数据的排序规则,从相应的信息域中拖入相应的字段即可
查询条件,即报表的数据选取条件,在查询条件中包括新建参数、新建对象、新建子查询和操作符等等。
新建参数类似于共享参数中的参数定义,在此处为报表的私有参数。
新建子查询,则打开一个新的标签页,格式与主查询页面一致。
操作符,则是字段和参数的关系符号。
3、首先我们从信息域—>用户表—>用户表中把需要的字段拖进来,在此处为表名称、字段名称、数据类型、数据长度、数据精度、是否为空、字段序列
4、其次把表名称、字段序列拖入数据排序中
5、再次我们把表名称拖入查询条件中,操作符我们从菜单中选择”=”号,当然手工输入会更快些
6、我们本应该把共享参数—>表名称参数拖入”=”后面,但是表名称是与表空间名称相互关联的,直接拖入表名称参数并不能使用到表空间名称参数。我们仍旧点击右键选择新建子查询。
7、在子查询中,由于要返回的是表名称,我们从信息域中把表名称字段拖入查询对象中,在查询条件中,我们知道表空间名称字段=表空间名称参数,表名称字段=表名称参数。本来是不需要在工作区的参数中增加参数的,为了防止参数的顺序出现问题,我们最好先将表空间名称参数拖入参数区,再将表名称拖入参数区。
8、最终结果如下,然后保存。
9、再通过右下角的标签页回到主查询中,在”=”后面我们插入新建的智能查询,然后刷新数据,保存即可。
10、这样,一张基于信息域的报表就制作完毕了。
本文转自baoqiangwang51CTO博客,原文链接:http://blog.51cto.com/baoqiangwang/387817,如需转载请自行联系原作者