ePRAS公式系统的编写.doc_第1页
ePRAS公式系统的编写.doc_第2页
ePRAS公式系统的编写.doc_第3页
ePRAS公式系统的编写.doc_第4页
ePRAS公式系统的编写.doc_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

1 目 录 1.前言前言.4 2.基本知识基本知识.5 2.1统计调查项目.5 2.2项目定义阶段.6 2.2.1报告期6 2.2.2专业7 2.2.3调查对象分类7 2.2.4统计标准7 2.2.5调查报表8 2.2.6综合报表9 2.2.7审核关系9 2.2.8汇总关系9 2.3数据处理阶段.11 2.4数据服务阶段.11 3.epras 公式基本概念公式基本概念 12 3.1epras 公式12 3.2数据审核.12 3.3数据汇总.13 3.4报表数据处理方式.14 4.epras 公式编写说明公式编写说明 15 4.1公式结构.15 4.1.1一般结构15 4.1.2汇总语句块15 4.1.3审核语句块15 4.1.4语句类型16 4.1.5报表数据的引用16 4.2声明语句.18 4.2.1报表声明语句18 4.2.2变量声明语句19 4.2.3汇总目标声明语句20 4.2.4unt和sumunt表.21 4.2.5变量的作用域21 4.2.6变长表22 4.3一般语句.23 4.3.1赋值语句23 4.3.2if语句.23 4.3.3for语句23 4.3.4foreach语句.24 4.3.5while语句24 4.3.6switch语句.24 2 4.3.7break语句25 4.3.8continue 语句25 4.3.9return语句.25 4.4统计循环控制语句.25 4.4.1打开报表语句26 4.4.2设置控制参数27 4.4.3总体条件声明语句27 4.4.4参加处理的单位范围27 4.5统计处理语句.28 4.5.1审核语句28 4.5.2分组定义语句28 4.5.3汇后处理语句28 4.5.4汇总语句29 4.6系统函数.29 4.6.1字符串函数29 4.6.2其它函数32 5.epras 公式词法定义公式词法定义 39 5.1基本概念.39 5.2词法定义.39 5.2.1标识符39 5.2.2数字常量40 5.2.3字符串常量40 5.2.4关键字40 5.2.5操作符41 5.2.6特殊操作符44 6.epras 公式语法定义公式语法定义 45 6.1.1数据类型45 6.1.2基本语法45 6.1.3公式语法定义49 6.1.4自定义函数50 6.1.5审核语句块50 6.1.6汇总语句块50 6.1.7通用公式51 6.1.8系统函数语法51 7.公式公式范例范例.52 7.1样表定义.52 7.2审核公式.53 7.3计算公式.55 7.4汇总公式.56 8.公式编写中需要注意的几个问题公式编写中需要注意的几个问题.64 8.1报表没有数据.64 3 8.2汇后计算时没有汇总数据.65 8.3清除汇总表数据.65 8.4没有设置主表.66 8.5length 函数的不同功能67 8.6改变变长表的行数.67 8.7修改报表和生成报表.68 4 1.1. 前言前言 epras 后台公式系统的目的是根据业务应用的要求,对调查中得到的数据进行处理, 主要的处理方式是审核、汇总和计算。由于统计业务的复杂性,我们不可能预先设想到所 有的审核、汇总方式,它们都是根据业务要求的变化而变化的,因此为尽可能多的满足业 务的要求,后台公式系统以一种基本通用的可扩充的方式出现。 此外由于统计调查的目的的不同,统计调查业务的范围会有大有小,涉及到的调查对 象、调查指标也会不尽相同,体现在数据上,就放映了数据量的大小会发生巨大的变化。 因此在公式系统统计功能的处理上,我们需要兼顾业务能力和执行效率。 在实际的业务处理过程中,公式的编写最终是由业务人员进行的,考虑到各地业务人 员的计算机技术水平和业务理解能力,我们需要设计出一套易于理解的公式语法,以方便 业务人员的学习、应用。 本说明书主要描述了 epras 公式系统的基础业务模型、epras 公式的基本概念、词法 语法结构等方面的内容,并给出了一些公式的实例,以便于有关人员学习、理解、编写和 使用 epras 公式。 5 2.2. 基本知识基本知识 epras 公式系统是基于我们对经济普查统计业务的理解进行设计的,对统计业务的理 解整体上被简化成一个业务数据模型。同时公式系统不是一个独立的系统,而是和统计业 务的其它环节紧密结合的系统。从业务模型、数据表示、数据处理过程等方便都和统计业 务的其它处理功能紧密结合在一起,成为不可分割的一个整体。 这里我们描述的就是我们对统计业务的简化模型和数据关系模型,以及它们在公式中 的反映。我们的统计业务模型是从统计调查项目开始的,一个统计调查项目包含一个统计 调查业务中涉及的所有相关业务数据。 2.12.1 统计调查项目统计调查项目 一个统计调查项目指的是为某个统计目的而进行的统计调查工作。在实际的工作中, 相对应的工作被称为统计调查任务,其一般的处理过程如下图所示: 图 2-1-1 从总体上来说,一个统计调查任务的处理包括三个阶段:规划设计阶段、实施阶段和 应用阶段。在规划设计阶段,需要制定调查方案、确定调查对象范围、统计标准、设计调 查指标(调查表)和汇总指标(汇总表)等;在实施阶段,需要发放调查表、采集调查数 据、审核调查结果、产生汇总指标以及其它数据处理工作,尤其需要指出的是,实施阶段 可能包括多次的数据采集、审核、汇总的过程(如年报、月报);在应用阶段,主要是提 供对调查数据的分析、查询等服务功能。 规划、设计阶段: 1、确定调查对象 2、确定统计标准 3、确定调查指标 4、确定汇总指标 5、其它相关工作 实施阶段:(可能多次) 1、采集调查数据 2、审核调查数据 3、汇总调查数据 4、其它数据处理工作 应用阶段: 1、数据分析 2、数据查询 3、数据服务 5、其它应用 统计调查基本处理过程 6 上述实际的统计任务处理过程反映在软件的处理上,就成为:项目定义、数据处理和 数据服务三个不同的软件处理阶段。 2.22.2 项目定义阶段项目定义阶段 项目定义阶段的任务是定义和本项目有关的调查对象、统计标准、调查指标、统计指 标、审核关系、汇总关系等。总而言之,项目定义的过程规定了一个统计调查项目中的主 要静态(数据)方面的内容,对后面的数据处理工作进行规范和约束。 项目定义的大致过程如下图所示: 图 2-2-1 在软件的处理上,项目定义阶段主要来定义项目中的静态信息:(1)管理定义:报告 期、专业、调查对象分类;(2)统计标准:分类目录、综合单位、统计分组、指标集; (3)报表定义:基层表、综合表;(4)数据处理关系定义:审核关系、汇总关系; 这些定义信息可以被数据处理软件加载作为数据处理系统运行的基本依据。 2.2.12.2.1 报告期报告期 定义项目基本信息: 1、报告期 2、专业 3、调查对象分类 定义统计标准: 1、分类目录 2、综合单位目录 定义统计分组: 1、统计分组 定义统计指标: 1、统计指标目录 定义调查表: 1、指标定义 2、表样定义 3、录入关系定义 4、复录方式定义 定义管理关系: 1、专业调查表 定义综合表: 1、综合表结构 2、数据汇总关系 3、综合表表式 定义审核关系: 1、基层表审核 2、综合表审核 3、边录边审 7 在一个统计项目中可以多次采集调查对象的数据,每次采集的数据的总体称为一个报 告期。在一个统计调查项目中,报告期用来区分各次采集的数据。一般来说,数据处理的 工作是针对一个报告期进行的,多报告期之间不存在数据之间的处理关系(除了在报表自 身上有反映的之外)。 在软件的处理上,报告期的定义在数据处理工作开始之前完成。每个报告期的代码、 名称等必须全部预先定义完毕。 2.2.22.2.2 专业专业 专业表示了一个统计调查任务中涉及到的几个独立的处理部分。将一个统计调查项目 分成几个独立的调查部分进行,数据处理也在专业的限制下独立执行,就相当于将一个项 目分成几个独立的子项目来进行。 当然在调查表、指标、统计标准等方面,各专业之间共享项目的基本定义和设置。每 个专业使用若干张调查表(可以和其它专业相同)。在进行数据处理时,可以按专业进行 数据处理(指定处理哪个专业),也可以按报表进行数据处理(不指定专业)。 2.2.32.2.3 调查对象分类调查对象分类 根据每个被调查对象的性质可以将他们分成若干类,每一类都相同的性质和属性(基 本情况),比较典型的如:法人调查对象(都是法人)、产业活动单位调查对象。调查对 象分类之间可以有一定的关系,如一个法人调查对象可以拥有若干个产业活动单位调查对 象。 在软件处理上,一张调查表只能有同一类调查对象来填写。 在有些涉及不同调查对象的数据处理上,目前可以支持调查对象之间的 1:n 关系即父 子关系(如法人单位-产业活动单位)。 2.2.42.2.4 统计标准统计标准 统计标准指的是在统计上采用的分类、目录,这些分类、目录可以是标准的,也可以 是为本次调查专门制定的。在定义统计标准的同时,也包括综合单位目录的制定,这是一 个特殊的目录,用于调查项目的数据汇总和组织。 在软件的处理上,一个分类目录的结构组成是动态可变化的,就是说,每个分类目录 8 可以定制自己的信息项。当然至少包括:目录项代码、名称这两项。 epras 支持两种形式的目录:(1)平面目录;(2)树形目录; 平面目录中的所有目录项都是独立的,彼此之间是同等关系。树形目录的目录项之间 通过代码或上级代码形成多级的树形关系,平面目录是树形目录的特例。 平面目录和树形目录的目录项都通过一个代码来唯一标识,这个代码可以是分段方式 的,也可以是独立方式编码的,前者通过代码段来确定彼此之间的关系(如:52(贵州), 5224(毕节地区),522401(毕节市),后者通过指定其级别和上级目录项来建立相互 之间的关系。 综合单位目录代码必须采用分段方式编码。 2.2.52.2.5 调查报表调查报表 调查报表是数据的载体。在我们的业务数据模型中,每张报表都有一系列的指标项组 成,一个指标项都是具有特定的定义信息(标识、名称、性质等),它可以是一个简单数 据项(如名称、地址、行业等),也可以是由一组相互关联的数据项(如财务、生产数据 等)组成的组合指标项(如图 2-2-5-1),组合指标项的一般表现形式是二维表(定长二 维表、不定长二维表)。 图 2-2-5-1 上图的调查中,报表中含有四个指标项:“地址”、“所属行业”、“生产情况”、 “企业等级”。其中“地址”、“所属行业”、“企业等级”是简单指标项,“生产情况” 是组合指标项(由三行三列共 9 个数据项组成)。 在调查表(又称为基层表)中,组合指标项的定义通常包括两个部分:指标数据项列 表(宾栏)、分组列表(主栏)。在上图的组合指标项“生产情况”的定义中,指标数据 所属行业: 地 址: 项目产量产值库存 煤 钢 汽油 生产情况: 企业等级: 指标数据项 指标分组 9 项列表包括:“产量”、“产值”、“库存”三个数据项;指标分组列表包括:“煤”、 “钢”、“汽油”。 指标数据项是具有数据属性,如数值、字符串。每个指标数据项、分组项都有编码、 名称和序号。 2.2.62.2.6 综合报表综合报表 和基层调查表不同的是,综合报表都是有一个组合指标项构成的。综合表有两种形式, 一是定长二维表(行数和列数是固定的),另一种是不定长二维表(列数是固定的,行数 是不固定的)。epras 系统在综合表的定义上允许使用分类目录来定义主栏分组,真正的 主栏根据定义自动展开,如: 一个主栏行定义为:%catetory,industry,2% 其含义是主栏按行业大类分组。 2.2.72.2.7 审核关系审核关系 审核关系表示的是一个调查对象在填写调查表时,为保证填写正确所要满足的填写数 据关系。这些数据之间的关系在 epras 软件的处理上即成为数据审核关系。 从审核关系的处理上,我们可以采用的方式有:人工检查、录入时的控制、边录边审、 后台审核等处理操作。 本处我们讲述的是采用后台公式来检查的审核关系(一般是批量检查)。 基本我们的业务数据模型,所有的审核关系可以分为两类:(1)调查对象自己的数据 关系(表内、表间);(2)调查对象间的数据审核关系(复杂的表间关系)。 2.2.82.2.8 汇总关系汇总关系 汇总关系指的是如何生成汇总表数据的过程。汇总关系以公式的形式出现,并且出现 的形式和过程可以不一致。在本系统公式的设计中,目前支持叠加、分组、灵活等多种形 式的汇总方式。 (1 1)叠加汇总)叠加汇总 叠加汇总指的是将各单位同一张报表的数据直接相加产生最后的汇总表数据的方式。 叠加汇总产生的对象和参加汇总的基层报表有同样的结构形式。 10 (2 2)分组汇总)分组汇总 分组汇总方式是将各个单位按照一定的分组规则进行分组,然后将各组的数据进行叠 加汇总,从而产生汇总表的过程。分组一般是按照单位的某个属性特性来进行的,可以对 多个不同的分组方式进行组合,产生多层分组。 分组可以在宾栏出现,也可以在主栏出现。在每个分组下都是执行对同一组指标数据 项的叠加运算。上图中的主栏和宾栏的分组之间是分层的关系,实际的分组汇总关系中还 包括并列的分组方式。此外需要注意的是,分组之间允许重叠,就是说,一个单位可以满 足多个分组条件,它的指标数据可以被叠加到多个分组中。 epras 公式中将指标放在主栏上,这一点和日常的形式不同,使用中需要进行主宾栏 转换处理(尤其需要注意)。 在上图中,可以看到每个组中的指标集是相同的。 (3 3)灵活汇总)灵活汇总 灵活汇总关系对基层数据没有作出特别的约束,但是要求汇总指标项的来源是始终如 rc11rc12rc13rc14rc15 rc21rc22rc23rc24rc25 rc31rc32rc33rc34rc35 rc41rc42rc43rc44rc45 rc11rc12rc13rc14rc15 rc21rc22rc23rc24rc25 rc31rc32rc33rc34rc35 rc41rc42rc43rc44rc45 基层表 汇总表 g1-1g1-2 g2-1g2-2g2-1g2-2 g3-1g3-2g3-1g3-2g3-1g3-2g3-1g3-2 g4-1 指标 1 指标 2 指标 3 data g4-2 指标 1 指标 2 指标 3 11 一的,就是说,一个汇总数据项总是特定的基层数据项运算的结果。对于如何将基层数据 运算到汇总数据项上,我们可以设置多种条件,其原理如下图: 对汇总表中每一个单元格内数据的产生,都需要判断条件:t_cn、t_rm 和 tk,然后将 表达式 expr 的值叠加得到最终的汇总表数据的值。除此之外,能够参加汇总的单位还必须 满足条件总的条件 t。 2.32.3 数据处理阶段数据处理阶段 数据处理阶段的任务是采集基层数据、检查填报数据的正确性、汇总数据。以电子形 式存储调查得到的基层数据和汇总数据,保证数据的质量,提供基本的数据处理的手段是 本阶段的主要任务。 在软件的处理上,本阶段主要包括数据录入、审核、汇总、数据上报/接收、数据管理 等软件的处理方式。 其中数据审核、汇总都是通过后台公式的方式实现的。 2.42.4 数据服务阶段数据服务阶段 数据服务阶段的主要任务是将处理后的数据对外提供数据服务,如查询、应用、分析 等。数据服务不是 epras 系统的主要设计目标。 tt_c1t_c2t_c3t_c4t_c5t_c6 t_r1 t_r2 t_r3tk:exprtk:expr t_r4 12 3.3. eprasepras 公式基本概念公式基本概念 3.13.1 eprasepras 公式公式 epras 公式是按照特定的语法规则编写的一段代码。这些代码按照其特定的含义被执 行,从而得到结果。epras 公式通过特定的公式语法形式和实现方式实现了前面所描述的 数据审核、汇总、计算的功能。 在 epras 公式的语法中,除了一般的计算、判断语句外,还包括了特定的审核、汇总 数据的语句,这些语句以一种特定的方式反应了前面描述的数据处理的各种方式。 3.23.2 数据审核数据审核 在 epras 公式中,数据审核针对调查对象(单位)进行,数据以报表的形式作为载体 为访问。在进行数据审核时,需要确认下列方面的内容: (1 1)单位范围(参审单位)单位范围(参审单位) 单位范围表示的是对哪些单位的数据进行审核,公式中对单位范围有影响的语句 有三种:一是直接的单位范围描述;二是单位应满足的条件,三是主表的选择。 单位范围(unitscope):直接指定单位范围实际上是指定综合单位范围,属 于这些综合单位的基层单位或综合单位都处于需要处理的范围之内。 条件约束(filter):条件选择指的是所选择单位的数据应满足的基本条件, 只有满足这些条件的单位才被处理。 主表(选项:inner):只有填报了这些主表的单位才被处理。 一般来说,被处理的单位需要同时满足上述要求。参加审核的单位选择示例如下 图: 全部单位 主表 单位范围符合条件的单位补空的数据表 13 (2 2)报表)报表 指定参与审核的报表实际上是指定参与审核的数据。和实际的数据审核方式对应, 报表作为一个数据集合的整体被一次性取出处理。一次读取一个单位的数据。 (3 3)审核内容)审核内容 审核内容是需要进行核对、比较的数据关系。所有未能满足要求的数据关系的单 位的信息都会被记录下来重新检查和复核。 (4 4)计算处理)计算处理 在很多情况下,数据审核时需要进行数据的计算处理,如计量单位变换、自动平 衡计算等。这些数据上的计算处理功能也是审核处理中必须的。 3.33.3 数据汇总数据汇总 在前面的基本知识介绍中,我们提到了三种汇总方式(关系)。在实际的汇总公式的 编写中,除了汇总的算法,还要对汇总的其它方面进行处理,主要是对那些数据进行汇总 (参汇单位)、汇总到哪个综合单位(目的)、需要哪些数据(报表)、汇总算法等。 (1 1)参汇单位选择)参汇单位选择 参汇单位范围选择的方式和审核公式基本相同,公式中对单位范围有影响的语句 有三种:一是直接的单位范围描述;二是单位应满足的条件,三是主表的选择。 单位范围(unitscope):直接指定单位范围实际上是指定综合单位范围,属 于这些综合单位的基层单位或综合单位都处于需要处理的范围之内。缺省时 汇总全部单位。 条件约束(filter):条件选择指的是所选择单位的数据应满足的基本条件, 只有满足这些条件的单位才被处理。 主表(选项:inner):只有填报了这些主表的单位才被处理。 14 一般来说,被处理的基层单位需要同时满足上述要求。 (2 2)汇总范围)汇总范围 汇总范围指的是对哪些综合单位进行汇总,因此汇总单位的范围选择和单位范围 的选择是一致的,只是缺省时对全部数据进行汇总。 通过汇总单位级别(%hzlevel)的声明指定汇总单位的级别。 (3 3)参汇报表)参汇报表 参汇报表指定了哪些数据参加汇总。参汇报表数据的读取方式和审核公式相同, 也是一次读取一个单位的报表数据。 (4 4)汇总算法)汇总算法 从原理上来说,目前 epras 公式系统支持各种方式的汇总方式,包括叠加、分组、 灵活以及其它的汇总、聚合计算方式。特别地,公式系统为分组汇总、灵活汇总分别 提供了特定的语法支持。 有关分组汇总的详细知识可以参考 sarp 的说明书。这里需要说明的是,各个分组 之间可以通过运算关系形成新的分组,有两种运算关系:并列运算和分层。前者将两 个分组(假设分别有 m 和 n 和组)并列起来形成一个 m+n 的新分组,后者以分层的关 系形成一个 m*n 的新分组。 3.43.4 报表数据处理方式报表数据处理方式 epras 在进行审核和汇总处理时,都是每次读取一个单位的报表数据(或通过特 定方式表述的和该单位相关联的其它单位的报表数据),即每次计算处理时,我们看 到的都是一个单位的数据,然后进行规定的计算处理,如此循环直到范围内的所有单 位被处理完为止。 这种数据读取方式,在编写公式时尤其需要注意。 15 4.4. eprasepras 公式编写说明公式编写说明 4.14.1 公式结构公式结构 4.1.14.1.1 一般结构一般结构 前面已经提到,epras 系统的公式主要执行针对报表数据的审核、汇总和计算功能。 从结构上来说,公式的书写形式如下: 说明语句部分定义公式中用到的全局变量。一般语句是通用形式的执行语句,如赋值 语句、循环语句、条件语句等。 其中统计语句块有两种,分别是汇总语句和审核语句。 4.1.24.1.2 汇总语句块汇总语句块 汇总统计语句的形式如下: 汇总语句中可以含有和汇总相关的定义信息和特殊执行语句。 4.1.34.1.3 审核语句块审核语句块 审核语句的形式如下: function func(param-1,) 一般语句组 end main() (变量声明语句)* (一般语句|统计语句块)* end dosummary 报表声明语句* to: 变量声明语句* 汇总表声明语句* begin 汇前处理语句 汇总语句 finally 汇后处理语句 end 16 审核语句中可以包含和审核相关的特殊语句。 此外,汇总语句和审核语句中的循环控制定义部分和统计语句的执行控制有关,主要 是对统计语句统计的范围的控制。 汇总统计语句、审核业务语句可以嵌套。 4.1.44.1.4 语句类型语句类型 从具体的语句来划分,整个 epras 系统的公式由下列结构语句和语句元素组成: (1)一般语句:主要是指说明语句、赋值语句。 (2)控制语句:主要是指循环、条件等控制语句。 (3)统计循环控制语句:确定统计对象范围的定义语句(一般不需要直接写)。 (4)报表声明语句:声明公式中使用的报表极其相互关系。 (5)统计处理语句:主要是指和执行汇总、审核相关的语句。 (6)函数:系统内嵌的函数和自定义的函数。 4.1.54.1.5 报表数据的引用报表数据的引用 前面已经说过,数据报表有数据项有序组成。数据项有两种类型:简单数据项和组合 数据项;其中简单数据项可以是数字或字符类型,只能取一个值;组合数据项是对简单数 据项的二维组合,又分为两种:定长二维表、不定长二维表。在公式中,一般我们需要访 问统计报表中的具体数据,这时可以使用两种访问表示方式:下标表示法和标识表示法。 4.1.5.14.1.5.1 下标表示法下标表示法 下标表示法是根据数据表的内部形式(单记录、交叉表、多记录表)采用一维和二维 的表示方法。具体的方法如下: 表示形式一般数据项组合数据项 ak 访问数据表的第 k 个数据项的值。为其第一个简单类型的值。 akm,n 访问组合数据项,m0,n0; 第 m 行、第 n 列的数据值。 docheck 报表声明语句* 循环控制语句* begin (审核语句 | 计算语句 | 一般语句)* end 17 am,n 当一张报表只有一个组合数据项 时,使用此方式,m0,n0;表示 第 m 行、第 n 列的数据值。 aik aikm,n 当该报表本身有多张,是一个数 组时,特别是在父子关系下的子 表。 其中:k = 数据项序号;m = 行下标;n = 列下标;i=子表序号 注意当一个数据项为空时,自动取缺省值(数字型为 0,字符型为“”)。 4.1.5.24.1.5.2 标识表示法标识表示法 标识表示法使用各个数据项的标识来表示某个数据项。其基本表示方式和下标表示法 相同,只是用标识码字符串代替下标,可以和下表混合使用。 表示方法如下: 表示形式一般数据项组合数据项 a“id” id=数据项标识不允许 a“id”“rid”,”cid” (rid,cid)=(行代码,列代码) a“rid”,”cid” 当表中只有一个组合数据 项时。 (rid,cid)=(行代码,列代码) 复合表示法 ak“rid”,”cid” (rid,cid)=(行代码,列代码) a“id”m,n (m,n)=(行号,列号) 4.1.5.34.1.5.3 数据项集合的表示法数据项集合的表示法( (暂时未实现暂时未实现) ) 数据项集合的表示只可以使用下标表示法。如下表所示: 表示形式一般数据项组合数据项 am1:m2 am1: :m2,n am,n1:n2 am1:m2,n1:n2 对于只有一个二维组合指标 项的报表 akm1: :m2,n 允许 akm,n1:n2 允许 akm1:m2,n1:n2 允许 akm1:m2 允许 a“id” m1: :m2,n a“id” m,n1:n2 a“id” m1:m2,n1:n2 a“id” m1:m2 id 是指标代码 其中: m1 = 起始行下标;m2 = 终止行下标; n1 = 起始列下标;n2 = 终止列下标; 需要指出的是,数据项集合是有顺序的。 18 4.24.2 声明语句声明语句 4.2.14.2.1 报表声明语句报表声明语句 报表声明语句只能在审核和汇总语言块中使用,用于声明统计处理过程中使用的基层 报表和综合表。报表声明语句一般有三种形式,分别是: var iden = report rep_id update inner where cond ; var iden = report rep_id level n update outer ; var iden = report rep_id relation cond; 其中(1)iden 表示报表变量名; (2)rep_id 表示表标识代码(如“j601“); (3)level n 表示综合表的单位级别; 当指定 level 时,指的是相对于当前基层 单位的上级单位(由 n 决定其级别,0=子对象:unt1=*this-6; 19 表示打开和父调查对象相关的所有子调查对象的相关报表,是一种一对多的 关系,如 var t601 = report “j601” inner; var t602 = report “j602” relation unt1 =* this-6; 打开的是对应该法人的所有产业活动单位的 602 表(可能对应多张)。 (ii)子对象-父对象:unt6 =? this-1; 表示打开和子调查对象相关的父调查对象的相关报表。 如 var t602 = report “j602” inner; var t601 = report “j601” relation unt6=?this-1; 表示打开 j602 表的所属发热单位 uuid 相同的一张 601 表(最多对应一张)。 4.2.24.2.2 变量声明语句变量声明语句 4.2.2.14.2.2.1 变量定义变量定义 epras 系统支持两种变量声明,一种是简单变量,另一种是数组变量。 变量声明语句的一般形式是: var variable = null | arraym,n ; 如:定义一个简单变量(整数类型): var total = 10; 定义一个简单变量(小数类型): var total = 10.00; 定义一个数组变量: var names = array30,20; 还可以定义一种灵活类型的变量,这种变量在使用时才确定其类型: 如:var tt = null; 使用时,可以 tt=array10,20 或 tt=10; 注意:灵活变量一旦使用过,它的类型就是确定的不能再变化了。 注意:这里尤其要注意区分整数和小数类型,它们在精度的处理上是不一致的。这里尤其要注意区分整数和小数类型,它们在精度的处理上是不一致的。 4.2.2.24.2.2.2 变量的初始化变量的初始化 变量可以通过声明语句直接初始化,也可以通过专门的初始化语句。 一般简单变量可以直接初始化。 如:var myvar = 10; (整数变量) var myvar2 = 10.0; (小数变量,一位小数) 20 需要注意的是,上述的两种写法对于变量的定义有影响,前者是整数,后者是小数(小 数位数由小数点后面的位数决定)。简单变量初始化为整数和小数对以后的计算是有影响的, 特别是在进行比较时,整数的比较相对而言准确、快速,而判断两个小数(实际上是浮点 数)是否相等就比较不能获得准确结果。对计算结果也有影响时,如 myvar = 10.25+10; 结果是 20(整数)。 数组变量可以通过专门的操作符进行初始化。 如:初始化一个字符串数组。 (1)var msg = null; msg ?= “aaa”,”bbb”,”ccc”; 等同于 if( isnull(msg) then msg = array(3); msg1 = “aaa”;msg2=”bbb”; msg3=”ccc”; endif (2)var msg2 = “aaa”,”bbb”,”ccc” ; 操作符 ?= 表示只有当变量为空时,才赋值。 4.2.2.34.2.2.3 系统保留变量系统保留变量 系统保留了一些变量,他们有特殊的含义和用途,这些变量是: %unitscope:基层单位范围(三种形式:”uuid”,“sid1”,”sid2”,:) %unittable:填报目录中的调查对象类型。 %unitlevel:被处理对象级别( 0-8 表示综合单位,-1 表示基层单位, 9 表示综合单位不分级别(保留) %auditlevel:审核类别(0=表示全部审核,1=表示必要审核,2=表示确认审核) %hzlevel:汇总单位级别(=0-8 ) %diff:审核时的允许误差值(在特定的审核关系中使用)。 所有系统保留变量,都以%符号开头,一般不要在公式中使用,它们由公式执行者提供 这些参数,以控制公式的执行。 4.2.34.2.3 汇总目标声明语句汇总目标声明语句 21 汇总目标报表声明语句只能在汇总语言块的 to:后使用,用于声明汇总的目标综合表。 汇总目标报表声明语句的一般形式是: varvar iden = reportreport rep_id noupdateupdate; hzlevel n; 其中(1)iden 表示表变量名; (2)rep_id 表示表代码(如“s606“); (3)noupdate 选项表示该报表不可以修改; (4)汇总单位的级别由 hzlevel n 语句确定(如 0 表示全部汇总),9n=0; 一般来说,汇总单位级别由外部执行环境指定,本处一般不写。如汇总到县, 则 hzlevel 3;此语句和全局变量%hzlevel 的作用相同。 4.2.44.2.4 untunt 和和 sumuntsumunt 表表 在审核语句和汇总语句块中,自动打开一个 unt 表代表填报目录中的内容。在汇总语 句块中,还自动打开一个 sumunt 表表示综合单位信息。unt 和 sumunt 的结构是相同的, 可以当作报表使用。在 docheck 和 dosummary 语句块的执行部分,如果需要的话可以直接 使用 unt 表和 sumunt 表,unt 和 sumunt 中有七个元素可以使用,分别是: unt1 = 单位唯一标识码(系统内部码); unt2 = 单位代码; unt3 = 单位名称; unt4 = 综合单位代码(处理地); unt5 = 单位级别(对于基层单位,级别=-1) unt6 = 父对象唯一标识码(uuid) unt7 = 专业代码 需要注意的是,sumunit 只能在 dosummary 内使用。 4.2.54.2.5 变量的作用域变量的作用域 在公式的编写中,必须注意变量的作用范围。在目前的公式语法设计中,变量的范围 22 有 四种:一是全局变量,在 main()函数体中定义,在 main 内都可以使用;二是语句块变 量,在 docheck 或 dosummary 的变量定义中定义,这里只能定义报表变量;三是综合单位 变量,在 dosummary 的 to:后面定义;四是单位变量,在 docheck 或 dosummary 的 begin 部分定义。 各种变量的作用域示意如图 4-2-5a。 需要说明的是:scope:3 的范围是一个隐式的范围,实际上 to:后面有一个针对每个综 合单位的循环,这里定义的变量只在这个范围内有效。在 dosummary 后面只能定义报表变 量,不能定义简单变量;另外 scope:5 是一个汇后计算,这里定义的变量不能在其它地方 使用。 图 4-2-5a 4.2.64.2.6 变长表变长表 在本系统的变长表中,必定有一个指标来区分各行数据的属性,如产品生产情况变长 表,每行记录以产品编码区分;而对于科研项目表,则以序号区分。 如:产品生产情况表 main() var var1; dosummary var rptvar to: var var3; begin var var4; finally var var5; end end scope:4 scope:3 scope:2 scope:1 scope:5 23 产品上年库存本年产量本年销售本年产值 其中“产品”一栏中填写产品名称,实际输入时填写产品代码,作为每行的标识。 又如:科技项目表: 序号项目名称投入人员费用支出项目来源 实际的项目情况表中有序号一栏,如果没有也要定义一个序号指标涞来标识每个项目。 上述的“产品代码”和“序号”都作为变长表的一个指标,可以被公式访问。变长表 的各行只能通过坐标来访问,访问前必须判断该行是否存在。 4.34.3 一般语句一般语句 4.3.14.3.1 赋值语句赋值语句 赋值语句是将一个表达式的值赋给一个变量或表数据项。 赋值语句的一般形式为: 其中变量可以是表数据项。 4.3.24.3.2 ifif 语句语句 if 条件语句有两种形式,分别如下图所示: 形式一 形式二 第一种形式的条件语句表示: 如果表达式 1 的值为 ture 即真, 则执行语句 1, 执行完 语句组 1 中的语句,否则执行语句组 2 的语句。 第二种形式的语句表示:如果表达式 1 的 if 表达式 1 then 语句组 1 else 语句组 2 endif if 条件表达式 1 then 语句组 1 elsif 条件表达式 2 then 语句组 2 else 语句组 3 endif 变量变量 = = 表达式; 24 值为 ture 即真, 则执行语句 1, 执行完语句组 1 中的语句,否则如果满足条件 2 则执行语 句组 2 的语句,否则执行语句组 3。 条件语句可以嵌套,即在语句组中可以再次出现 if 语句。 4.3.34.3.3 forfor 语句语句 for 语句的一般形式为: 循环变量从初值开始步进,结束值是变量所能达到的最大(小)值,它决定什么时候 退出循环;步长值定义循环控制变量每循环一次后按什么方式变化。循环可以有多层嵌套。 步长值在结束值小于初值时为-1,否则为 1。 注意注意:for 语句中的循环变量在 for 语句外部不能引用。 4.3.44.3.4 foreachforeach 语句语句 foreach 循环的一般形式为: 数据集的表示形式是d1,d2,d3 其中 dn 必须是同一类型的表达式。 4.3.54.3.5 whilewhile 语句语句 while 循环的一般格式为: 当条件表达式为真时, 便执行语句。直到条件为假才结束循环,继续执行循环程序外 的后续语句。 4.3.64.3.6 switchswitch 语句语句 for 循环变量 = = 初值 to 结束值 step 步长值 do 语句组 endfor foreach 循环变量 in 数据集 do 语句组 endfor while 条件表达式 do 语句组 endwhile 25 switch 语句的一般格式为: 当表达式的值为值列表中的某项时,执行相应的语句组。 4.3.74.3.7 breakbreak 语句语句 break 语句通常用在循环语句(for, foreach,while)中,它可使程序终止循环而执 行循环后面的语句, 即满足条件时便跳出循环。 语句形式是: 注意:在多层循环中, 一个 break 语句只向外跳一层。 break 语句可以在 docheck 和 dosummary 中使用。在 docheck 中作为独立的语句执行 时将直接终止 docheck 语句的执行。在 dosummary 中直接使用时,终止当前综合单位的汇 总处理。 4.3.84.3.8 continuecontinue 语句语句 continue 语句的作用是跳过循环本中剩余的语句而强行执行下一次循环。 continue 语句只用在循环体中, 常与 if 条件语句一起使用, 用来加速循环。语句形式是: 当在 docheck、dosummary 语句块中使用此语句时,将直接跳转到下一单位的处理中。 4.3.94.3.9 returnreturn 语句语句 return 语句用在从函数中返回一个值。语句形式是: break;break; continue; return expr; switch 表达式 case val-11,val-12, : : 语句组-1; case val-21, : : 语句组-2; otherwise:otherwise: 语句组-n; endswitch 26 4.44.4 统计循环控制语句统计循环控制语句 统计任务执行中,需要对执行的对象进行控制,一般来说,我们对一个单单位位(即一个 调查对象,可以综合单位或基层单位)的报表进行处理,当所有单位处理完成后,统计任 务就完成了。为了控制统计处理的单位范围和内容,我们需要提供一种手段来对它们进行 控制,这就是统计循环控制。 由于汇总和审核处理的方式不同,对它们的统计循环控制也要有所不同。 汇总时需要的控制信息包括: (1)汇总到哪里?(哪级单位和哪些汇总表) (2)对哪些调查对象进行汇总? (3)被统计单位需要满足什么样的条件? (4)统计哪些数据报表。 (5)当涉及不同类别的调查对象时,需要指定它们之间的关系。 审核时需要的控制信息包括: (1)针对哪个调查对象类别进行审核? (2)审核那些数据报表? (3)如果涉及其它调查对象,他们和住调查对象的关系? 上述这些控制信息都必须通过统计循环控制语句得到。这些语句包括:报表打开语句、 参数控制语句、总体条件语句、单位范围控制等。 4.4.14.4.1 打开报表语句打开报表语句 打开语句通知系统需要使用的数据范围,其一般形式如下: 其中 update 表示将数据表以可修改方式打开,level 表示打开的是综合表的层级。 relation 表示打开的表和填报目录的关系,where 表示打开表应满足的条件。inner 表示 只处理填写了本表的单位,一个语句块中只允许有一个 inner 方式的表。relation 方式打 开的表和其它表可能具有不同的单位代码,主要用于处理和该单位相关联的其它单位的表。 var表变量 = = report rep_id update inner where cond; ; var表变量 = = report rep_id levellevel n outer update; ; var表变量 = = report rep_id relation cond; ; 27 系统自动打开一张 unt 表,代表本单位填报信息。 where 子句后面的条件表达式(condcond)中可以使用 unt 表的数据项和本表的简单数据 项,数据项的引用用两个$括起来,例如:$unt2$=”2222”; relation 子句中的关系表达式可以使用 unt 和 this,this-1-7对应于 unt 中的响应 数据项, unt 和 this 不需要用$包围。 表达式中只允许简单的比较方式(,= 大于 = 大于等于 不等于 5.2.5.45.2.5.4 区间表示符区间表示符 逻辑运算符是指用形式逻辑原则来建立数值间关系的符号。 epras 公式的逻辑运算符如下: 操作符 作用 min : max min = max min = max min max x (大于) =(大于等于) =(等于) | = | /关系运算符 logical_operator: expr(,|)expr:|;expr 第二种表示法是将数组或数据表变量中的一个区域转换成集合类型。 6.1.2.26.1.2.2 声明语句声明语句 declaration_statement: 47 varibale_declaration/ 声明变量语句 | filter_declaration/ 声明过滤条件语句 | group_declaration/ 分组声明语句 variable_declaration:/ 声明变量语句 var variable_decl_item ,variable_decl_item* ; variable_decl_item:/ 单个变量声明语句 identifier =expr/ 值 | array (expr,expr)/ 数组 | report string update inner where where_expr where_expr: simple_where_expr logic_operator simple_where_expr * simple_where_expr: $identifier$ relation_operator expr | substr($identifier $,expr,expr) relation_operator expr filter_declaration:/ 参加计算单位条件 filter expr ; group_declaration:/ 分组定义语句 group identifier = group_condit

温馨提示

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

评论

0/150

提交评论