版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精品文档第17章 在数据库应用系统中,数据查询始终是应用的基础和核心。数据利用和挖掘的常用方式就是从数据库中获取用户所需的业务数据,按照用户预定义的格式,通常以业务报表的形式提供给用户进行浏览、分析、统计、打印及转换,还可作进一步的处理。由于查询需求的多样性,不可能穷举所有的用户查询,当然也不能要求普通用户去直接拼写SQL语句,因此需要提供一个工具让用户可以自己进行查询的设计和定制。17.6查询引擎查询引擎是面向高级实施人员和专业开发人员的查询建模工具,可以全面支持复杂查询的设计和个性化的报表展现。查询引擎由两个功能点组成:查询引擎管理和查询引擎权限控制。17.6.0 查询引擎基本概念及案例1
2、7.6.0.1 基本概念数据表、临时表、报表:数据表是数据库里物理存在的表;报表是符合用户要求的一个界面展现,它通常是一个二维的数据表格;有时我们仅仅通过数据表无法直接查出报表要求的数据结果,这时可能需要通过数据表查询建立一些具有过渡性质的中间表,然后再通过这些中间表查出最终结果,这种起到过渡作用的表称为临时表。数据字典:数据字典提供数据库对象的逻辑属性,有助于提高查询定义的直观性和易用性。内连接与外连接:这是多表查询中的不同连接方式,其中外连接主要包括左连接(left out join)和右连接(right out join)两种。左连接取出左侧关系中所有与右侧关系的任一元组都不匹配的元组,
3、用空值填充所有来自右侧关系的属性,再把产生的元组加到内连接的结果上。右连接与左连接完全对称,“表A左连接表B”与“表B右连接表A”的效果是一样的。以下述的表A和表B为例,它们以字段K作为键值进行不同连接后会得到不同结果集。KV2011000330005500表BKV1011002200330表A内连接(select A.K, A.V1, B.K, B.V2 from A inner join B on A.K=B.K)的结果是:A.KA.V1B.KB.V2011001100033003300左连接(select A.K, A.V1, B.V2 from A left join B on A.K
4、=B.K)的结果是:A.KA.V1B.KB.V20110011000220033003300右连接(select A.K, A.V1, B.V2 from A right join B on A.K=B.K)的结果是:A.KA.V1B.KB.V201100110003300330005500普通查询(简单查询)与复合查询:复合查询和普通查询的关系如图所示。两者的查询结果都可以看成是临时表,其差别在于:普通查询是基于数据表定义查询,复合查询是基于已经定义好的查询来定义查询。参数定义:通常用于查询定义中SQL向导设计工具中的where条件表达式中,存在字符型和数值型(浏览时可直接录入)、字符枚举和
5、数值枚举型参数(浏览时可下拉框录入),参照型参数(浏览时可参照录入)等穿透:当明细表与汇总表一起出现时,某种内在联系可从汇总数据联查明细数据,称穿透或钻取分级汇总:按分级列(具有一定级次的编码规则),对汇总列(数值型)进行各级汇总,并在各级末尾添加分级汇总列。交叉:按一定交叉规则进行旋转交叉或投影交叉1)旋转交叉:行列不固定存在一定交叉规则(指定交叉行、交叉列、交叉值字段)之后,报表全动态地实现数据交叉。常用多层列表头辅助体现交叉的维度,且交叉规则能够在运行态重新设定。适用于无法预先确定交叉后列结构的报表;2)投影类交叉:行列固定;每行、每列均对应一个筛选条件,而单元格第i行第j列的内容根据S
6、QL语句“select 统计函数(字段) from 表 where (行条件i) and (列条件j)”查出,且是个唯一的值交叉砝码:交叉设置界面中的交叉砝码的作用是,描述交叉值字段对应的列出现在交叉列展开后的哪个层次上。退化:在投影交叉查询中的筛选条件中设置为退化的项;用于在运行态(浏览态)进行再次投影交叉时,其结果集中需显示的备用行或备用列。在第一次投影交叉查询结果中,退化项则既不出现在行头上,也不出现在列头上。行间占比:行间占比:指先按分组排序列进行分组排序,然后计算单元格与其所在分组小计值的比,或者为单元格与其所在列总合计值的比列间占比:列间占比:指比例=本列数值/多列总和合并查询:报
7、表部分区域由查询结果填充、部分区域由手工填入,此类报表可通过“合并查询”模式完成。17.6.0.2典型报表案例:报表是由数据和格式组成的整体。报表中的取数规则离不开SELECT查询语句查询模型中的核心功能“SQL向导设计”实际是SELECT查询语句的可视化工具。如汇总表中的SELECT查询语句:SELECT 年度,公司编码,公司名称,科目,sum(借方发生额),sum(贷方发生额) FROM 凭证表INNER JOIN 凭证分录表 ON凭证表. 凭证主键=凭证分录表. 凭证主键INNER JOIN 公司目录表 ON凭证表. 公司编码=凭证分录表. 公司主键INNER JOIN 科目表 ON凭证
8、分录表. 科目主键=科目表. 科目主键WHERE 公司=corpGROUPBY年度,公司编码,公司名称,科目ORDERBY 年度,公司编码,公司名称ASC以下“SQL向导设计”工具(如下图)中:“连接表”页签对应FROM.部分“连接条件”页签对应INNER JOIN .ON部分“连接字段” 页签对应SELECT部分“筛选条件”页签对应WHERE部分“排序字段” 页签对应ORDERBY系统自动对不含聚合函数的字段作GROUPBY处理。(一)汇总表:年度公司编码公司名称科目借方发生额贷方发生额200101A1001100200101A2001100200202B1002200200202B2002
9、200200303C1003700200303C2003700用sql语言表示:SELECT 年度,公司编码,公司名称,科目,sum(借方发生额),sum(贷方发生额) FROM 凭证表,凭证分录表,公司目录表,科目表INNER.ONGROUPBY年度,公司编码,公司名称,科目ORDERBY 年度,公司编码,公司名称(可通过“SQL向导设计”功能完成。)(二)明细表:年度公司编码公司名称凭证号制单日期科目借方发生额贷方发生额200101A12001/9/11001100200101A12001/9/12001100200202B22002/8/11002200200202B22002/8/12
10、002200200303C32003/8/11003300200303C32003/8/12003300200303C42003/10/11003400200303C42003/10/12003400用sql语言表示:SELECT 年度,公司编码,公司名称,科目,借方发生额,贷方发生额 FROM 凭证表,凭证分录表,公司目录表,科目表INNERN.ONORDERBY 年度,公司编码,公司名称(可通过“SQL向导设计”完成。)(三)旋转交叉:如对上述的明细表进行旋转交叉(1)交叉列为1列时交叉行:凭证号、科目交叉列:年度交叉值:借方发生额交叉砝码(借方发生额):在列头的第2层复合维度:为Y时 年
11、度 凭证号、科目200120022003借方发生额借方发生额借方发生额110011002100220031003300120012200232003交叉行:凭证号、科目交叉列:年度交叉值:借方发生额交叉砝码(借方发生额):在列头的第1层年度 凭证号、科目借方发生额借方发生额借方发生额200120022003110011002100220031003300120012200232003(2)交叉列为多列时交叉行:凭证号、科目交叉列:年度、公司名称交叉值:借方发生额、贷方发生额交叉砝码(借方发生额、贷方发生额):在列头的第3层列复合维度:为Y时年度、公司名称 凭证号、科目200120022003A
12、BC借方发生额贷方发生额借方发生额贷方发生额借方发生额贷方发生额1100110012001100210022002200220031003300320033004100340042003400交叉行:凭证号、科目交叉列:年度、公司名称交叉值:借方发生额、贷方发生额交叉砝码(借方发生额、贷方发生额):在列头的第3层列复合维度:为N时年度、 公司名称凭证号、科目200120022003ABCABCABC借方发生额贷方发生额借方发生额贷方发生额借方发生额贷方发生额借方发生额贷方发生额借方发生额贷方发生额借方发生额贷方发生额借方发生额贷方发生额借方发生额贷方发生额借方发生额贷方发生额110011001
13、2001100210022002200220031003300320033004100340042003400(可通过“SQL向导设计”完成。)(四)投影交叉:部门姓名性别财务开发部Sbq男财务开发部sy男供应链开发部ghl女财务开发部fll女 性别部门男女财务开发部21供应链开发部2用SQL语言表示:select count(性别) from 人事视图 where 部门= 财务开发部 and 性别= 男(可通过“SQL向导设计”完成。)(五)穿透:(1)对旋转交叉结果穿透:年度公司编码公司名称凭证号制单日期科目借方发生额贷方发生额200101A12001/9/11001100200101A1
14、2001/9/12001100200202B22002/8/11002200200202B22002/8/12002200200303C32003/8/11003300200303C32003/8/12003300200303C42003/10/11003400200303C42003/10/12003400200403C52004/4/11003500按单列(科目=1003)穿透结果:年度公司编码公司名称凭证号制单日期科目借方发生额贷方发生额200303C32003/8/11003300200303C42003/10/11003400200403C52004/4/11003500按多列(科目
15、=1003和年度=2003)穿透结果:年度公司编码公司名称凭证号制单日期科目借方发生额贷方发生额200303C32003/8/11003300200303C42003/10/11003400(可通过“SQL向导设计”及“穿透规则”中的查询间穿透来共同完成。)(2)对投影交叉结果穿透: 性别部门男女财务开发部21供应链开发部2按单元格穿透:部门姓名性别财务开发部Sbq男财务开发部sy男(可通过“SQL向导设计”及“穿透规则”中的投影交叉穿透功能来共同完成。)(六)行间占比年度公司编码公司名称凭证号制单日期科目借方发生额借方占比200101A12001/9/11001100200101A12001
16、/9/12001100200202B22002/8/11002200200202B22002/8/12002200200303C32003/8/11003300200303C32003/8/12003400如按公司编码对借方发生额进行汇总:年度公司编码公司名称凭证号制单日期科目借方发生额200101A12001/9/11001100200101A12001/9/12001100小计200200202B22002/8/11002200200202B22002/8/12002200小计400200303C32003/8/11003300200303C32003/8/12003400小计700合计1
17、300行间占比结果:年度公司编码公司名称凭证号制单日期科目借方发生额借方占比1(借方发生额/分组小计)借方占比2(借方发生额/合计)200101A12001/9/110011000500769200101A12001/9/120011000500769200202B22002/8/110022000501538200202B22002/8/120022000501538200303C32003/8/110033000428602308200303C32003/8/120034000571403077(可通过“SQL向导设计”及“数据加工”中内置的分组统计、行间占比算法来共同完成。)(七)列向分
18、支统计型corpnamesexA公司韩千穗女A公司智银圣男A公司金晓光女A公司王丽娜女B公司金贤成男B公司姜希灿女通过SELECT corp, (CASE sex WHEN '男' THEN 1 ELSE 0 END) AS male, (CASE sex WHEN '女' THEN 1 ELSE 0 END) AS femaleFROM T将获得如下结果:corpmalefemaleA公司01A公司10A公司01A公司01B公司10B公司01SELECT corp, SUM(CASE sex WHEN '男' THEN 1 ELSE 0 END
19、) AS male, SUM(CASE sex WHEN '女' THEN 1 ELSE 0 END) AS femaleFROM TEM_CASEGROUP BY corp则将查出以下结果:corpmalefemaleA公司13B公司11(可通过“SQL向导设计”功能来完成。)(八)合并查询(半录入半嵌入型)部门汉族满族蒙古族1、直属部门情况财务部<人数><人数><人数>行政部<人数><人数><人数>2、开发部门情况HR产品开发部<人数><人数><人数>HR产品市场部&
20、lt;人数><人数><人数>(可通过“合并查询”功能来完成,上述表格中的部分区域通过手工录入,部分区域通过嵌入查询完成)17.6.1查询引擎管理操作方法在主菜单中单击客户化-自定义查询-查询管理中心的子菜单查询引擎管理,系统将弹出“查询引擎”的浏览窗口。查询引擎管理包括查询/界面对象树管理、查询模型设计、界面模型设计等主要功能。17.6.1.1查询/界面对象树管理图17-6所示的查询引擎主界面左侧为一棵对象树,树上挂有代表查询对象和界面对象的节点,右侧为显示当前选中对象基本属性的属性框。图17-6查询引擎主界面文件夹管理:l 增加/删除/修改:在根节点或目录节点之
21、下可以增加目录,删除目录时会删除目录下的所有对象。目录的可修改属性为目录名称。同一目录下的目录和对象不能重名。l 复制/剪切/粘贴:在查询子树或格式子树下,可以将一个目录及其下属内容从某位置拷贝或移动到另一个位置。对象管理:l 增加/删除/修改:在根节点或目录节点之下可以增加查询对象或者界面对象。前者的属性为编码、名称和数据源,后者的属性为编码和名称,其中编码一经使用,就不再建议作任何修改,因为此编码可能被其它对象引用。l 复制/剪切/粘贴:在查询或格式子树下,可以将一个对象从某位置拷贝或移动到另一个位置。l 导入/导出:选中某个对象,可将其导出为XML文件,该文件可被导入到另外的目录下。此功
22、能可用于对象的跨数据库复制。在导出查询对象或界面对象时,需将其引用的查询对象一并导出才有意义。选中某目录时,导入功能可用。切换定义数据源:(当查询引擎不支持多数据源,只支持单数据源时此功能置灰)查询引擎支持多数据源运作机制模式NC业务在数据源A下运行,查询引擎的定义放在数据源B,通过引擎定义的查询可以到数据源C去执行。图17-7切换定义数据源定义数据源(上面说的B)是指查询引擎自身的系统表所在的数据源,执行切换功能后,主界面上的对象树的内容会作相应改变。图17-8切换定义数据源效果修改执行数据源:当需修改执行数据源时,选择左侧查询设计下的目录,按“辅助设置”>“批量修改执行数据源”,选择
23、数据源下拉框数据进行保存。17.6.1.2查询模型设计查询模型设计包括参数定义、SQL设计(含交叉定义)、SQL整理、数据加工、穿透规则等几部分,其中穿透规则描述的是本查询与外部查询的通信关系,其余部分都用于描述查询内部的属性。查询设计态和运行态的基本流程如下图所示:图17-9查询模型流程(1)参数控制参数是查询模型中代表动态信息的元素。在SQL设计、SQL整理和数据加工中,均可以根据参数的不同,对查询的定义和执行进行调整。如果创建某个参数的作用是根据其取值的不同改变WHERE条件的设置,则这类参数成为过滤型参数,这是最常用的参数功能。参数定义:用于定义本查询内部引用的所有参数,其中参数名要保
24、证互不相同。数据类型包括自由录入、枚举、参照几种,当类型为枚举时,枚举项为用“”分隔的枚举值,或者是一个单字段的查询SQL;当类型为参照时,枚举项为基础参照名,或者是用尖括号括起的自定义参照的类名。图17-10参数定义参数引用:参数可在SQL设计的筛选条件页签引用,也可在SQL整理或数据加工的嵌入代码中利用编码向导引用。图17-11参数引用参数设置:运行态要求用户首先对参数进行设置,这与查询模板的使用类似。当报表引用了多个查询时,参数将通过多页签设置,每个页签代表一个查询。图17-12参数设置(2)SQL设计SQL设计包括向导设计和手工设计两种方式。无论采用哪种,在完成设计时系统均会对SQL进
25、行合法性校验,如未通过校验则不能保存设计。作为向导设计的一个重要组成环节,有必要先介绍一下数据字典。u 数据字典前面已经提到,查询对象的属性中包含数据源信息,在设计查询的时候需要加载相应数据源的数据字典。NC的数据库以DDC作为数据字典,但非NC的数据库则没有DDC。系统会根据执行数据源是NC、IUFO或其它数据库三种情况分别加载不同的数据字典,而且这一机制已经预留了扩展的接口,从而可以面向各种类型的数据库执行取数功能。关于数据字典的生成有多种做法,可以参考DDC的专门文档。查询引擎中用到的数据字典都以一棵对象树的形式存在,树节点包括目录、表、视图、字段、外键等信息,通过双击对象节点可以协助录
26、入SQL语句的成分。u 向导设计向导设计参考典型SQL的构成规则,充分利用数据字典的功能,引导用户一步步完成SQL的设计,因此是推荐使用的方式。它由以下六个环节构成,其中最后一步“交叉属性”超出了SQL的涵义,在后面的章节中进行专门介绍。l 表定义:即SQL语句中的from部分,可以利用数据字典选择库里的数据表,也可以选择查询对象,从而实现查询的集成(基于查询结果定义新的查询)。图17-13表定义图17-14数据表与临时表l 连接定义:即SQL语句中的join部分(表间连接关系),支持单键连接和多键连接两种模式。图17-15连接定义l 字段定义:即SQL语句中的select部分,可以定义任何S
27、QLSERVER语法支持的查询表达式,但要保证字段别名不重复且使用规范名称(以字母开头、由字母、数字、下划线组成的字符串,且不能使用SQL保留字)。如果使用了聚集函数,则由系统自动完成group by部分。图17-16字段定义图17-16表达式生成器l 字段表达式定义:下面作些特殊函数的用法说明。如其它函数:CASE WHEN的用法如某查询定义中,当科目表中的字段“余额方向”为1时,需将查询中的字段“余额方向名称”(如字段别名为name)值显示为”借”,否则为”贷”。则字段表达式为case when bd_accsubj.balanorient=1 then '借' else
28、'贷' end操作方法:双击“其它函数”中的CASE WHEN,则在字段表达式中生成:case when then else end,然后在字段表达式的编辑框中继续手工编辑成完整表达式:case when bd_accsubj.balanorient=1 then '借' else '贷' end,然后按“确定”。图17-17 CASE WHEN的用法1图17-17 CASE WHEN的用法2l 筛选条件定义:即SQL语句中的where部分,可定义确定条件和待定条件,后者可以通过双击右操作数编辑框弹出参数界面并作引用。图17-18筛选条件定义l
29、排序字段定义:即SQL语句中的order by部分。图17-17排序字段定义l 数据交叉属性:交叉是一种常用的多维数据分析手段,详见后文。u 手工设计手工设计是支持自由SQL的方式,由于复杂SQL在解析、适配、执行等方面的不稳定性较大,因此不推荐普通用户使用。手工设计包括:l SQL录入:用户可以在数据字典的辅助下录入SQL语句,要求遵循SQLSERVER语法。图17-20 SQL录入l 字段显示名设置:系统通过对用户录入SQL的解析获得字段信息,并向用户提供输入字段显示名的机会,显示名的默认值与查询字段的物理名相同。图17-21字段显示名设置(3)数据交叉数据交叉包括第一类(投影)交叉和第二
30、类(旋转)交叉两种类型。两类交叉的差别在于:第一类交叉属于查询行为,适用于行列设置都已在表样中固定的报表,其交叉结果严格遵循表样格式,其行列结构不会受查询数据的影响;第二类交叉属于数据加工行为,其交叉后的行列结构在查询出数据之前不可预料,多用于完全真实地对原始数据进行动态处理。u 第一类(投影)交叉假定有一个查询SQL,其查询结果是单行单列的汇总值,另外还有两组WHERE条件的序列,分别为横向序列(WhereX1、WhereX2、WhereXn)和纵向序列(WhereY1、WhereY2、WhereYn),则数据矩阵A(aij)对应的结果集成为投影交叉,aij是WhereXi和WhereYj同
31、时作用在上述SQL上获得的结果。比如,某查询用于查出公司和部门下的人数,原始SQL为:select bd_invbasdoc.invcode , bd_invbasdoc.invname, bd_invcl.invclasscode, bd_invcl.invclassname, ic_general_b.ninnum from ic_general_b left outer join bd_invbasdoc on ic_general_b.cinvbasid = bd_invbasdoc.pk_invbasdoc left outer join bd_invcl on bd_invbasd
32、oc.pk_invcl = bd_invcl.pk_invcl group by bd_invbasdoc.invcode,bd_invbasdoc.invname,bd_invcl.invclasscode,bd_invcl.invclassname查出的结果如下图所示:图17-22原始数据(无交叉)现在把查询字段中只保留实收数ic_general_b.ninnum一项,然后进行如下的投影交叉设置:图17-23投影交叉设置则交叉后的结果如下图所示:图17-24投影交叉结果u 第二类(旋转)交叉旋转交叉用于显示表中某几个字段(称为交叉值字段)的统计值,并将其分组放置在查询结果中,一组列在数据表
33、的左侧(称为交叉行字段),一组列(称为交叉列字段)旋转到数据表的上部成为列表头,统计值则放在对应的交叉单元。关于旋转交叉的更细节的内容,请参考交叉表使用说明。对于投影交叉中的例子,假定进行如下的旋转交叉设置(其中交叉砝码表示交叉值字段的位置,它只能出现在交叉行字段或交叉列字段当中):图17-25旋转交叉设置则交叉后的结果如下图所示:图17-26旋转交叉结果(4)代码嵌入代码嵌入包括SQL整理、数据加工、数据穿透等三种查询对象使用方式。u SQL整理SQL整理是指在SQL查询之前,对SQL所作的调整。通常会根据参数的不同,对查询的表、字段或条件等信息进行增补或修改。SQL整理的具体内容由内嵌的代
34、码片段描述(这与后面将介绍的数据加工和穿透规则一样),代码的录入可通过编码向导协助完成,尽管如此,这几种功能仍然推荐由高级实施人员或程序员使用。图17-27 SQL整理代码在图示的SQL整理代码中,当参数“detail”取值为“Y”时,引擎会在本查询对象已完成的SQL设计基础上多查询一张表(bd_defdoc)和两个字段(档案编码、档案名称),从而获得更明细的查询信息;如果该参数取值不为“Y”,则仍然按照SQL设计的定义去执行查询。以下简单介绍几种SQL整理算法的编码向导使用方法:l 追加查询表:参数为待追加的表物理名。图17-28追加表向导l 追加连接条件:与追加表同时使用,参数为连接模式、
35、追加表物理名和追加的表间连接条件。图17-29追加连接条件向导l 追加查询字段:与追加表同时使用,参数为追加字段的表达式、显示名和别名。图17-30追加字段向导l 按参数追加条件:根据参数取值的不同追加不同的筛选条件,参数为参数名和筛选字段。图17-31按参数追加条件向导u 数据加工数据加工是指某个(或某几个)查询结果集在经过一系列加工算法的变换后得到另一个结果集,而后者通常是业务上要求的展现结果。相关的算法又称为加工滤镜,滤镜通常支持输入多个结果集和输出一个结果集,并可以嵌套使用。数据加工与SQL整理的区别在于:前者在SQL查询之后进行,作用的对象是结果集;后者在查询之前进行,作用的对象是S
36、QL定义。在数据加工的编码向导中,提供了多种实用加工滤镜。图示的数据加工代码把主键分别为“user1”和“user2”的两个结果集按照pk_corp字段为键进行了左外连接,并在连接结果中保留了“user_name1”、“pk_corp”、“user_name2”三列。图17-32数据加工代码以下简单介绍几种数据加工算法的编码向导使用方法:由查询获得结果集:根据查询ID和参数获得查询结果集,如果没有参数或不需要设置参数,则参数变量可取null。图17-33获得结果集向导公式设置:参数为公式列名、返回值数据类型和公式,如果公式列名不存在则新增一列,否则将该列的内容更新为公式返回值。图17-34公式
37、编辑图17-35公式定义结果集连接:指定两个结果集的连接字段、连接方式和连接后的保留字段,得到连接后的结果集。图17-36结果集连接向导结果集联合:指定两个列结构相兼容的结果集,得到联合(union)后的结果。图17-37结果集联合向导u 数据穿透数据穿透:假定报表R1上存在某个区域A1,A1内部有若干业务数据,如果以A1为出发点能够切换到另一张报表R2的上的区域A2,而且A1和A2的内部数据存在着某种内在联系,则称可以从R1穿透到R2。当这种穿透行为传递下去,就可以了解某张报表的数据明细,甚至追溯到它的数据来源。通常会把上述的区域选为一个表格行或者一个表单元,而上述的内在联系就称为穿透规则。
38、一个查询上可以定义多个穿透规则,每个规则需要指定穿透的目标查询,同时目标查询上要创建一个过滤型参数,用于接收穿透区域的取值。下图所示的穿透规则表达了这样的一个穿透意愿:当用户选中了当前查询结果的某行时,允许他按照“psncode”字段在选中行的取值穿透到另一个查询(即目标查询,其ID为“rygzay”),而目标查询的接收参数为“psncode”。一个查询可以设置多条穿透规则,由本查询可穿透到的目标查询需要创建一个(或多个)过滤型参数,用于接收穿透值。下图所示的穿透规则表达了以下的穿透意愿:如果用户选中了当前查询结果的某行时,允许用户根据选中行的psncode字段取值穿透到另一个查询(即目标查询
39、,其ID为“rygzan”),而目标查询的接收参数为psncode图17-38穿透规则定义向导图17-39穿透规则代码下图显示了一个由存货库存存量信息穿透到存货信息再穿透到存货分类信息的用例,其中第一步穿透是非等值穿透(相当于“存货名称like 芯片%“),第二步是等值穿透(相当于“存货分类=产成品”)。按以“芯片“打头的存货名称由库存实收数量统计表穿透到存货信息按存货分类为“产成品“从存货信息表穿透到存货分类信息图17-40穿透效果示意(5)查询浏览u 查询执行与展现在建立好查询模型之后,系统提供预览查询执行结果的功能。用户首先输入执行查询所需要的参数取值(如果有参数的话),查询引擎会根据该
40、查询对象的数据源去对应的数据库执行查询,在经过查询结果集评估(对于查询记录数过大的情况允许用户优化或放弃查询)之后,把结果集展现给用户。在展现之后,用户可以继续进行穿透、交叉和仪表测试等工作。图17-41查询预览u 数据导出导出功能支持将预览数据导出为纯文本文件,并可进而用EXCEL打开。随着产品的发展,数据导出的格式会逐步丰富。u 创建物化表查询引擎可以根据预览数据直接到数据库创建物化表,同时将物化表的结构注册到DDC中,以后的SQL设计就可以基于新创建的物化表进行,从而扩充了查询集成的范围。至于如何保证物化表数据的同步刷新,可以参看抽取任务一节。图17-42创建物化表17.6.1.3格式模
41、型设计界面模型节点的新建和管理参见前面章节。可以设计新的界面模型,也可以对已有的界面模型进行修改。界面模型的设计包括引用查询,界面可视化设计,绑定数据集,数据预处理等部分。界面模型设计态和运行态的基本流程如下图所示(设计态的操作并没有严格意义上的顺序限制):图17-45界面模型流程(1)引用查询引用查询是指将界面模型所要展现的查询结果集对应的查询定义引用到模型中来。由于同一查询定义根据不同参数设置也可以得到不同结果集,所以为了区分这种绑定基于同一查询定义的不同结果集时,对每一个查询结果集起一个单一的别名来标志。图17-46查询引用界面对于查询结果集之间存在的某种一对多的关系,还可以根据需要建立
42、主从关系(即主从表):图17-47主子连接设置界面(2)格式设计界面模型的格式设计包括了控件管理、行列格式设计以及数据预处理等三部分。分别介绍如下。表控件图表图17-48界面模型设计界面u 控件管理界面模型设计工具提供了最常用的控件,如图17-48中控件栏中所示,分别是按钮、复选框、组合框、标签、列表、单选框、多页签、表、文本域、文本框、树、面板、分割栏、主子表和图表,其中最重量级的控件是表和图表,绝大部分的数据集展现工作是这两个控件完成的。初始时,界面上只有一个面板,处于选中状态,布局是默认的BorderLayout。接下来的工作就是要在这个面板上定制界面,这个过程和一般的可视化设计大同小异
43、,在此不再赘述。图17-49界面模型双击界面上的控件就可以打开属性编辑器,可以编辑控件的相关属性。属性编辑器上边是当前界面的控件列表,下面列出了当前选中控件的属性列表。可以从控件列表中选中控件,也可以在界面上双击控件来选中控件进行属性编辑。图17-50属性编辑器所有控件都有背景色,前景色,字体和首选大小等普通属性。其次,控件具有一些自己特有的属性,如面板具有布局属性,分割栏有分栏方向,分栏位置等特有属性。下面介绍一下几个主要的控件。展现数据集的最重要的控件表的几个属性:l 绑定数据集:可以将表绑定到引用查询中的某一个查询定义,那么在运行态下表展现的就是该查询定义对应得到的查询结果集。当设置了表
44、的数据集绑定属性后,该查询定义中定义的列就相应的出现在表里(此时没有数据只有表头);l 列格式绑定:有时候会对表中的数据展现有各种格式上的要求,如预警显示,精度设置,前缀后缀等等。这时可以设置表的列格式属性,在列格式属性里不但可以设置列绑定的列格式,也可以设置列的显示顺序,显示与否等属性(列格式的定义在后面的小节里专门讲述)。图17-51列格式设置l 列表头绑定:当表绑定了数据集之后,可以根据展现需要绑定列表头格式,在表头ID属性里绑定表头的ID之后,从界面上就可以看到表的列表头已经绑定到了表头ID对应的表头格式(列表头格式的设计在后面的小节里会专门讲述);l 行表头绑定:如果表绑定的查询定义
45、里定义了第一类(投影)交叉,则表还可以设置行表头格式。关于行表头的定义和设置在后面小节中讲述。在设置了数据集绑定属性之后,可以设定图表控件的数据绑定属性。在图表控件上弹出右键菜单点击数据绑定菜单项,可弹出数据绑定设置界面如图17-52所示。在这里可以设置图表的类型,以及绑定的系列等属性。图17-52图表数据绑定设置界面文本框,文本域,标签等简单控件提供了绑定到多种内容的属性,它可以绑定查询结果集中某列,绑定查询结果集对应的参数,绑定环境变量等等。下面是设置一个文本框绑定到查询参数的截图。图17-53绑定查询参数的文本框u 行列格式设计行列格式设计包括列格式定义,列表头定义和行表头定义三部分,分
46、别说明如下。l 列格式定义图17-54列格式定义界面可以定义四种类型的列格式:字符型,数值型,货币型,百分比型,后三种实际上都属于数值型数据的不同展现。格式定义包括对齐方式,文本颜色,前导符号等等。对于数值型的列格式还可以设置保留小数位数,是否加千分位等格式。列格式的一个比较重要的设置就是设置预警显示,预警显示就是将符合指定条件的数据按指定颜色来显示。如销售额这样的数据通过分段预警就很容易体现出高中低来,方便浏览数据。图17-55中所示预警设置就是将大于2000的数用红色显示。预警条件中除支持用常量表达式进行比较之外,也支持用含变量的表达式进行比较,其中的变量名必须是表中某列的列名。如表中有A
47、,B,C三列,要求某行中A列中的值大于B列和C列的值之和时该行A列按某种指定颜色显示,可以给A列绑定列格式,在列格式的预警设置中设置预警条件为>B+C(注:这里的A,B,C都是指的列名,不是列显示名)。图17-55预警设置界面l 列表头定义图17-56列表头设计界面有时候为了方便归类和分组列数据,需要定义多表头来加强展现。如图17-56,可以根据自己的需要定义一个多表头用来展现,在这里,可以很方便的组合表中列,定义好的表头格式存在数据库中,并有一个表头ID与之对应。通过表头ID该列表头格式可以被表绑定(绑定了列表头的表效果参见图17-49)。小技巧:定义对应某一查询的列表头展现时,可以通
48、过参照,选中该查询来快速引入该查询定义的列,而不用手工录入。l 行表头定义如果设置表的绑定数据集属性到一个定义了第一类交叉的查询,那么表中会出现与查询中定义的列和行相对应的列头和行头。默认的列头和行头没有任何附加的格式,如图5-57所示。图17-57绑定到第一类交叉查询定义的表就像可以给列分组定义列表头一样,也可以给行分组定义行表头。如图17-58所示,类似于列表头的定义,也可以合并行,还可以定义行号显示与否,行号显示的位置,甚至可以为定义好的表头绑定列表头。保存后可以看到界面上的表已经显示了新定义的行表头格式。图17-58行表头设计界面图17-59定义了行列表头格式的表u 预定义数据处理界面
49、模型中支持两种数据预定义的处理:定义公式列和定义小计合计。其中,公式列定义是基于查询结果集的,定义的公式列对于所有绑定该查询结果集的控件都是可见的。小计合计是基于表控件的,定义的小计合计只对该表起作用,不影响其他绑定到相同数据集的控件。l 公式列l 点击数据处理菜单下的公式列菜单项,就会弹出如图17-60所示的公式列定义界面。图17-60公式列定义界面在查询结果集下拉框中选中要定义公式列的数据集,如果是添加公式列,则数据集中可选的列名会出现在可选列列表中(如果是预定义的公式列,则可选列是数据集的原始列,如果是运行态定义的公式列,可选列还包括已经定义的公式列),双击列项可将该列添加到公式表达式中
50、,公式列中可用函数和操作符也已列出,均是通过双击可以添加到表达式中。添加公式列需要指定公式列名和公式类型,也可以给公式列指定列格式。公式列表达式只支持Ascii字符,不支持中文,如果表达式有误,则运行态下公式列内各行的值均为空。如果是删除公式列,列表中列出了当前数据集已定义的公式列,选中即可删除。修改公式列界面与添加公式列类似。l 小计合计设计界面模型时在表控件的表头上弹出右键菜单,点击小计合计菜单项可弹出设置小计合计的界面,如图17-61。图17-61小计合计设置界面根据表绑定的查询定义的不同,上图中的界面会稍有区别,分别说明如下。普通表:可以设置根据什么列分组,进行小计合计,以及分组列的升降序;可以设置小计合计计算与否,以及小计行和合计行标志展现;可以设置需要小计合计的列,以及统计运算的类型,目前支持的运算类型有求和、最大值和最小值;可以设置统计数据放置在原始数据之前还是放置在后。第一类交叉表(投影交叉表):定
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 演出道具定制采购合同
- 屋面瓦采购合同书
- 合同权益转让的合同终止
- 建筑抹灰作业分包合同
- 2024员工离职解除劳动合同协议书
- 女性出差安全培训
- 日用化学产品的消费者行为分析考核试卷
- 房屋质量鉴定合同模板
- 断桥铝型材采购合同范例
- 狗狗领养 赠送合同范例
- 农业技术员职称考试题库与答案
- 《破茧》读书笔记PPT模板思维导图下载
- 颗粒剂工艺验证风险评估报告
- 上田敏运动功能评价法详解
- 幼儿园自闭症儿童的干预策略 论文
- 工装模具停用(报废)管理规定
- (51)-雕刻上颌第一磨牙
- 滚动计划法课件完整版
- 《在岁月中远行》读书笔记思维导图PPT模板下载
- 国电南自ps6000监控技术说明书
- 中国四大民间故事(完整版)资料
评论
0/150
提交评论