自定义公式系统设计和说明.docx
《自定义公式系统设计和说明.docx》由会员分享,可在线阅读,更多相关《自定义公式系统设计和说明.docx(62页珍藏版)》请在冰豆网上搜索。
自定义公式系统设计和说明
1.前言
ePRAS后台公式系统的目的是根据业务应用的要求,对调查中得到的数据进行处理,主要的处理方式是审核、汇总和计算。
由于统计业务的复杂性,我们不可能预先设想到所有的审核、汇总方式,它们都是根据业务要求的变化而变化的,因此为尽可能多的满足业务的要求,后台公式系统以一种基本通用的可扩充的方式出现。
此外由于统计调查的目的的不同,统计调查业务的范围会有大有小,涉及到的调查对象、调查指标也会不尽相同,体现在数据上,就放映了数据量的大小会发生巨大的变化。
因此在公式系统统计功能的处理上,我们需要兼顾业务能力和执行效率。
在实际的业务处理过程中,公式的编写最终是由业务人员进行的,考虑到各地业务人员的计算机技术水平和业务理解能力,我们需要设计出一套易于理解的公式语法,以方便业务人员的学习、应用。
本说明书主要描述了ePRAS公式系统的基础业务模型、ePRAS公式的基本概念、词法语法结构等方面的内容,并给出了一些公式的实例,以便于有关人员学习、理解、编写和使用ePRAS公式。
2.
基本知识
ePRAS公式系统是基于我们对经济普查统计业务的理解进行设计的,对统计业务的理解整体上被简化成一个业务数据模型。
同时公式系统不是一个独立的系统,而是和统计业务的其它环节紧密结合的系统。
从业务模型、数据表示、数据处理过程等方便都和统计业务的其它处理功能紧密结合在一起,成为不可分割的一个整体。
这里我们描述的就是我们对统计业务的简化模型和数据关系模型,以及它们在公式中的反映。
我们的统计业务模型是从统计调查项目开始的,一个统计调查项目包含一个统计调查业务中涉及的所有相关业务数据。
2.1统计调查项目
一个统计调查项目指的是为某个统计目的而进行的统计调查工作。
在实际的工作中,相对应的工作被称为统计调查任务,其一般的处理过程如下图所示:
图2-1-1
从总体上来说,一个统计调查任务的处理包括三个阶段:
规划设计阶段、实施阶段和应用阶段。
在规划设计阶段,需要制定调查方案、确定调查对象范围、统计标准、设计调查指标(调查表)和汇总指标(汇总表)等;在实施阶段,需要发放调查表、采集调查数据、审核调查结果、产生汇总指标以及其它数据处理工作,尤其需要指出的是,实施阶段可能包括多次的数据采集、审核、汇总的过程(如年报、月报);在应用阶段,主要是提供对调查数据的分析、查询等服务功能。
上述实际的统计任务处理过程反映在软件的处理上,就成为:
项目定义、数据处理和数据服务三个不同的软件处理阶段。
2.2项目定义阶段
项目定义阶段的任务是定义和本项目有关的调查对象、统计标准、调查指标、统计指标、审核关系、汇总关系等。
总而言之,项目定义的过程规定了一个统计调查项目中的主要静态(数据)方面的内容,对后面的数据处理工作进行规范和约束。
项目定义的大致过程如下图所示:
图2-2-1
在软件的处理上,项目定义阶段主要来定义项目中的静态信息:
(1)管理定义:
报告期、专业、调查对象分类;
(2)统计标准:
分类目录、综合单位、统计分组、指标集;(3)报表定义:
基层表、综合表;(4)数据处理关系定义:
审核关系、汇总关系;
这些定义信息可以被数据处理软件加载作为数据处理系统运行的基本依据。
2.2.1报告期
在一个统计项目中可以多次采集调查对象的数据,每次采集的数据的总体称为一个报告期。
在一个统计调查项目中,报告期用来区分各次采集的数据。
一般来说,数据处理的工作是针对一个报告期进行的,多报告期之间不存在数据之间的处理关系(除了在报表自身上有反映的之外)。
在软件的处理上,报告期的定义在数据处理工作开始之前完成。
每个报告期的代码、名称等必须全部预先定义完毕。
2.2.2专业
专业表示了一个统计调查任务中涉及到的几个独立的处理部分。
将一个统计调查项目分成几个独立的调查部分进行,数据处理也在专业的限制下独立执行,就相当于将一个项目分成几个独立的子项目来进行。
当然在调查表、指标、统计标准等方面,各专业之间共享项目的基本定义和设置。
每个专业使用若干张调查表(可以和其它专业相同)。
在进行数据处理时,可以按专业进行数据处理(指定处理哪个专业),也可以按报表进行数据处理(不指定专业)。
2.2.3调查对象分类
根据每个被调查对象的性质可以将他们分成若干类,每一类都相同的性质和属性(基本情况),比较典型的如:
法人调查对象(都是法人)、产业活动单位调查对象。
调查对象分类之间可以有一定的关系,如一个法人调查对象可以拥有若干个产业活动单位调查对象。
在软件处理上,一张调查表只能有同一类调查对象来填写。
在有些涉及不同调查对象的数据处理上,目前可以支持调查对象之间的1:
N关系即父子关系(如法人单位--产业活动单位)。
2.2.4统计标准
统计标准指的是在统计上采用的分类、目录,这些分类、目录可以是标准的,也可以是为本次调查专门制定的。
在定义统计标准的同时,也包括综合单位目录的制定,这是一个特殊的目录,用于调查项目的数据汇总和组织。
在软件的处理上,一个分类目录的结构组成是动态可变化的,就是说,每个分类目录可以定制自己的信息项。
当然至少包括:
目录项代码、名称这两项。
ePRAS支持两种形式的目录:
(1)平面目录;
(2)树形目录;
平面目录中的所有目录项都是独立的,彼此之间是同等关系。
树形目录的目录项之间通过代码或上级代码形成多级的树形关系,平面目录是树形目录的特例。
平面目录和树形目录的目录项都通过一个代码来唯一标识,这个代码可以是分段方式的,也可以是独立方式编码的,前者通过代码段来确定彼此之间的关系(如:
52(贵州),5224(毕节地区),522401(毕节市)),后者通过指定其级别和上级目录项来建立相互之间的关系。
综合单位目录代码必须采用分段方式编码。
2.2.5调查报表
调查报表是数据的载体。
在我们的业务数据模型中,每张报表都有一系列的指标项组成,一个指标项都是具有特定的定义信息(标识、名称、性质等),它可以是一个简单数据项(如名称、地址、行业等),也可以是由一组相互关联的数据项(如财务、生产数据等)组成的组合指标项(如图2-2-5-1),组合指标项的一般表现形式是二维表(定长二维表、不定长二维表)。
图2-2-5-1
上图的调查中,报表中含有四个指标项:
“地址”、“所属行业”、“生产情况”、“企业等级”。
其中“地址”、“所属行业”、“企业等级”是简单指标项,“生产情况”是组合指标项(由三行三列共9个数据项组成)。
在调查表(又称为基层表)中,组合指标项的定义通常包括两个部分:
指标数据项列表(宾栏)、分组列表(主栏)。
在上图的组合指标项“生产情况”的定义中,指标数据项列表包括:
“产量”、“产值”、“库存”三个数据项;指标分组列表包括:
“煤”、“钢”、“汽油”。
指标数据项是具有数据属性,如数值、字符串。
每个指标数据项、分组项都有编码、名称和序号。
2.2.6综合报表
和基层调查表不同的是,综合报表都是有一个组合指标项构成的。
综合表有两种形式,一是定长二维表(行数和列数是固定的),另一种是不定长二维表(列数是固定的,行数是不固定的)。
ePRAS系统在综合表的定义上允许使用分类目录来定义主栏分组,真正的主栏根据定义自动展开,如:
一个主栏行定义为:
%catetory,industry,,2%
其含义是主栏按行业大类分组。
2.2.7审核关系
审核关系表示的是一个调查对象在填写调查表时,为保证填写正确所要满足的填写数据关系。
这些数据之间的关系在ePRAS软件的处理上即成为数据审核关系。
从审核关系的处理上,我们可以采用的方式有:
人工检查、录入时的控制、边录边审、后台审核等处理操作。
本处我们讲述的是采用后台公式来检查的审核关系(一般是批量检查)。
基本我们的业务数据模型,所有的审核关系可以分为两类:
(1)调查对象自己的数据关系(表内、表间);
(2)调查对象间的数据审核关系(复杂的表间关系)。
2.2.8汇总关系
汇总关系指的是如何生成汇总表数据的过程。
汇总关系以公式的形式出现,并且出现的形式和过程可以不一致。
在本系统公式的设计中,目前支持叠加、分组、灵活等多种形式的汇总方式。
(1)叠加汇总
叠加汇总指的是将各单位同一张报表的数据直接相加产生最后的汇总表数据的方式。
叠加汇总产生的对象和参加汇总的基层报表有同样的结构形式。
(2)分组汇总
分组汇总方式是将各个单位按照一定的分组规则进行分组,然后将各组的数据进行叠加汇总,从而产生汇总表的过程。
分组一般是按照单位的某个属性特性来进行的,可以对多个不同的分组方式进行组合,产生多层分组。
G1-1
G1-2
G2-1
G2-2
G2-1
G2-2
G3-1
G3-2
G3-1
G3-2
G3-1
G3-2
G3-1
G3-2
G4-1
指标1
指标2
指标3
DATA
G4-2
指标1
指标2
指标3
分组可以在宾栏出现,也可以在主栏出现。
在每个分组下都是执行对同一组指标数据项的叠加运算。
上图中的主栏和宾栏的分组之间是分层的关系,实际的分组汇总关系中还包括并列的分组方式。
此外需要注意的是,分组之间允许重叠,就是说,一个单位可以满足多个分组条件,它的指标数据可以被叠加到多个分组中。
ePRAS公式中将指标放在主栏上,这一点和日常的形式不同,使用中需要进行主宾栏转换处理(尤其需要注意)。
在上图中,可以看到每个组中的指标集是相同的。
(3)灵活汇总
灵活汇总关系对基层数据没有作出特别的约束,但是要求汇总指标项的来源是始终如一的,就是说,一个汇总数据项总是特定的基层数据项运算的结果。
对于如何将基层数据运算到汇总数据项上,我们可以设置多种条件,其原理如下图:
T
T_C1
T_C2
T_C3
T_C4
T_C5
T_C6
T_R1
T_R2
T_R3
Tk:
Expr
T_R4
对汇总表中每一个单元格内数据的产生,都需要判断条件:
T_Cn、T_Rm和Tk,然后将表达式Expr的值叠加得到最终的汇总表数据的值。
除此之外,能够参加汇总的单位还必须满足条件总的条件T。
2.3数据处理阶段
数据处理阶段的任务是采集基层数据、检查填报数据的正确性、汇总数据。
以电子形式存储调查得到的基层数据和汇总数据,保证数据的质量,提供基本的数据处理的手段是本阶段的主要任务。
在软件的处理上,本阶段主要包括数据录入、审核、汇总、数据上报/接收、数据管理等软件的处理方式。
其中数据审核、汇总都是通过后台公式的方式实现的。
2.4数据服务阶段
数据服务阶段的主要任务是将处理后的数据对外提供数据服务,如查询、应用、分析等。
数据服务不是ePRAS系统的主要设计目标。
3.
ePRAS公式基本概念
3.1ePRAS公式
ePRAS公式是按照特定的语法规则编写的一段代码。
这些代码按照其特定的含义被执行,从而得到结果。
ePRAS公式通过特定的公式语法形式和实现方式实现了前面所描述的数据审核、汇总、计算的功能。
在ePRAS公式的语法中,除了一般的计算、判断语句外,还包括了特定的审核、汇总数据的语句,这些语句以一种特定的方式反应了前面描述的数据处理的各种方式。
3.2数据审核
在ePRAS公式中,数据审核针对调查对象(单位)进行,数据以报表的形式作为载体为访问。
在进行数据审核时,需要确认下列方面的内容:
(1)单位范围(参审单位)
单位范围表示的是对哪些单位的数据进行审核,公式中对单位范围有影响的语句有三种:
一是直接的单位范围描述;二是单位应满足的条件,三是主表的选择。
◆单位范围(unitscope):
直接指定单位范围实际上是指定综合单位范围,属于这些综合单位的基层单位或综合单位都处于需要处理的范围之内。
◆条件约束(Filter):
条件选择指的是所选择单位的数据应满足的基本条件,只有满足这些条件的单位才被处理。
◆主表(选项:
inner):
只有填报了这些主表的单位才被处理。
一般来说,被处理的单位需要同时满足上述要求。
参加审核的单位选择示例如下图:
(2)报表
指定参与审核的报表实际上是指定参与审核的数据。
和实际的数据审核方式对应,报表作为一个数据集合的整体被一次性取出处理。
一次读取一个单位的数据。
(3)审核内容
审核内容是需要进行核对、比较的数据关系。
所有未能满足要求的数据关系的单位的信息都会被记录下来重新检查和复核。
(4)计算处理
在很多情况下,数据审核时需要进行数据的计算处理,如计量单位变换、自动平衡计算等。
这些数据上的计算处理功能也是审核处理中必须的。
3.3数据汇总
在前面的基本知识介绍中,我们提到了三种汇总方式(关系)。
在实际的汇总公式的编写中,除了汇总的算法,还要对汇总的其它方面进行处理,主要是对那些数据进行汇总(参汇单位)、汇总到哪个综合单位(目的)、需要哪些数据(报表)、汇总算法等。
(1)参汇单位选择
参汇单位范围选择的方式和审核公式基本相同,公式中对单位范围有影响的语句有三种:
一是直接的单位范围描述;二是单位应满足的条件,三是主表的选择。
◆单位范围(unitscope):
直接指定单位范围实际上是指定综合单位范围,属于这些综合单位的基层单位或综合单位都处于需要处理的范围之内。
缺省时汇总全部单位。
◆条件约束(Filter):
条件选择指的是所选择单位的数据应满足的基本条件,只有满足这些条件的单位才被处理。
◆主表(选项:
inner):
只有填报了这些主表的单位才被处理。
一般来说,被处理的基层单位需要同时满足上述要求。
(2)汇总范围
汇总范围指的是对哪些综合单位进行汇总,因此汇总单位的范围选择和单位范围的选择是一致的,只是缺省时对全部数据进行汇总。
通过汇总单位级别(%hzlevel)的声明指定汇总单位的级别。
(3)参汇报表
参汇报表指定了哪些数据参加汇总。
参汇报表数据的读取方式和审核公式相同,也是一次读取一个单位的报表数据。
(4)汇总算法
从原理上来说,目前ePRAS公式系统支持各种方式的汇总方式,包括叠加、分组、灵活以及其它的汇总、聚合计算方式。
特别地,公式系统为分组汇总、灵活汇总分别提供了特定的语法支持。
有关分组汇总的详细知识可以参考SARP的说明书。
这里需要说明的是,各个分组之间可以通过运算关系形成新的分组,有两种运算关系:
并列运算和分层。
前者将两个分组(假设分别有M和N和组)并列起来形成一个M+N的新分组,后者以分层的关系形成一个M*N的新分组。
3.4报表数据处理方式
ePRAS在进行审核和汇总处理时,都是每次读取一个单位的报表数据(或通过特定方式表述的和该单位相关联的其它单位的报表数据),即每次计算处理时,我们看到的都是一个单位的数据,然后进行规定的计算处理,如此循环直到范围内的所有单位被处理完为止。
这种数据读取方式,在编写公式时尤其需要注意。
4.
ePRAS公式编写说明
4.1公式结构
4.1.1一般结构
前面已经提到,ePRAS系统的公式主要执行针对报表数据的审核、汇总和计算功能。
从结构上来说,公式的书写形式如下:
Functionfunc(param-1,…)
[一般语句组]
END
……
Main()
([变量声明语句])*
([一般语句]|[统计语句块])*
End
说明语句部分定义公式中用到的全局变量。
一般语句是通用形式的执行语句,如赋值语句、循环语句、条件语句等。
其中统计语句块有两种,分别是汇总语句和审核语句。
4.1.2汇总语句块
汇总统计语句的形式如下:
DoSummary
[报表声明语句]*
TO:
[变量声明语句]*
[汇总表声明语句]*
BEGIN
[汇前处理语句]
[汇总语句]
Finally
[汇后处理语句]
END
汇总语句中可以含有和汇总相关的定义信息和特殊执行语句。
4.1.3审核语句块
审核语句的形式如下:
DoCheck
[报表声明语句]*
[循环控制语句]*
BEGIN
([审核语句]|[计算语句]|[一般语句])*
END
审核语句中可以包含和审核相关的特殊语句。
此外,汇总语句和审核语句中的循环控制定义部分和统计语句的执行控制有关,主要是对统计语句统计的范围的控制。
汇总统计语句、审核业务语句可以嵌套。
4.1.4语句类型
从具体的语句来划分,整个ePRAS系统的公式由下列结构语句和语句元素组成:
(1)一般语句:
主要是指说明语句、赋值语句。
(2)控制语句:
主要是指循环、条件等控制语句。
(3)统计循环控制语句:
确定统计对象范围的定义语句(一般不需要直接写)。
(4)报表声明语句:
声明公式中使用的报表极其相互关系。
(5)统计处理语句:
主要是指和执行汇总、审核相关的语句。
(6)函数:
系统内嵌的函数和自定义的函数。
4.1.5报表数据的引用
前面已经说过,数据报表有数据项有序组成。
数据项有两种类型:
简单数据项和组合数据项;其中简单数据项可以是数字或字符类型,只能取一个值;组合数据项是对简单数据项的二维组合,又分为两种:
定长二维表、不定长二维表。
在公式中,一般我们需要访问统计报表中的具体数据,这时可以使用两种访问表示方式:
下标表示法和标识表示法。
4.1.5.1下标表示法
下标表示法是根据数据表的内部形式(单记录、交叉表、多记录表)采用一维和二维的表示方法。
具体的方法如下:
表示形式
一般数据项
组合数据项
A[k]
访问数据表的第K个数据项的值。
为其第一个简单类型的值。
A[k][m,n]
访问组合数据项,M>0,N>0;
第M行、第N列的数据值。
A[m,n]
当一张报表只有一个组合数据项时,可以使用此方式,M>0,N>0;表示第M行、第N列的数据值。
A[i][k]
A[i][k][m,n]
当该报表本身有多张,是一个数组时,特别是在父子关系下的子表。
其中:
k=数据项序号;m=行下标;n=列下标;i=子表序号
注意当一个数据项为空时,自动取缺省值(数字型为0,字符型为“”)。
4.1.5.2标识表示法
标识表示法使用各个数据项的标识来表示某个数据项。
其基本表示方式和下标表示法相同,只是用标识码字符串代替下标,可以和下表混合使用。
表示方法如下:
表示形式
一般数据项
组合数据项
A[“ID”]
ID=数据项标识
不允许
A[“ID”][“RID”,”CID”]
(RID,CID)=(行代码,列代码)
复合表示法
A[K][“RID”,”CID”]
(RID,CID)=(行代码,列代码)
A[“ID”][m,n]
(m,n)=(行号,列号)
4.1.5.3数据项集合的表示法(暂时未实现)
数据项集合的表示只可以使用下标表示法。
如下表所示:
表示形式
一般数据项
组合数据项
A[m1:
m2]
对于只有一个二维组合指标项的报表
A[m1:
m2,n]
A[m,n1:
n2]
A[m1:
m2,n1:
n2]
A[k][m1:
m2,n]
允许
A[k][m,n1:
n2]
允许
A[k][m1:
m2,n1:
n2]
允许
A[k][m1:
m2]
允许
A[“ID”][m1:
m2,n]
ID是指标代码
A[“ID”][m,n1:
n2]
A[“ID”][m1:
m2,n1:
n2]
A[“ID”][m1:
m2]
其中:
m1=起始行下标;m2=终止行下标;
n1=起始列下标;n2=终止列下标;
需要指出的是,数据项集合是有顺序的。
4.2声明语句
4.2.1报表声明语句
报表声明语句只能在审核和汇总语言块中使用,用于声明统计处理过程中使用的基层报表和综合表。
报表声明语句一般有三种形式,分别是:
VARiden=REPORTrep_id[Update][Inner[Wherecond]];
VARiden=REPORTrep_id[[Leveln][Update][Outer];
VARiden=REPORTrep_id[Relationcond];
其中
(1)iden表示报表变量名;
(2)rep_id表示表标识代码(如“J601“);
(3)Leveln表示综合表的单位级别;当指定Level时,指的是相对于当前基层单位的上级单位(由n决定其级别,0=(4)Wherecond表示该表应满足的条件,只能在inner之后出现;
(5)Relationcond表示打开其它单位的关联表;
(6)Update选项表示该报表可以修改,缺省是不可修改;
(7)Inner表示此表为主表,只能有一个主表,Outer表示如果该表不存在,生成一张空表;
(8)可以为主表指定条件。
(9)Relation和Where不能同时使用。
(10)Where只能出现在Inner之后。
(11)Where中只能出现自己的一维数据项(简单指标)和UNT表的数据项。
(12)where条件中允许使用$this[m]$和$unt[k]$分别代码当前报表和填报目录中的信息,可以使用substr函数。
如:
substr($unt[4]$,1,2)==”53”表示只有综合单位代码前两位为“53”的单位才被处理。
(13)relation表达式也可以使用this和unt,但是目前只能使用两种形式:
(I)父对象--->子对象:
unt[1]=*this[-6];
表示打开和父调查对象相关的所有子调查对象的相关报表,是一种一对多的关系,如vart601=report“J601”inner;
vart602=report“J602”relationunt[1]=*this[-6];
打开的是对应该法人的所有产业活动单位的602表(可能对应多张)。
(II)子对象--->父对象:
unt[6]=?
this[-1];
表示打开和子调查对象相关的父调查对象的相关报表。
如vart602=report“J602”inner;
vart601=report“J601”relationunt[6]=?
this[-1];
表示打开J602表的所属发热单位UUID相同的一张601表(最多对应一张)。
4.2.2变量声明语句
4.2.2.1变量定义
ePRAS系统支持两种变量声明,一种是简单变量,另一种是数组变量。
变量声明语句的一般形式是:
varvariable[=null|Array[m,n]];
如:
定义一个简单变量(整数类型):
vartotal=10;
定义一个简单变量(小数