用友NC报表开发教程_第1页
用友NC报表开发教程_第2页
用友NC报表开发教程_第3页
用友NC报表开发教程_第4页
用友NC报表开发教程_第5页
已阅读5页,还剩296页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.2.3.1.2.3.4.1.2.3.4.5.6.7.1.2.1.2.&9.SQL.SQL.3.1.2.1.2.3.4.1.2.3.4.5.6.SQL.1.2.3.4.5.6.FAQQE7.查询引擎(,简称QE)的功能定位是,一个面向高级实施人员和专业开发人员的查询建模产品,可以全面支持复杂查询的设计和个性化的报表展现。1.查询引擎在功能流程和查询模型方面参考了其前身产品“自定义查询”的理念,在界面设计方面汲取了的思路,同时融入了的技术,并依赖于通用的数据字典。()自定义查询:于年开始研发的一个面向中级实施人员和二次开发人员的查询报表工具,由查询管理中心、报表格式设计、报表浏览、报表权限控制

2、和数据加工厂几个模块构成,此工具首次提出了基于数据字典来管理数据并建立查询对象的思路,能够提供比较丰富的查询分析、数据加工和报表展现功能。():于年开始研发的一种界面开发模式,定位于支持功能建模。()数据字典:一种管理数据库逻辑结构的机制,存在于物理数据库和用户接口之间。于年开始研发数据字典,最开始只用于自定义查询,后来经过功能强化和逐步推广,成为现在的()。其功能包括数据库对象的管理与编辑、数据字典的解析生成等。()数据仓库:的一个独立产品,能够按照指定的入仓规则从多个业务数据库抽取数据,并通过入仓服务定期把数据加载到数据仓库。产品的需求背景如下所述。()复杂查询报表的需求:在实际的业务查询

3、中,开发人员经常会遇到以下一些棘手的问题一一复杂的SQL,从不同的查询条件得到完全不同的查询结果,查询结果的复合,业务逻辑代码和大量数据加工算法的介入,各种各样的数据交叉和数据处理手段等等;在展现格式方面,通常要求灵活、友好、可视化、个性化的设计界面,丰富的展现控件和统计图表,依据数据对单元格、列表头和行表头的格式进行设置,表单控件之间的连动等等。这一切都对早期的查询报表工具提出了艰巨的要求。()二次开发的需求:随着对行业用户的拓展,由业务组程序员在通用软件中针对每个查询报表需求进行开发的方案已经变得不太现实,一线人员越来越频繁的面临来自用户的个性化报表实施压力。实施团队迫切要求一个强大而且易

4、用的二次开发工具,尽管功能的强大和易用往往存在着一些矛盾。()工具整合的需求:自定义查询在推出后,在实施中得到了一定的应用,但局限于出复杂程度不太高的查询报表。IUFO是公司的传统报表产品,它更偏重于报表的管理方面,比如报表的发布、审核、校验等等。数据仓库使查询的应用由单数据源拓展到了多数据源,并且提供定时同步业务数据的功能。为了有效地实现资源共享,结合发挥各个工具的优势,决策层一直在推动相关产品的整合。()查询分析软件发展潮流的需求:近几年来,查询分析、数据挖掘、商业智能的研究不论在企业应用还是在学术领域都成为热点,已经成为代表产品水平的重要指标。ERP软件的数据建模和查询建模功能2.现在让

5、我们来看一个最基本的查询样例,作为入门,我们知道在任何司和用户的概念,下面我们做一个查询某公司下用户的查询。1.进入客户化自定义查询查询引擎管理界面ERP系统中都存在公2.在“查询设计”树下新建一个目录,象一一用户查询。图一“测试用例”,并在这个目录下面创建一个查询对图一3.选择参数定义,这里我们定义一个名为显示名为“公司”的参数,注意这里的数据类型选择编码参照,枚举项中选择这个编码参照的类型,我们将根据这个参数选取的值来确定待选公司,并且在查询中根据这个参数选取的值来进行结果筛选。图一4.制作查询定义,制作一个查询定义的具体流程实际上就是为了生成一条SQL语句,查询数据源去获取数据,但是这个

6、生成SQL语句的过程被我们用图形化界面代替了,用户只需要了解基本的SQL规则就可以了,无需亲自手动去写纷繁复杂的SQL语句,同时我们也支持手工SQL。图一用户可以通过增加表来增加数据字典中的数据表,也可以点击临时表引用前面做好的查询定义对象,引用查询定义对象相当于设计了一个复合查询,六节查询集成。这里我们选择增加表来增加一个的用户信息。关于复合查询的定义参见第二章第表,这张表里面存储的是系统图一在选择字段页签下选择“用户名”等字段,这里的字段表达式可以是某表的字段,也可以是字段的运算或者函数处理表达式,例如:,就是代表这个字段的字符串长度。显示名可以是用户自定义的字符串,将来显示在报表的列表头

7、区域。图一前面我们提到这个查询必须按照公司为条件,过滤查询出来的用户,实际上就是为SQL语句生成一个条件,我们支持两种条件,固定和待定,顾名思义固定条件写好之后就不能变化,而待定条件是跟参数设置相关的,可以根据用户输入参数变化。我们在这里选取待定条件,用户表的公司编码字段等于前面我们设置过的节将有更详细的论述,这里只介绍最基本的功能。5.制作格式设计。关于查询定义的设计后面的章图一新建格式设计文件夹以及对象的方式与新建查询对象的方法一样,这里略去不讲。生成新的格式设计对象之后可点菜单中的界面模型“用户查询”。引用查询,来绑定我们刚才做好的查询设计对象选取刚才做好的查询之后我们在点击界面模型图一

