用友NC查询引擎使用文档.docx
- 文档编号:4308066
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:44
- 大小:914.40KB
用友NC查询引擎使用文档.docx
《用友NC查询引擎使用文档.docx》由会员分享,可在线阅读,更多相关《用友NC查询引擎使用文档.docx(44页珍藏版)》请在冰豆网上搜索。
用友NC查询引擎使用文档
用友NC二次开发平台
——查询引擎
用友NC平台技术部
2003-12-31
目录
第一章前言3
1.产品的前身3
2.产品的需求背景3
第二章查询引擎的管理调度5
1.对象树管理5
1.1目录管理5
1.2对象管理6
2.切换定义数据源6
第三章查询引擎的查询模型8
1.参数控制8
2.SQL设计9
2.1数据字典10
2.2向导设计10
2.3手工设计13
3.数据交叉13
3.1第一类(投影)交叉13
3.2第二类(旋转)交叉15
4.代码嵌入16
4.1SQL整理16
4.2数据加工18
4.3穿透规则21
5.查询浏览24
5.1查询执行与展现24
5.2数据导出24
5.3创建物化表24
6.查询任务25
第四章查询引擎的界面模型26
1.引用查询26
2.格式设计27
2.1控件管理27
2.2行列格式设计31
2.3预定义数据处理34
3.界面运行36
3.1界面初始化36
3.2数据处理37
3.3控件连动40
3.4报表打印41
3.5功能节点挂接41
参考文献43
第一章前言
查询引擎的功能定位:
一个面向高级实施人员和专业开发人员的查询建模产品,可以全面支持复杂查询的设计和个性化的报表展现。
1.产品的前身
查询引擎在功能流程和查询模型方面参考了自定义查询的理念,在界面设计方面汲取了FormDesign的思路,同时融入了数据仓库的技术,并依赖于通用的NC数据字典DDC。
(1)自定义查询:
NC于2000年开始研发的一个面向中级实施人员和二次开发人员的查询报表工具,由查询管理中心、报表格式设计、报表浏览、报表权限控制和数据加工厂几个模块构成,此工具首次提出了基于数据字典来管理数据并建立查询对象的思路,能够提供比较丰富的查询分析、数据加工和报表展现功能。
(2)FormDesign:
NC于2003年开始研发的一种界面开发模式,定位于支持功能建模。
(3)数据字典:
一种管理数据库逻辑结构的机制,存在于物理数据库和用户接口之间。
NC于2002年开始研发数据字典,最开始只用于自定义查询,后来经过功能强化和逐步推广,成为现在的DDC(DataDictionaryControl)。
其功能包括数据库对象的管理与编辑、数据字典的解析生成等。
(4)数据仓库:
NC的一个独立产品,能够按照指定的入仓规则从多个业务数据库抽取数据,并通过入仓服务定期把数据加载到数据仓库。
2.产品的需求背景
(1)复杂查询报表的需求:
在实际的业务查询中,开发人员经常会遇到以下一些棘手的问题——复杂的SQL,从不同的查询条件得到完全不同的查询结果,查询结果的复合,业务逻辑代码和大量数据加工算法的介入,各种各样的数据交叉和数据处理手段等等;在展现格式方面,通常要求灵活、友好、可视化、个性化的设计界面,丰富的展现控件和统计图表,依据数据对单元格、列表头和行表头的格式进行设置,表单控件之间的连动等等。
这一切都对早期的查询报表工具提出了艰巨的要求。
(2)二次开发的需求:
随着NC对行业用户的拓展,由业务组程序员在通用软件中针对每个查询报表需求进行开发的方案已经变得不太现实,一线人员越来越频繁的面临来自用户的个性化报表实施压力。
实施团队迫切要求一个强大而且易用的二次开发工具,尽管功能的强大和易用往往存在着一些矛盾。
(3)工具整合的需求:
自定义查询在推出后,在实施中得到了一定的应用,但局限于出复杂程度不太高的查询报表。
IUFO是公司的传统报表产品,它更偏重于报表的管理方面,比如报表的发布、审核、校验等等。
数据仓库使查询的应用由单数据源拓展到了多数据源,并且提供定时同步业务数据的功能。
为了有效地实现资源共享,结合发挥各个工具的优势,NC决策层一直在推动相关产品的整合。
(4)查询分析软件发展潮流的需求:
近几年来,查询分析、数据挖掘、商业智能的研究不论在企业应用还是在学术领域都成为热点,ERP软件的数据建模和查询建模功能已经成为代表产品水平的重要指标。
第二章
查询引擎的管理调度
3.对象树管理
查询引擎的管理调度功能由主界面完成,主界面左侧为一棵对象树,树上挂有代表查询对象和界面对象的节点,右侧为显示当前选中对象基本属性的属性框。
图2-1管理调度主界面
·对象树(ObjectTree):
对象树是一个支持层次管理的数据结构,它维护自身的加载、存储和节点的目录管理,每个节点的信息主体存储在数据库的一个BLOB字段中。
对象树上的节点通常分为目录(Folder)和对象两类,并支持快速定位(树获得焦点时用ctrl-f)。
·属性框(ObjectInspector):
一个自动显示对象的属性和取值的控件,取值部分会根据属性的数据类型采用不同的编辑器。
3.1目录管理
(1)增加/删除/修改:
在根节点或目录节点之下可以增加目录,删除目录时会删除目录下的所有对象。
目录的可修改属性为目录名称。
同一目录下的目录和对象不能重名。
(2)复制/剪切/粘贴:
在查询子树或格式子树下,可以将一个目录及其下属内容从某位置拷贝或移动到另一个位置。
3.2对象管理
(1)增加/删除/修改:
在根节点或目录节点之下可以增加查询对象或者界面对象。
前者的属性为编码、名称和数据源,后者的属性为编码和名称,其中编码一经使用,就不再建议作任何修改,因为此编码可能被其它对象引用。
(2)复制/剪切/粘贴:
在查询或格式子树下,可以将一个对象从某位置拷贝或移动到另一个位置。
(3)导入/导出:
选中某个对象,可将其导出为XML文件,该文件可被导入到另外的目录下(当选中某目录时,导入功能可用)。
此功能可用于对象的跨数据库复制。
需要注意的是:
(a)在导出查询对象或界面对象时,需将其引用的查询对象一并导出才有意义;(b)导入不能违反对象主键及名称的唯一性约束。
下图显示了某查询对象所导出的XML文件。
图2-2导出XML文件
4.切换定义数据源
·多数据源运作机制:
查询引擎支持这样的模式——NC业务在数据源A下运行,查询引擎的定义放在数据源B,通过引擎定义的查询可以到数据源C去执行。
图2-3切换定义数据源
定义数据源(上面说的B)是指查询引擎自身的系统表所在的数据源,执行切换功能后,主界面上的对象树的内容会作相应改变。
图2-4切换定义数据源效果
第三章查询引擎的查询模型
查询模型的定义包括参数定义、SQL设计(含交叉定义)、SQL整理、数据加工、穿透规则等几部分,其中穿透规则描述的是本查询与外部查询的通信关系,剩余部分都用于描述查询内部的属性。
查询设计态和运行态的基本流程如下图所示:
图3-1查询模型流程
5.参数控制
参数是查询模型中代表动态信息的元素。
在SQL设计、SQL整理和数据加工中,均可以根据参数的不同,对查询的定义和执行进行调整。
过滤型参数:
如果创建某个参数的作用是根据其取值的不同改变WHERE条件的设置,则这类参数成为过滤型参数,这是最常用的参数功能。
(1)参数定义:
用于定义本查询内部引用的所有参数,其中参数名要保证互不相同。
数据类型包括自由录入、枚举、参照几种,当类型为枚举时,枚举项为用“@”分隔的枚举值,或者是一个单字段的查询SQL;当类型为参照时,枚举项为基础参照名,或者是用尖括号括起的自定义参照的类名。
(2)参数引用:
参数可在SQL设计的筛选条件页签引用,也可在SQL整理或数据加工的嵌入代码中利用编码向导引用。
(3)参数设置:
运行态要求用户首先对参数进行设置,这与查询模板的使用类似。
当报表引用了多个查询时,参数将通过多页签设置,每个页签代表一个查询。
图3-2参数定义
图3-3参数引用
图3-4参数设置
6.SQL设计
SQL设计包括向导设计方式和手工设计方式,无论采用哪种,在完成设计时系统均会对SQL进行合法性校验,如未通过校验则不能保存设计。
作为向导设计的一个重要组成环节,我们有必要先介绍一下数据字典。
6.1数据字典
前面已经提到过,查询对象的属性中包含数据源信息,因此在设计查询的时候需要加载相应数据源的数据字典。
我们知道,NC的数据库以DDC作为数据字典,但非NC的数据库则没有DDC,此时,系统会根据执行数据源是NC、IUFO或其它数据库三种情况分别加载不同的数据字典,而且这一机制已经预留了扩展的接口,其目的就是可以面向各种类型的数据库执行取数功能。
关于数据字典的生成有多种做法,可以参考DDC的专门文档。
这里只介绍一下数据字典的引用操作,查询引擎中用到的数据字典都以一棵对象树的形式存在,树节点包括目录、表、视图、字段、外键等信息,通过双击对象节点可以协助录入SQL语句的成分。
6.2向导设计
向导设计参考典型SQL的构成规则,充分利用数据字典的功能,引导用户一步步完成SQL的设计,因此是推荐使用的方式。
它由以下六个环节构成,其中最后一步“交叉属性”超出了SQL的涵义,我们在后面的专门章节中进行介绍。
(1)表定义:
即SQL语句中的from部分,可以利用数据字典选择库里的数据表,也可以选择查询对象,从而实现查询的集成(基于查询结果定义新的查询)。
(2)连接定义:
即SQL语句中的join部分(表间连接关系),支持单键连接和多键连接两种模式。
(3)字段定义:
即SQL语句中的select部分,可以定义任何SQLSERVER语法支持的查询表达式,但要保证字段别名不重复且使用规范名称(以字母开头、由字母、数字、下划线组成的字符串,且不能使用SQL保留字)。
如果使用了聚集函数,则由系统自动完成groupby部分。
(4)筛选条件定义:
即SQL语句中的where部分,可定义确定条件和待定条件,后者可以通过双击右操作数编辑框弹出参数界面并作引用。
(5)排序字段定义:
即SQL语句中的orderby部分。
(6)数据交叉属性:
交叉是一种常用的多维数据分析手段,详见后文。
图3-5表定义
图3-6数据表与临时表
图3-7连接定义
图3-8字段定义
图3-9表达式生成器
图3-10筛选条件定义
图3-11排序字段定义
6.3手工设计
手工设计是支持自由SQL的方式,由于复杂SQL在解析、适配、执行等方面的不稳定性较大,因此不推荐普通用户使用。
手工设计分为以下两个环节:
(1)SQL录入:
用户可以在数据字典的辅助下录入SQL语句,要求遵循SQLSERVER语法。
(2)字段显示名设置:
系统通过对用户录入SQL的解析获得字段信息,并向用户提供输入字段显示名的机会,显示名的默认值与查询字段的物理名相同。
图3-12SQL录入
图3-13字段显示名设置
7.数据交叉
7.1第一类(投影)交叉
·投影交叉:
假定有一个查询SQL,其查询结果是单行单列的汇总值,另外还有两组WHERE条件的序列,分别为横向序列(WhereX1、WhereX2、……、WhereXn)和纵向序列(WhereY1、WhereY2、……、WhereYn),则数据矩阵A(aij)对应的结果集成为投影交叉,如果aij是WhereXi和WhereYj同时作用在上述SQL上获得的结果。
比如,某查询用于查出公司和部门下的人数,原始SQL为:
SELECTbd_corp.unitname,bd_deptdoc.deptname,COUNT(bd_psndoc.psncode)
FROMbd_corpINNERJOIN
bd_deptdocONbd_corp.pk_corp=bd_deptdoc.pk_corpINNERJOIN
bd_psndocONbd_deptdoc.pk_deptdoc=bd_psndoc.pk_deptdoc
GROUPBYbd_corp.unitname,bd_deptdoc.deptname
查出的结果如下表所示:
图3-14原始数据(无交叉)
现在我们把查询字段中只保留人数count(bd_psndoc.psncode)一项,然后进行如下的投影交叉设置:
图3-15投影交叉设置
则交叉后的结果如下表所示:
图3-16投影交叉结果
7.2第二类(旋转)交叉
·旋转交叉:
此类交叉用于显示表中某几个字段(称为交叉值字段)的统计值,并将其分组放置在查询结果中,一组列在数据表的左侧(称为交叉行字段),一组列(称为交叉列字段)旋转到数据表的上部成为列表头,统计值则放在对应的交叉单元。
关于旋转交叉的更细节的内容,请参考李媛媛所著的《交叉表使用说明》。
两类交叉的最大差别在于:
第一类交叉属于查询行为,适用于行列设置都已在表样中固定的报表,其交叉结果严格遵循表样格式,其行列结构不会受查询数据的影响;第二类交叉属于数据加工行为,其交叉后的行列结构在查询出数据之前不可预料,多用于完全真实地对原始数据进行动态处理。
沿用3.1使用的例子,假定我们进行如下的旋转交叉设置(其中交叉砝码的意义是代表交叉值字段的位置,它只能出现在交叉行字段或交叉列字段当中):
图3-17旋转交叉设置
则交叉后的结果如下表所示:
图3-18旋转交叉结果
8.代码嵌入
8.1SQL整理
·SQL整理(SQLRepair):
指在SQL查询之前,对SQL所作的调整。
通常会根据参数的不同,对查询的表、字段或条件等信息进行增补或修改。
SQL整理的具体内容由内嵌的代码片段描述(这与后面将介绍的数据加工和穿透规则一样),代码的录入可通过编码向导协助完成,尽管如此,这几种功能仍然推荐由高级实施人员或程序员使用。
图3-19SQL整理代码
在图示的SQL整理代码中,表达了这样一个整理愿望:
当参数“detail”取值为“Y”时,引擎会在本查询对象已完成的SQL设计基础上多查询一张表(bd_defdoc)和两个字段(档案编码、档案名称),从而获得更明细的查询信息;如果该参数取值不为“Y”,则仍然按照SQL设计的定义去执行查询。
以下简单介绍几种SQL整理算法的编码向导使用方法:
(1)追加查询表:
参数为待追加的表物理名。
图3-20追加表向导
(2)追加连接条件:
与追加表同时使用,参数为连接模式、追加表物理名和追加的表间连接条件。
图3-21追加连接条件向导
(3)追加查询字段:
与追加表同时使用,参数为追加字段的表达式、显示名和别名。
图3-22追加字段向导
(4)按参数追加条件:
根据参数取值的不同追加不同的筛选条件,参数为参数名和筛选字段。
图3-23按参数追加条件向导
8.2数据加工
·查询结果集(ResultSet):
由二维数据集合(数据体)及其列信息(元数据,包括列名、列数据类型等信息)构成的一个数据载体。
查询引擎中使用的结果集为Borland公司开发的DataSet。
·数据加工(DataProcess):
数据加工是指某个(或某几个)结果集在经过一系列加工算法的变换后得到另一个结果集,而后者通常是业务上要求的展现结果。
相关的算法又称为加工滤镜,滤镜通常支持输入多个结果集和输出一个结果集,并可以嵌套使用。
数据加工与SQL整理的区别在于:
前者在SQL查询之后进行,作用的对象是结果集;后者在查询之前进行,作用的对象是SQL定义。
在数据加工的编码向导中,提供了多种实用加工滤镜。
图示的数据加工代码把主键分别为“user1”和“user2”的两个结果集按照pk_corp字段为键进行了左外连接,并在连接结果中保留了“user_name1”、“pk_corp”、“user_name2”三列。
图3-24数据加工代码
以下简单介绍几种数据加工算法的编码向导使用方法:
(1)由查询获得结果集:
根据查询ID和参数哈希表获得查询结果集,如果没有参数或不需要设置参数,则参数变量可取null。
图3-25获得结果集向导
(2)公式设置:
参数为公式列名、返回值数据类型和公式,如果公式列名不存在则新增一列,否则将该列的内容更新为公式返回值。
图3-26公式编辑
图3-27公式定义
(3)结果集连接:
指定两个结果集的连接字段、连接方式和连接后的保留字段,得到连接后的结果集。
图3-28结果集连接向导
(4)结果集联合:
指定两个列结构相兼容的结果集,得到联合(union)后的结果。
图3-29结果集联合向导
另外再列举几个加工代码中可以调用的有用方法:
1、StorageDataSetgetDataSet():
获得当前加工状态下的结果集;
2、voidsetDataSet(StorageDataSetds):
设置当前加工状态下的结果集。
如果这句指令放在最后,则ds将作为加工的最终结果集返回;
3、StringgetQmd().getDsName():
获得当前加工查询模型的执行数据源;
4、HashtablegetHashParam():
获得参数设置哈希表,其键为参数名,值为参数VO(ParamVO)。
8.3穿透规则
·数据穿透:
假定报表R1上存在某个区域A1,A1内部有若干业务数据,如果以A1为出发点能够切换到另一张报表R2的上的区域A2,而且A1和A2的内部数据存在着某种内在联系,则称可以从R1穿透到R2。
当这种穿透行为传递下去,我们就可以了解某张报表的数据明细,甚至追溯到它的数据来源。
通常我们会把上述的区域选为一个表格行或者一个表单元,而上述的内在联系就称为穿透规则。
一个查询上可以定义多个穿透规则,每个规则需要指定穿透的目标查询,同时目标查询上要创建一个过滤型参数,用于接收穿透区域的取值。
下图所示的穿透规则表达了这样的一个穿透意愿:
当用户选中了当前查询结果的某行时,允许他按照“psncode”字段在选中行的取值穿透到另一个查询(即目标查询,其ID为“rygzay”),而目标查询的接收参数为“psncode”。
一个查询可以设置多条穿透规则,由本查询可穿透到的目标查询需要创建一个(或多个)过滤型参数,用于接收穿透值。
下图所示的穿透规则表达了以下的穿透意愿:
如果用户选中了当前查询结果的某行时,允许用户根据选中行的psncode字段取值穿透到另一个查询(即目标查询,其ID为“rygzan”),而目标查询的接收参数为psncode
图3-30穿透规则定义向导
图3-31穿透规则代码
下图显示了一个由公司部门信息穿透到人员信息再穿透到薪资信息的用例,其中第一步穿透是单列等值穿透(相当于“部门=’电工班’”),第二步是非等值穿透(相当于“姓名like‘何%’”),第三步是多列联合穿透(相当于“人员=’何志平’and年份=’2003’”)。
图3-32穿透效果示意
9.查询浏览
9.1查询执行与展现
在建立好查询模型之后,系统提供预览查询执行结果的功能。
用户首先输入执行查询所需要的参数取值(如果有参数的话),查询引擎会根据该查询对象的数据源去对应的数据库执行查询,在经过查询结果集评估(对于查询记录数过大的情况允许用户优化或放弃查询)之后,把结果集展现给用户。
在展现之后,用户可以继续进行穿透、交叉和仪表测试等工作。
图3-33查询预览
9.2数据导出
导出功能支持将预览数据导出为纯文本文件,并可进而用EXCEL打开。
随着产品的发展,数据导出的格式会逐步丰富。
9.3创建物化表
查询引擎可以根据预览数据直接到数据库创建物化表,同时将物化表的结构注册到DDC中,以后的SQL设计就可以基于新创建的物化表进行,从而扩充了查询集成的范围。
图3-34创建物化表
10.查询任务
查询任务由专门的节点(ETL工具)完成,用于提供类似数据仓库的功能。
ETL工具由数据抽取工具(查询引擎)、数据仓库建表工具(DWC)和任务调度工具组成,其具体功能参见阳雄编写的《ETL工具使用文档》。
第四章
查询引擎的界面模型
界面模型节点的新建和管理参见第二章。
我们可以设计新的界面模型,也可以对已有的界面模型进行修改。
界面模型的设计包括引用查询,界面可视化设计,绑定数据集,数据预处理等部分。
界面模型设计态和运行态的基本流程如下图所示(设计态的操作并没有严格意义上的顺序限制):
图4-1界面模型流程
11.引用查询
引用查询是指将界面模型所要展现的查询结果集对应的查询定义引用到模型中来。
由于同一查询定义根据不同参数设置也可以得到不同结果集,所以为了区分这种绑定基于同一查询定义的不同结果集时,我们对每一个查询结果集起一个单一的别名来标志。
图4-2查询引用界面
对于数据集之间存在的某种一对多的关系,我们还可以根据需要建立主从关系(即主子表):
图4-3主子连接设置界面
12.格式设计
界面模型的格式设计包括了控件拖放,编辑控件属性及数据绑定属性,定义列格式,列表头,行表头等行列格式以及数据预处理等几部分。
分别介绍如下。
图4-4界面模型设计界面
12.1控件管理
界面模型设计工具提供了几种最常用的控件,如图4-4中控件栏中所示,分别是按钮、复选框、组合框、标签、列表、单选框、多页签、表、文本域、文本框、树、面板、分割栏、主子表、图表和参照控件,其中最重量级的控件是表和图表,绝大部分的数据集展现工作是这两个控件完成的。
初始时,界面上只有一个面板,处于选中状态,布局是默认的BorderLayout。
我们接下来的工作就是要在这个面板上定制我们的界面,这个过程和一般的可视化设计大同小异,在此不再赘述。
图4-5界面模型
双击界面上的控件就可以打开属性编辑器,可以编辑控件的相关属性。
属性编辑器上边是当前界面的控件列表,下面列出了当前选中控件的属性列表。
我们可以从控件列表中选中控件,也可以在界面上双击控件来选中控件进行属性编辑。
图4-6属性编辑器
所有控件都有背景色,前景色,字体和首选大小等普通属性。
其次,控件具有一些自己特有的属性,如面板具有布局属性,分割栏有分栏方向,分栏位置等特有属性。
下面我们来介绍一下几个主要的控件。
展现数据集的最重要的控件——表的几个属性:
(1)绑定数据集:
可以将表绑定到引用查询中的某一个查询定义,那么在运行态下表展现的就是该查询定义对应得到的查询结果集。
当设置了表的数据集绑定属性后,该查询定义中定义的列就相应的出现在表里(此时没有数据只有表头);
(2)列格式绑定:
有时候会对表中的数据展现有各种格式上的要求,如预警显示,精度设置,前缀后缀等等。
这时可以设置表的列格式属性,在列格式属性里不但可以设置列绑定的列格式,也可以设置列的显示顺序,显示与否等属性(列格式的定义在后面的小节里专门讲述)。
图4-7列格式设置
(3)列表头绑定:
当表绑定了数据集之后,可以根据展现需要绑定列表头格式,在表头ID属性里绑定表头的ID之后,从界面上就可以看到表的列表头已经绑定到了表头ID对应的表头格式(列表头格式的设计在后面的小节里会专门讲述);
(4)行表头绑定:
如果表绑定的查询定义里定义了第一类交叉(即投影交叉,参见第三章第3节),则表还可以设置行表头格式。
关于行表头的定义和设置在后面小节中讲述。
图表:
图表控件在设置了数据集绑定属性之后,可以设定其数据绑定属性。
在图表控件上弹出右键菜单点击
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 用友 NC 查询 引擎 使用 文档
![提示](https://static.bdocx.com/images/bang_tan.gif)