当前位置: 首页 > news >正文

用友BQ商业智能平台设计模式——信息域智能查询

用友BQ商业智能平台设计模式

——信息域&智能查询

 

信息域概述

一般而言,数据库里的表名和字段名都是一些很难理解的名称,那么业务人员如何基于数据库来构建查询和报表?BQ商业智能平台的信息域功能就用来解决这一难题,它能将数据库中的表名及字段名称改为业务人员容易识别并接受的业务术语。

信息域是为开发或终端用户提供一个良好的视角和语义层,以使得他们能够进行快速开发或自定义报表,来满足应用需求。

信息域构建

为了方便说明,我们暂时借助Oracle的几个系统来完成信息域的构建。

序号

表名

描述

所用字段

1

USER_TABLESPACES

用户表空间

表空间名称

2

USER_TABLES

用户表

表名称、表空间名称

3

USER_TAB_COLS

用户表字段

表名称、字段名称、字段类型、数据长度、数据精度、是否为空、字段序列

4

USER_CONSTRAINTS

用户表相关约束

所属用户、约束名称、约束类型、表名称

 

1、首先让我们创建一个信息域,在基本功能演示—>信息域处右键点击新建信息域。

2、从关系数据源—>tt(此处为自定义的一个数据源)—>SYS>所以表、视图、存储过程下找到相关表(USER_TABLESPACESUSER_TABLESUSER_TAB_COLSUSER_CONSTRAINTS)拖入所建信息域下面。

3、建立相关连接,将各个表的相关联字段进行首尾拖拽,BQ商业智能平台的连接分别支持等值连接、左连接、右连接、全连接和自定义连接。

4、双击相应的字段以定义相应的字段语义表达,也可以直接在字段处修改,并删除不需要的字段。

5、最终完成信息域定义后的样式如下:

6BQ提供了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,如需转载请自行联系原作者

相关文章:

  • Oracle隐含参数scn不一至启动
  • 应用虚拟化之规划篇二 项目流程规划
  • centos 安装 jenkins
  • wxPython 笔记(9)向窗体中加入控件
  • 硬链接与软链接
  • linux 文件属性
  • mysql配置文件调优
  • LDAP实现企业异构平台的统一认证
  • 配置rsync源服务器
  • js获取区域坐标
  • 海洋祝福电子贺卡
  • 虚拟局域网(VLAN)和以太网通道
  • WAS 常用命令
  • SQL Server In-Memory OLTP Internals for SQL Server 2016
  • 酣畅淋漓.....
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • Java-详解HashMap
  • JS题目及答案整理
  • Python实现BT种子转化为磁力链接【实战】
  • React-flux杂记
  • SAP云平台里Global Account和Sub Account的关系
  • WebSocket使用
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 从重复到重用
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 区块链将重新定义世界
  • 入口文件开始,分析Vue源码实现
  • 线性表及其算法(java实现)
  • #if 1...#endif
  • (Git) gitignore基础使用
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (二开)Flink 修改源码拓展 SQL 语法
  • (理论篇)httpmoudle和httphandler一览
  • (转)ABI是什么
  • (转)四层和七层负载均衡的区别
  • (转载)从 Java 代码到 Java 堆
  • .htaccess配置重写url引擎
  • .net framework4与其client profile版本的区别
  • .net mvc部分视图
  • .NET 设计一套高性能的弱事件机制
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET简谈设计模式之(单件模式)
  • .net经典笔试题
  • .NET框架设计—常被忽视的C#设计技巧
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @Autowired和@Resource装配
  • @ModelAttribute注解使用
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [ajaxupload] - 上传文件同时附件参数值
  • [CISCN2019 华东北赛区]Web2