8、格式设计,这里可以选取我们预置的几种界面模型之一,例如这张表我们选取表头+表体格式。图一最后点菜单中的浏览,让我们浏览一下制作出的第一张报表,图一点浏览之后我们会看到一个选择参数的对话框,在这个参数对话框中我们可以设置自己的参数值,比如我们选取这个公司,点确定,则可以浏览这个公司下的所有用户,如下图。?传:?传:图一选择表头区域的公司参照,我们可以浏览不同公司下的用户。已经制作完毕,我们可以将做好的查询作为独立节点发布到3.至此一个最简单的自定义查询系统下供用户使用。在本章中我们介绍了查询引擎的发展历史以及产品的需求背景,通过一个入门样例,让用户初步了解了查询引擎的基本功能,在后面的章节中我们

9、将详细介绍查询引擎的各项功能,并通过一些样例使得用户能够使用本产品进行快速便捷的二次开发。F图是对查询引擎开发流程的一个示意:创建创建十发布查询格式图一查询建模体系报表1.查询引擎的管理调度功能由主界面完成,主界面左侧为一棵对象树,树上挂有代表查询对象和界面对象的节点,右侧为显示当前选中对象基本属性的属性框。图二管理调度主界面对象树():对象树是一个支持层次管理的数据结构,它维护自身的加载、存储和节点的目录管理,每个节点的信息主体存储在数据库的一个BLOB字段中。对象树上的节点通常分为目录()和对象两类,并支持快速定位(在树获得焦点时用。属性框():一个自动显示对象的属性和取值的控件,取值部分

10、会根据属性的数据类型采用不同的渲染器来展示,不同的编辑器来编辑。目录的编辑操作如下:()增加/删除/修改:在根节点或目录节点之下可以增加目录,删除目录时会删除目录下的所有对象。目录的可修改属性为目录名称。同一目录下的目录和对象不能重名。()复制/剪切/粘贴:在查询子树或格式子树下,移动到另一个位置。对象分为查询对象和格式对象,其编辑操作如下:可以将一个目录及其下属内容从某位置拷贝或()增加/删除/修改:在根节点或目录节点之下可以增加查询对象或者界面对象。前者的属性为编码、名称和数据源,后者的属性为编码和名称,其中编码一经使用,就不再建议作任何修改,因为此编码可能被其它对象引用。请注意对象的唯一

11、标识是编码而不是显示名称,一个查询对象或是格式设计对象可以有多个显示名称但是只能有唯一的编码。()复制/剪切/粘贴:在查询或格式子树下,可以将一个对象从某位置拷贝或移动到另一个位置。请注意这里的复制粘贴都是在同一棵树下的,如果复制格式设计对象到查询对象树下则会出错。()导出:选中某个对象,可将其导出为文件,文件里描述了对象的所有信息;也可选中某个目录,将该目录下所有的子目录和对象都导出到指定位置(保持原有的目录级次)。()导入:在选中某个目录之后,导入功能可用。导出的文件,可以导入到当前目录下。此功能可用于对象的跨数据库复制。导入时,我们可以选择单个文件,也可以选择一组文件或目录,导入后会保留

12、原目录的级次结构。需要注意的是:在导出查询对象或界面对象时,需将其引用的导入不能违反对象主键及名称的唯一性约束。文件。查询对象一并导出才有意义;下图显示了某查询对象所导出的C:=!C:entEandStirissVyESi细信包.1BM/c.si.aTIEB,BEE/Mm._25”,1/c.sex,H,J/siscassnaasassBB/图二导岀文件)在导入导出的过程中需要注意的一个问题是数据源的问题,在实际应用中经常出现这样的场景:实施人员在自己的环境(数据源为)下做了一对查询模型设计和格式设计,然后导出这一对设计对象为文件,然后到用户的环境(数据源为)下执行导入,发现无法查出数据,并且提

13、示“找不到查询所用数据源”,这是因为导出成文件的时候,记录在文件中的执行数据源是,而客户的数据源名称是,与查询模型设计中的数据源不符合,这样查询模型就无法到正确的数据源下去取数,可以在弹出的提示框“是否修改执行数据源为当前数据源”,选择“是”,则该查询设计模型的数据源被修改为当前账套的数据源,这样就可以在客户的数据源中正确取数了。2.查询引擎的数据源关系如下图所示:图二查询引擎数据源关系模型图多数据源运作机制:查询引擎支持这样的模式一一业务在数据源下运行,查询引擎的定义放在数据源B,通过引擎定义的查询可以到数据源注:只有数据仓库下的查询引擎有切换定义数据源和跨库查询的功能,只能查询当前账套数据

14、源的数据。C去执行。客户化下的查询引擎图二切换定义数据源各种数据源的概念区分:业务数据源(上面说的)通常指当前登录账套的数据源,是运行所需要的业务数据源。定义数据源(上面说的B)是指查询引擎自身的系统表所在的数据源,执行切换功能后,主界面上的对象树的内容会作相应改变。请注意查询引擎自身的系统表可以和当前的业务数据源不是同一个数据源,例如当前登陆账套是,数据源是,而查询引擎的系统表可以不在该数据源下,而在另一个数据源下,可能是账套的数据源,也可能是任何其他的数据源。但是前提是该数据源中必须含有查询引擎自身的系统表。ITTSMWinperiodendperiodcorp7subj图三参数引用图三参

15、数设置替换型参数:是指参数名以开头并以结尾的参数,多用于手工SQL设计中,也可用于向导SQL的非待定条件部分。这种参数通常相当于中的占位符,关于替换型参数,后面的章节中还有详细介绍。在设置替换型参数的时候,不输入值将不被认为是忽略此参数对应的条件。2.SQLSQL设计包括向导设计方式和手工设计方式,无论采用哪种,在完成设计时系统均会对SQL进行合法性校验,如未通过校验则不能保存设计。作为向导设计的一个重要组成环节,我们有必要先介绍一下数据字典。前面已经提到过,查询对象的属性中包含数据源信息,因此在设计查询的时候需要加载相应数据源的数据字典。我们知道,的数据库以作为数据字典,但非的数据库则没有,

16、此时,系统会根据执行数据源是、IUFO或其它数据库三种情况分别加载不同的数据字典,而且这一机制已经预留了扩展的接口,其目的就是可以面向各种类型的数据库执行取数功能。数据字典提供了统一的数据建模平台,支持对各种数据库对象进行管理,维护这些物理对象的逻辑属性,并向外系统提供访问数据库逻辑信息的接口。以查询引擎为例,查询对象的定义是基于数据字典进行的,而这份数据字典来自查询对象所指定的数据源。由于多数报表的列与业务数据库的字段存在某种对应关系,直观性和易用性。因此数据字典的存在有助于提高查询定义的萱找増加确定图三数据字典取消数据字典通常在安装产品时候由系统生成,如果想自己为某些数据库对象生成字典,可

17、以采用数据字典管理界面提供的导入方法。导入方式包括三种(详细操作可参见数据字典导入说明):、解析文件(格式);、解析标准建库脚本;、提取数据库元数据;如果需要给非数据库(比如用户采用的第三方数据库)生成数据字典,可以利用提供的逆向工程功能将库里的物理表生成文件,修改其中表和字段的中文名称,然后以文件格式存储,再使用上述第一种方法导入。查询引擎中用到的数据字典都以一棵对象树的形式存在,树节点包括目录、表、视图、字段、外键等信息,通过双击对象节点可以协助录入SQL语句的成分。向导设计参考典型SQL的构成规则,充分利用数据字典的功能,引导用户一步步完成SQL的设计,因此是推荐使用的方式。它由以下六个

18、环节构成,其中最后一步“交叉属性”超出了SQL的涵义,我们在后面的专门章节中进行介绍。()表定义:即SQL语句中的部分,可以利用数据字典选择库里的数据表,也可以选择查询对象,从而实现查询的集成(基于查询结果定义新的查询)。图三表定义IBPMBhiBhrBeBBBro图三增加表(物理表)与临时表)连接定义:即SQL语句中的部分(表间连接关系),支持典型模式和高级模式,典型模式实际就是关系数据库中的单键连接,连接字段只有一个,并且操作符都是常见的而高级模式可以自由设置连接表达式,支持多键连接。图三连接定义典型模式图三连接定义高级模式,请字段定义:即SQL语句中的部分,可以定义任何SQLSERVER

19、语法支持,请的查询表达式,但要保证字段别名不重复且使用规范名称(以字母开头、由字母、数字、下划线组成的字符串,且不能使用SQL保留字)。如果使用了聚集函数,则由系统自动完成部分。中增添了这样的功能,可以在查询字段中添加的公式,但是这些公式需要特定的格式,例如取得前台数据库缓存中某表的一个或多个字段,可以使用注意单引号和大括号是必须的。这里的处理机制是先将上述公式作为一个字符串,在查出结果集之后再把公式翻译执行。所以这里的公式是基于最终结果集的。12346bd_corp.unitnamegl_voucher.periodgl_voucher.prp3reddalebd_accsubi.subjn

20、amegl_dtail.expisnationgl_detailocaldetiitmountgLdEtail0calcreditamountunitnameperiodprapareddatesubjnameexplanlionlocaldebihm.localereditam.1图三字段定义图三表达式生成器筛选条件定义:即SQL语句中的部分,可定义确定条件和待定条件。如果是待定条件,在值编辑框获得焦点时双击编辑框可弹出参数界面并作引用者在值编辑框获得焦点时按件,在值编辑框获得焦点时按F12键或者双击弹出参数引用框);如果是固定条F11键或者双击可弹出环境变量引用框,按F12键可弹出所引用的

21、基础数据表的参照。对于在查询字段里使用了聚集函数的SQL设计,筛选条件可能需要使用子句。页签默认是隐藏的,可以在查询定义框的南部面板按鼠标左键弹出隐藏的页签。L0102=0=丘回45n三inperiodFendperiod图三筛选条件定义(典型模式参见图)排序字段定义:即SQL语句中的部分。图三排序字段定义()向导设计完成后在查询定义框的南部面板鼠标双击可弹出向导生成的等效(待定条件全用(仁代替)。该功能可以用来检查SQL语句是否有错。实际上,每次做完查询设计之后点击确定时,我们都会试执行一下您的SQL语句,但是SQL并不查出数据来,如果您的查询设计最终生成的相应的出错提示。SQL语句有问题,

22、那么就会有$eiectbd_corp.uniinamegl_youthenperiodasunltname,period,gl_voucher.prepareddateasprepareddate,bd_accsutisubjnameassubjname,5i_deta11.expi-anationenuianatlon.gl_detailocNlciEbitamciuntaslocaldebitamouni,gl_detail.localcreditamountasIacaIcreditamountframgivoucherinnerjoinbdcorpongij*oucher.pk_c:a

23、rp=bd_corp.pk_cor|)innerjamgl_detailiongl_voucher.pk_VDucher=gl_detail.pk_voucherinnsrCD图三由查询设计生成的SQL语句)数据交叉属性:交叉是一种常用的多维数据分析手段,详见后文。手工设计是支持自由SQL的方式,由于复杂SQL在解析、适配、执行等方面的不稳定性较大,因此不推荐普通用户使用。手工设计分为以下两个环节:SQL录入:用户可以在数据字典的辅助下录入SQL语句,要求遵循SQLSERVER语法。如图,注意,我们在SQL定义里用到了一个替换型参数(),这里替换型参数也必须在前面参数定义中定义,于替换型参数的

24、具体说明参见附录);并且参数名要以开头并且以图三SQL录入SQL翻译:实际上最终到数据库中执行的SQL语句都是经过翻译的,系统有专门的SQL翻译器对各种SQL方言进行翻译,在手工设计中可以选择是否启用翻译器这个功能,通常建议启用。图三SQL录入字段显示名设置:系统通过对用户录入SQL的解析获得字段信息,并向用户提供输入字段显示名的机会,显示名的默认值与查询字段的物理名相同。图三字段显示名设置3.什么叫做数据交叉?在怎样的场景下需要用到数据交叉?让我们来看两个应用场景:.我们从数据库的原始数据表中经过连接得到这样一个结果集,该表共有三行三列,现在我们想得到部门的员工民族统计表,图三F图是我们想要

25、得到的最终结果:图三我们知道这样的查询实际上是不能通过SQL语句来实现的,因为通过SQL语句查询出来的列中不可能存在像汉族,满族,蒙古族这样的列,这些数值是原始数据库表中某列中的值。但是这个功能我们可以通过投影交叉来实现。.还是刚才那个例子,我们现在想要得到的结果需要按照民族列中的民族数动态扩展,也就是说,不能只有汉族,满族,蒙古族这些固定好的值,如果添加了一笔数据,民族的值为苗族,我们最终的报表能够动态的呈现出这样的变化,理想中的结果如下图所示:图三实际上这样的例子可以用旋转交叉来实现。下面我们要分别介绍这两种交叉功能。投影交叉第一类交叉:假定有一个查询SQL,其查询结果是单行单列的汇总值,

26、另外还有两组WHERE条件的序列,分别为横向序列(、)和纵向序列(、),则数据矩阵(a)对应的结果集成为投影交叉,如果a是和同时作用在上述SQL上获得的结果。数据模型如图所示:SELECT图三投影交叉数据模型比如,查询某公司下各部门各民族的人数,原始SQL(由查询向导生成的等效SQL)为:asasas=?查出的结果如下表所示:现在我们把查询字段中只保留人数设置:图三原始数据(无交叉)项,然后进行如下的投影交叉图三图三投影交叉设置则交叉后的结果如下表所示:图三投影交叉结果通过投影交叉,我们可以完成纯粹的SQL语句无法完成的功能一一把行中的数值放置在列头,但是,这类交叉也有不足之处,例如,我们新增

27、了一笔数据,这笔数据中人员的民族属性是苗族,由于我们在交叉定义中列头没有苗族,所以如果我们想要增加一列,则必须修改原先的查询定义,如果增加的数据非常多,那么我们需要重新修改的列头将会变的纷繁复杂,大大降低了效率,如果能够动态扩展列,不必再去修改原始的查询定义,这样会给我们带来极大的方便。旋转交叉为我们提供了这样的功能。旋转交叉第二类交叉:此类交叉用于显示表中某几个字段(称为交叉值字段)的统计值,并将其分组放臵在查询结果中,一组列在数据表的左侧(称为交叉行字段),一组列(称为交叉列字段)旋转到数据表的上部成为列表头,统计值则放在对应的交叉单元。旋转交叉数据模型图如图所示:BCCcl图三旋转交叉数

28、据模型图两类交叉的最大差别在于:第一类交叉属于查询行为,适用于行列设置都已在表样中固定的报表,其交叉结果严格遵循表样格式,其行列结构不会受查询数据的影响;第二类交叉属于数据加工行为,其交叉后的行列结构在查询出数据之前不可预料,始数据进行动态处理。沿用使用的例子,假定我们进行如下的旋转交叉设置:多用于完全真实地对原图三旋转交叉设置这里交叉砝码的意思是指交叉值列在旋转后的位置。则交叉后的结果如下表所示:0105ERPERPEEFERFEFPERPJKSapERPHF?11aa图三旋转交叉结果在旋转交叉设臵界面上单击行,列,值标签(在图中用蓝色框标示的位臵),可弹出交叉行列复合维度设臵和是否小计的设

29、臵框。图三交叉设置图三交叉复合维度设置图三是否小计设置复合维度:设置复合维度是为了减少冗余数据的出现,举例说明如下图是没有设置复合图三没有设置复合维度维度的交叉结果,我们把交叉行和交叉列中的每一项当作一个数据维度,则该原始表就存在三个维度,分别是部门编码、部门名称和民族,然后我们把处于交叉值的人数列中的数据影”到这个三维的数据空间中。如图三“投图三这样,即使原始表中不存在部门名称为ERP事业部,部门编码为的记录,在交叉过后也会出现多余的一条记录,如表中红框所示,如果在交叉行上设置复合维度,实际上就等于把部门编码和部门名称合起来形成了一个维度,如错误!未找到引用源。ERP事业部ERP产品市场部汉

30、满蒙苗图三设置复合维度后的数据空间ERFSERFERFERFERFERPEPRfttS-HR312307304HRHR5014Saa11SOS图三设置复合维度后的交叉结果交叉值合计:在点击交叉设置中的“值”字样,可以弹出如图交叉值进行合计,如是设置过合计的结果:三的对话框,在这里可以设置是否对图三旋转交叉结果(设置了合计)关于旋转交叉的更细节的内容,请参考附录的交叉表使用样例。4.SQLSQL整理(SQLSQL查询之前,对SQL所作的调整。通常会根据参数的不同,对查询的表、字段或条件等信息进行增补或修改。SQL整理的具体内容由内嵌的代码片段描述代码的录入可通过编码向导协助完成,(这与后面将介绍

31、的数据加工和穿透规则一样)尽管如此,这几种功能仍然推荐由高级实施人员或程序员使用。在SQL整理中把新的查询基本定义设置为整理成果的方法是:图三SQL整理代码在图示的SQL整理代码中,表达了这样一个整理愿望:当参数的取值等于“明细”时,取出所有定义的查询字段表达式,并且去除汇总函数,然后增加一个分录摘要字段,并且设置分组列为空,实际上这里不仅仅能够修改查询字段及其表达式,更可以增加或者删除查询所引用的表,连接条件,排序分组字段,甚至可以手工写一个查询定义,并且把手写的查询定义设置为主查询定义。请注意如果在这里替换了查询定义,则原先在向导中或者在手工SQL设计中的查询定义就不再生效。以下简单介绍几

32、种SQL整理算法的编码向导使用方法:()追加查询表:参数为待追加的表物理名。图三追加表向导追加连接条件:与追加表同时使用,参数为连接模式、追加表物理名和追加的表间连接条件。图三追加连接条件向导)追加查询字段:与追加表同时使用,参数为追加字段的表达式、显示名和别名。图三追加字段向导)按参数追加条件:根据参数取值的不同追加不同的筛选条件,参数为参数名和筛选字段。图三按参数追加条件向导查询结果集():由二维数据集合(数据体)及其列信息(元数据,包括列名、列数据类型等信息)构成的一个数据载体。数据加工():数据加工是指某个(或某几个)结果集在经过一系列加工算法的变换后得到另一个结果集,而后者通常是业务

33、上要求的展现结果。相关的算法又称为加工滤镜,滤镜通常支持输入多个结果集和输出一个结果集,并可以嵌套使用。数据加工与SQL整理的区别在于:前者在SQL查询之后进行,作用的对象是结果集;后者在查询之前进行,作用的对象是SQL定义。在数据加工中把新的数据集设置为加工成果的方法是:在数据加工的编码向导中,提供了多种实用加工滤镜。图示的数据加工代码把“”和“”的两个结果集按照字段为键进行了左外连接,中保留了”、“”、“”三列。分别为并在连接结果图三数据加工代码以下简单介绍几种数据加工算法的编码向导使用方法:()由查询获得结果集:根据查询和参数变量获得查询结果集,这里的参数变量是指需要传给目标查询的参数哈

34、希表,默认可以是当前查询的参数哈希表,见图,不需修改。这里版本号的意思是使用查询引擎的哪种版本,默认是单数据源版本,这样取数据加工数据源实际上就是用户在查询引擎环境变量设置中设置的数据加工默认数据源,也可以选择数据源和数据源,这两种数据源属于查询引擎高级版本应用。图三获得结果集向导)公式设置:参数为公式列名、返回值数据类型和公式,如果公式列名不存在则新增一列,否则将该列的内容更新为公式返回值。一个公式也可以引用另一个公式列的计算结果。图三公式编辑图三公式定义结果集连接:指定两个结果集的连接字段、连接方式和连接后的保留字段,得到连接后的结果集。图三结果集连接向导)结果集联合:指定两个列结构相兼容

35、的结果集,得到联合()后的结果。图三结果集联合向导理论上上结果集加工算法是无穷尽的,并且这些算法可以组合而成为一道或者多道工序,这里仅仅列举几种简单常用的算法,更多更复杂的算法需要读者在实际应用开发中按照不同情况和场景灵活使用。数据穿透:假定报表R1上存在某个区域,内部有若干业务数据,如果以为出发点能够切换到另一张报表R2的上的区域,而且和的内部数据存在着某种内在联系,则称可以从R1穿透到R2。当这种穿透行为传递下去,我们就可以了解某张报表的数据明细,甚至追溯到它的数据来源。通常我们会把上述的区域选为一个表格行或者一个表单元,而上述的内在联系就称为穿透规则。一个查询上可以定义多个穿透规则,每个

36、规则需要指定穿透的目标查询,同时目标查询上要创建一个过滤参数,用于接收穿透区域的取值。如我们现在定义了两个查询:公司部门和部门人员,如图。我们希望在浏览公司部门的时候选中某个部门能穿透到部门人员查询查看这个部门下的所有员工。公司部门的查询列和部门人员的查询参数之间建立一个关联关系。部门编码()列;在部门人员查询里加入一个查询参数部门编码(这首先需要我们在这里我们选择公司部门的,源查询列和目标查询参数名字不一定要相同,但是含义要一致)为过滤条件。下面来看一个简单的穿透用例,假定我们做好了一个查询定义,并在查询定义里引用该参数作是根据公司查询该公司下的用户,另外我们还有一个查询,是查询某公司,现在

37、的我们想要得到这样一种效果,即在浏览公司报表的时候想动态的知道公司下所有用户的信息,户查询去。可以这样定义穿透规则:也就是说根据选中的公司穿透到用图三公司查询图三用户查询的参数定义Cwlhera=图三参数引用图三用户查询的结果定义公司部门的穿透规则,选择查询模型穿透规则图三穿透规则设置点击编辑按钮进入穿透规则代码向导,选择查询间穿透向导,设置如下图三穿透规则代码向导参数提示穿透字段参数值公彳査雪中的字靈目标查询参数名户查询图三穿透规则代码确定取消图三穿透规则定义向导下图显示了一个由人员信息穿透到薪资信息再穿透到同姓员工工资信息,最后穿透到每月明细的用例,其中第一步穿透是单列等值穿透(相当于“人

38、员=李涤非”),第二步是非等值穿透(相当于“姓名李”),第三步是多列联合穿透(相当于“人员=李屏年份=。查询结果预览(共灯行g列)Q001002QG030004Q005,|查询结果预览(共灯行g列)000100Q1001000103G45C63275.100000003275100000003260.100000003275100000009S3.74000000100E.880000001006.500000001009.500000002281.36002263.22002273.60002265.6000图三穿透效果示意随着产品的推广使用,不少程序员和实施人员开始利用查询引擎开发报表并发

39、布为功能节点,从QE报表穿透到业务节点的需求应运而生。很多业务希望根据报表追溯来源数据,比如从报表联查订单,从财务报表联查凭证,从种需求的典型应用。HR报表联查卡片等等,都可以作为这界面关联操作方案为上述需求提供了平台级的技术依据。通过把查询引擎报表作为调用方节点,业务节点作为被调用方节点,扩充穿透规则机制和组织传递参数结构,就能够支持基于功能节点的关联查询。原先已开发好的功能节点只需实现联查接口即可应用此功能。查询引擎版本支持从查询穿透到节点的功能,继续让我们来看前面提到的查询公司下用户的样例。在图三穿透规则设置中增加一个穿透规则:图三穿透到节点规则设置在目标节点参照中,可以选择穿透的目的节

40、点,目的节点是已注册到系统的可执行功能节点,特别的,该节点如果实现了特定的查询接口,则可以根据当前选中行中的某字段的值执行特定的查询功能,对于一般节点,穿透仅仅是打开该节点,与用户双击打开一样。具体操作可参见附录。5.在建立好查询模型之后,系统提供预览查询执行结果的功能。用户首先输入执行查询所需要的参数取值(如果有参数的话),查询引擎会根据该查询对象的数据源去对应的数据库执行查询,在经过查询结果集评估(对于查询记录数过大的情况允许用户优化或放弃查询)把结果集展现给用户。在展现之后,用户可以继续进行穿透、交叉等工作。之后,图三查询预览请注意版本提供了查询优化的设置,例如用户如果执行了一个数据量非

41、常大的查询,这个查询本身耗费了相当长的时间,但是用户只是想浏览一下该报表的大致情况,并不想查看每条数据,我们在首选项定义中可以配置只查询有限行数返回给用户,如下图所示,用户可以选择是否评估结果集,因为评估结果集要执行一条的语句,如果行数过多这条语句可能会耗时非常多,用户可以根据自己的需要选择是否评估,同时可以设置警戒行数,超过警戒行数的查询只显示警戒行数以内的数据。消息中柱查询引擎管理直询引挛环境设置刷新保存F匸査询引擎数据查询设置L湄设萱查询设這物化临吋表刷新设置:提示是否刷新7具J数据游设置注册任务生瓦查询结果集警戒行数:查询浏览是否评估结果集:为不限制行数是否显示格式设计预置对话框图三查

42、询引擎环境设置查询预览界面支持将数据导出为文本文件,并可进而用EXCEL打开。后面会提到,当查询定义与格式定义绑定之后可以从格式界面导出EXCEL,报表独立节点也支持导出EXCEL。随着产品的发展,数据导出的格式会逐步丰富。6.复合查询,顾名思义就是基于已定义的查询继续做查询,从这个角度来说,那些已有查询和数据库里的物理表的地位和角色是一样的。复合查询常应用于这样的场景:报表在列向可以被划分成几个分组,每组由若干个列构成,每个列分组的数据能够通过SQL查询获得,而不同列分组的数据出现在同一行的前提是它们对应于同一个行(该通常是某个字段或某几个字段的组合)。即报表数据可以通过多个查询结果集相互连

43、接的方式获得。复合查询的参数设置能够传递到它所引用的子查询的参数,同参数名的参数将共享传入的参数值。所以,通常复合查询的参数会包含它所引用的所有子查询的参数的并集。查询引擎可以根据预览数据直接到数据库创建物化表,同时将物化表的结构注册到数据字典(物化表会注册到的物化临时表目录下)中,以后的SQL设计就可以基于新创建的物化表进行,从而扩充了查询集成的范围。选择是否在执行时提示同步刷新物化临时表,引用了物化表的查询,用户可以在首选项配置中如果选择了提示刷新,则会按当前的参数设置传递给产生物化表的查询,重新执行得到结果并更新物化表,再在此基础上执行当前查询;如果未选择刷新,则直接基于物化表里的已有数

44、据执行查询。由一个查询生成物化表,该表会创建到查询定义所在的数据源(如果是数据仓库下,可通过切换定义数据源查看当前所在数据源),而不是查询取数数据源(就是选中查询后在右边属性列表里的数据源)。如果是客户化下的查询引擎,这两者是一致的,因为客户化下的查询引擎只支持单数据源,就是当前登录账套所在数据源。图三创建物化表图三在定义查询时引用创建的物化表物化临时表实际上就是一张数据库中的物理表,一旦用户的业务数据发生了改变,那么刷新物化临时表是一件非常耗时的操作,如果用户的查询中使用了过多的物化临时表并且选择了每次刷新,那么效率就会降低,所以请慎重使用这种功能。只有在查询数据并非经常变化,而且查询引用关

45、系比较复杂的情况下物化临时表才能发挥其最大用途。有这样一类固定行列结构表样,在表的不同区域有不同的数据块(这些块之间甚至可能没有什么联系),另外一些区域还放着一些人为性很强的提示性文字(可能根本无法从数据库中查出来),象这样的无规律报表其实是报表开发中很难处理。合并查询方案是对解决这类报表所做的一个尝试,它支持开发者把利用其它方式定义的查询嵌入到表体的某个区域,以把那些无法查出的文字直接录入到需要的位置。合并查询通常适用于以下两类报表:()独立查询数据与独立录入数据相结合的报表;()由共用一组参数的多个查询嵌入构成报表;()其设计效果如下图所示:也可图三合并查询设计示意但总体来说,基于单元取数

46、公式的EXCEL风格报表更适合用IUFO产品进行开发。7.数据权限的行权限一般是通过参照型参数来控制的。当基本档案数据权限开关打开的时候,公司用户在参数设置时点开的参照记录是经过了权限控制的,因此他也就无法查询该登录用户所具有权限之外的数据(比如他可访问的部门集合之外的部门相关数据)。上述策略通常是结合SQL设计中待定筛选条件以及必输标志数据前线控制标志一起使用的。以下内置的系统参量(也可以说是一种无须声明的替换型参数)也常用来控制行权限。这些参量在查询执行时会被自动替换成为相应的环境变量取值。.登录帐套编码-.登录公司主键-.登录用户主键-.登录日期一一数据权限的列权限控制比较复杂,一般可以

47、考虑通过SQL整理或者挂接报表模板的方式来解决。前者把不同登录用户能够查询不同数据列的逻辑写在代码脚本里,配机制来实现不同用户浏览不同列结构报表的效果。后者则通过模板分格式模型(又称界面模型)节点的新建和管理参见第二章。我们可以设计新的界面模型,也可以对已有的界面模型进行修改。模型的设计包括引用查询,界面可视化设计,绑定数据集,数据预处理等部分。框架如下所示:查询弓冃连动规则(主从)数据预处理飄面模型设计态图四圭基于数据集的数据牡理基于表格的数掲处理畀面模型运行浏贤)态图四模型设计态和运行态的基本流程如下图所示(设计态的操作并没有严格意义上的顺序限制)图四界面模型流程1.引用查询是指将界面模型

48、所要展现的查询结果集对应的查询定义引用到模型中来。由于同一查询定义根据不同参数设置也可以得到不同结果集,所以为了区分这种绑定基于同一查询定义的不同结果集时,我们对每一个查询结果集起一个单一的别名来标志。图四查询引用界面对于数据集之间存在的某种一对多的关系,我们还可以根据需要建立主从关系(即主子表)查询引擎支持两个数据集之间按照多列关联建立主从关系。图四主子连接设置界面2.界面模型的格式设计包括了控件拖放,编辑控件属性及数据绑定属性,定义列格式,列表头,行表头等行列格式以及数据预处理等几部分。分别介绍如下。SfltlEftJa3301|(11_第条L静跳到|d?JrtJS-图四仪表图列表,下拉框

49、、文本框,标签,参照等简单控件提供了绑定到多种内容的属性。其中,列表和下拉框可以绑定到查询结果集中某列(导航或枚举),绑定查询结果集对应的参数(即查询参数);文本框可以绑定查询参数和环境变量;参照控件可以绑定查询参数。下面是设置一个文本框绑定到查询参数的截图。图四绑定查询参数的文本框实施在应用的过程中经常会出现这样的问题,已经在查询设计中定义过了某参数,但是在格式设计中对某控件绑定该参数时发现查询参数下拉框中没有该参数,这往往是因为参数类型不匹配导致,或者该控件的绑定类型不对。我们通过下面这张表来列举各种控件的绑定类型,以及当绑定类型选择为查询参数时的情况。文本框查询列,查询参数,环境变量字符

50、型,数值型字符枚举,数值枚举下拉式列表框列表参照文本域导航绑定列,枚举绑定列,查询参数导航绑定列,枚举绑定列,查询参数查询参数查询列,查询参数,环境变量表格四字符枚举,数值枚举字符枚举,数值枚举所有参照类型字符型,数值型字符枚举,数值枚举这里导航绑定列是指将绑定列的数据列举出来,当你点选其中一条数据的时候,据集的表格或者图表也能够跟随你选中的那一条数据把焦点定为到自己的该数据行上。口口口同时绑定该数图四枚举绑定列则将该列的数据枚举出来,点选枚举的值时,会自动过滤表格中的数据。(注意重复的值不会出现两次,是为枚举)然后根据iBEJSBT图四行列格式设计包括列格式定义,列表头定义和行表头定义三部分

51、,分别说明如下。列格式定义图四列格式定义界面我们可以定义四种类型的列格式:字符型,数值型,货币型,百分比型,后三种实际上都属于数值型数据的不同展现。格式定义包括对齐方式,文本颜色,前导符号等等。对于数值型的列格式还可以设置保留小数位数,是否加千分位等格式。这些格式非常容易理解,实施人员可以自行设置,然后在样本数据框中输入样本数据,点击预览观察设置后的效果。列格式的一个比较重要的设置就是设置预警显示,预警显示就是将符合指定条件的数据按指定颜色来显示。如销售额这样的数据通过分段预警就很容易体现出高中低来,方便浏览数据。图中所示预警设置就是将小于的数用蓝色显示,到之间的数用黄色显示,大于的数用红色显

52、示。预警条件中除支持用常量表达式进行比较之外,也支持用含变量的表达式进行比较,其中的变量名必须是表中某列的列名。如表中有,B,C三列,要求某行中列中的值大于B列和C列的值之和时该行列按某种指定颜色显示,我们可以给列绑定列格式,在列格式的预警设置中设置预警条件为的列名,不是列显示名,参见图。注:这里的,B,C都是指图四预警设置界面列表头定义图四表头设计界面有时候为了方便归类和分组列数据,我们需要定义多表头来加强展现。如图,我们可以根据自己的需要定义一个多表头用来展现,表头格式存在数据库中,并有一个表头在这里,可以很方便的组合表中列,定义好的与之对应。通过表头该列表头格式可以被表绑定(绑定了列表头

53、的表效果参见图)。小技巧:定义对应某一查询的列表头展现时,我们可以通过参照,选中该查询来快速引入该查询定义的列,而不用手工录入。这里经常碰到的一个问题是,为什么我们定义了一种列格式,参照不出来这种列格式呢?在表格控件的属性设置中,却这通常是因为设置定义列格式的时候,列格式树中叶子节点的数目必须与表格控件中绑定结果集的列数目一致,否则无法参照出来,这在业务上是合理的,试想要给一个表格控件戴列表头,实际上就是改变原来的列显示方式,但是我们并没有真实的增加或者减少表格中的列,所以,设计的列表头就必须与原来绑定数据集中的列数保持一致。表格列发生错位。行表头定义否则列表头就会与真实的如果设置表的绑定数据

54、集属性到一个定义了第一类交叉现与查询中定义的列和行相对应的列头和行头。图所示。(投影交叉)的查询,那么表中会出默认的列头和行头没有任何附加的格式,如图四绑定到第一类交叉查询定义的表就像可以给列分组定义列表头一样,我们也可以给行分组定义行表头。如图所示,类似于列表头的定义,我们也可以合并行,还可以定义行号显示与否,行号显示的位置,甚至可以为定义好的表头绑定列表头。保存后我们可以看到界面上的表已经显示了新定义的行表头格式。图四行表头设计界面图四定义了行表头格式的表(承图)界面模型中支持两种数据预定义的处理:定义公式列和定义小计合计。其中,公式列定义是基于查询结果集的,定义的公式列对于所有绑定该查询

55、结果集的控件都是可见的。是基于表控件的,定义的小计合计只对该表起作用,不影响其他绑定到相同数据集的控件。公式列点击数据处理菜单下的公式列菜单项,就会弹出如图所示的公式列定义界面。小计合计图四公式列定义界面在查询结果集下拉框中选中要定义公式列的数据集,如果是添加公式列,则数据集中可选的列名会出现在可选列列表中(如果是预定义的公式列,则可选列是数据集的原始列,如果是运行态定义的公式列,可选列还包括已经定义的公式列),双击列项可将该列添加到公式表达式中,公式列中可用函数和操作符也已列出,均是通过双击可以添加到表达式中。添加公式列需要指定公式列名和公式类型,也可以给公式列指定列格式。公式列表达式只支持

56、字符,不支持中文,如果表达式有误,则运行态下公式列内各行的值均为空。如果是删除公式列,列表中列出了当前数据集已定义的公式列,式列类似。选中即可删除。修改公式列界面与添加公小计合计设计界面模型时在表控件的表头上弹出右键菜单,点击小计合计菜单项可弹出设置小计合计的界面,如图。其中,根据表绑定的查询定义的不同,界面会稍有区别,分别说明如下。普通表:1.2.可以设置根据什么列分组,进行小计合计,以及分组列的升降序;可以设置小计合计计算与否,以及小计行和合计行标志展现;这里的展现格式可以自行定义,我们默认使用的格式是图中所示,表小计的级次和同一分组的分组值,计行的展现标志格式;和实际上都是变量,分别代用

57、户也可以不使用这种格式,从而自行定义小计合3.4.可以设置需要小计合计的列,以及统计运算的类型,目前数值型的列支持的运算类型有求和、最大值、最小值、平均值,以及公式;字符型的列支持承前;可以设置统计数据放置在原始数据之前还是放置在后。图四小计合计设置2JU0?1WHZI4呂LlfJtUJ.UTKHJIIW=1j*ZW405EZW4052ffi4-Ce-OGffiWt?000.000.00A145;0002145;0002WJ33:4.CO440220(M-(E-095.00时G,OZffiK-Oe-LDD.DOKD.DO2ffiM-O-lDD.DO0io.mooA釐KSWi-K-16l.OOT

58、.OO1DO21)(M-Ot-201DO2KM-0.003.DO3DQ4-(E-213.DO2ffiH-OLHMD12ffiH-OLHMD12.65.505J5010SW-OL-072004-01-10DLOOD.N22.00L9030石01D.DO30石2OM-OL-5.000.00502EDOi-Oe-M0.0011.00M3KM-0M7023KM-0M72Z.00D.DOS.KKB.OOD.DOD.DO712j0.00D.DOT142D04-OL-31tD.DO0.00334.50425?L6.1*2.23*Wit嗣匕335.V、费用明鲜图四运行效果如上图所示即是经过小计合计运算的最终结

59、果,我们设置了按照公司名称和科目名称进行分组计算小计,这样我们实际上就得到两个级次的小计结果,图中的小计行已经按照预先定义好的展现格式展现出来,计算合计的时候,合计、最大值、最小值、平均值都非常通俗易懂,都是对本列进行计算,需要注意的是公式,这里的公式如果引用到别的列,所引用列当前行的值。例如下面的表格,汉族占比列的合计应该设置为族,公式就会计算,否则就变成了,达不到用户的合计要求。则进行计算的是汉族/汉族+满第一类交叉表(投影交叉表):定义了第一类交叉的查询结果集行列结构是固定的,多用在固定格式的报表中,因此,其小计合计也设计得稍有区别:在这种情况下,小计合计是根据表的行头来进行的,它根据表

60、行头所示的树状结构中树节点的级次来小计合计,所以,对于这类表,我们设置的是小计开始级次和终止级次,而不是分组列。图四图四如上图我们按照树节点的一级来进行小计,则得到的结果如下:人数HRHR图四小计合计设置界面这里的小计是针对一级树节点直属部门,开发部门来进行分组的。同一个树节点下的子节点参与小计运算。第二类交叉表:旋转交叉表因为旋转交叉表的列结构是动态的,也就是说,本来预先设置好的小计统计列,进行旋转交叉之后,那么原来的列被分成了很多新的列,小计合计怎样计算呢?这个问题在得到了解决,用户只要在预定义小计合计的时候选择了该列,那么经过旋转过后的交叉列中,与原先列相关的新列,都会执行原来列上的小计

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论