论文部分内容阅读
随着计算机审计的逐步开展,审计人员需要采集的电子数据范围也在不断扩大,不仅要采集被审计单位的财务数据,还要关注被审计单位的业务数据,不仅要采集被审计单位内部的电子数据,还要想方设法取得与被审计单位经济业务相关单位的外部电子数据。电子数据采集范围的扩大,随之带来了电子数据的多样性,如各种各样的后台数据库、千姿百态的数据存储格式等。针对采集到的电子数据,要想使其发挥作用,就要使其符合审计工作的需要。按照审计署对审计工作的要求,要全面把握被审计单位的总体,然后才能进一步开展审计工作。因此,要想全面的反映被审计单位的总体情况,电子数据的完整性是一个前提条件。
这些年,我们在审计中经常遇到一种数据存储格式,需要对其进行整理才能使其满足电子数据的完整性。其主要特征如图1所示:
图1
1.数据存储时自动分类。对每行数据按照各列的值依次进行分类,按照顺序进行存储。如图1中按照采购资源来源、出票方、物料三列依次分类。
2.同一类数据存储时,只存储第一行数据的值,以后同类数据值均为空。
这样的数据存储格式,在数据存储时可以节省大量的存储空间,使得数据库中冗余数据较少。但是,在审计中,我们需要以每一行数据为单位,对数据进行分析,面对如上图所示的数据时,需要把值为空的数据还原为其应为的值,如:图1中第二行“采购资源来源”应为它上一行的值“从省内地方炼油企业购进”。在审计中,面对这样的数据存储格式,我们可以使用两个方法进行操作,还原数据。
一、利用EXCEL表格的IF函数
EXCEL表格中IF函数是一个逻辑函数,主要公式为:IF(逻辑表达式,逻辑表达式值为真时的值,逻辑表达式值为假时的值)。
首先,在需要处理的一列数据后面插入一列,用于存储还原后的值,如图2中C列。
图2
其次,在第一行数据与C列相交的单元格内编写IF函数,具体为:IF(B2<>” ” ,B2,Cl)。这个语句表示:如果B列中的值不为空,则C列中的值为B列中的值,如果为空,则值为C列中前一行的值。
最后,把此IF函数在C列中各行进行复制,这样C列中就是B列还原后的值。可以使用选择性粘贴把C列中IF函数删除,只保留最终的值。
二、利用SQL语句中的游标功能
当遇到数据量很大的情况,像第一种方法在EXCEL表格中进行处理就很难实现。如:EXCEL 2007以前的版本最多支持65 536行数据,如果使用EXCEL 2007以上的版本,当数据量上万行时,在新增加的列中复制公式就是一个很费时间和精力的工作。因此,我们可以通过把数据导入到SQL SERVER数据库中,利用SQL语句中的游标功能进行处理。
首先,将采集后的数据导入SQL SERVER数据库中。
其次,利用SQL语句的游标功能处理数据。下面的SQL语句以图1中处理列“采购资源来源”为例。
第一步:定义游标。此游标采集列“序号”和“采购资源来源”的值。
DECLARE游标名CURSOR
FOR SELECT序号,采购资源来源FROM数据表名
第二步:打开游标,同时声明几个变量,用于临时存储数值。
OPEN游标名
DECLARE @source char(100)
——定义source存储列“采购资源来源”的值不为空时的数值,也就是碰到某行中列“采购资源来源”值为空时,需要将该字段值替换为source的值
DECLARE @sourcenext char(100)
——定义sourcenext为当前取得某行的字段值,即要处理的这一行数据中列“采购资源来源”的值
DECLARE @num int
——定义num为序号,存储列“序号”的值
第三步:利用whi1e循环对数据进行处理。
FETCH FROM游标名INTO @num,@sourcenext
——提取列“序号”和“采购资源来源”的值
SET @source=@sourcenext
FETCH FROM游标名INTO @num,@sourcenext
WHILE @@fetch_status=0
BEGIN
IF @sourcenext IS NULL
BEGIN
UPDATE数据表名
SET采购资源来源=@source WHERE序号=@num
END
ELSE BEGIN SET @source=@sourcenext
FETCH FROM游标名INTO @num,@sourcenext
END
——利用whi1e循环对该电子数据的每一行都进行处理,对列“采购资源来源”值为空的情况,都更新为变量source的值,使该行中列“采购资源来源”的值更改为本来的值。
第四步:关闭游标,释放游标。
CLOSE游标名
DEALLOCATE游标名
最后,经过上述SQL语句的处理,列“采购资源来源”的值得到了更新,变为了每行都有一个不为空的值。下一步审计人员就可以根据该数据进行分析和审计。
在实际的审计工作中,当我们采集到的数据符合上述的数据存储格式时,可以根据数据的实际情况灵活运用EXCEL表格IF函数或者SQL语句的游标功能进行处理,不必拘泥于一种方法。
(作者单位:审计署驻京津冀特派员办事处)
这些年,我们在审计中经常遇到一种数据存储格式,需要对其进行整理才能使其满足电子数据的完整性。其主要特征如图1所示:
图1
1.数据存储时自动分类。对每行数据按照各列的值依次进行分类,按照顺序进行存储。如图1中按照采购资源来源、出票方、物料三列依次分类。
2.同一类数据存储时,只存储第一行数据的值,以后同类数据值均为空。
这样的数据存储格式,在数据存储时可以节省大量的存储空间,使得数据库中冗余数据较少。但是,在审计中,我们需要以每一行数据为单位,对数据进行分析,面对如上图所示的数据时,需要把值为空的数据还原为其应为的值,如:图1中第二行“采购资源来源”应为它上一行的值“从省内地方炼油企业购进”。在审计中,面对这样的数据存储格式,我们可以使用两个方法进行操作,还原数据。
一、利用EXCEL表格的IF函数
EXCEL表格中IF函数是一个逻辑函数,主要公式为:IF(逻辑表达式,逻辑表达式值为真时的值,逻辑表达式值为假时的值)。
首先,在需要处理的一列数据后面插入一列,用于存储还原后的值,如图2中C列。
图2
其次,在第一行数据与C列相交的单元格内编写IF函数,具体为:IF(B2<>” ” ,B2,Cl)。这个语句表示:如果B列中的值不为空,则C列中的值为B列中的值,如果为空,则值为C列中前一行的值。
最后,把此IF函数在C列中各行进行复制,这样C列中就是B列还原后的值。可以使用选择性粘贴把C列中IF函数删除,只保留最终的值。
二、利用SQL语句中的游标功能
当遇到数据量很大的情况,像第一种方法在EXCEL表格中进行处理就很难实现。如:EXCEL 2007以前的版本最多支持65 536行数据,如果使用EXCEL 2007以上的版本,当数据量上万行时,在新增加的列中复制公式就是一个很费时间和精力的工作。因此,我们可以通过把数据导入到SQL SERVER数据库中,利用SQL语句中的游标功能进行处理。
首先,将采集后的数据导入SQL SERVER数据库中。
其次,利用SQL语句的游标功能处理数据。下面的SQL语句以图1中处理列“采购资源来源”为例。
第一步:定义游标。此游标采集列“序号”和“采购资源来源”的值。
DECLARE游标名CURSOR
FOR SELECT序号,采购资源来源FROM数据表名
第二步:打开游标,同时声明几个变量,用于临时存储数值。
OPEN游标名
DECLARE @source char(100)
——定义source存储列“采购资源来源”的值不为空时的数值,也就是碰到某行中列“采购资源来源”值为空时,需要将该字段值替换为source的值
DECLARE @sourcenext char(100)
——定义sourcenext为当前取得某行的字段值,即要处理的这一行数据中列“采购资源来源”的值
DECLARE @num int
——定义num为序号,存储列“序号”的值
第三步:利用whi1e循环对数据进行处理。
FETCH FROM游标名INTO @num,@sourcenext
——提取列“序号”和“采购资源来源”的值
SET @source=@sourcenext
FETCH FROM游标名INTO @num,@sourcenext
WHILE @@fetch_status=0
BEGIN
IF @sourcenext IS NULL
BEGIN
UPDATE数据表名
SET采购资源来源=@source WHERE序号=@num
END
ELSE BEGIN SET @source=@sourcenext
FETCH FROM游标名INTO @num,@sourcenext
END
——利用whi1e循环对该电子数据的每一行都进行处理,对列“采购资源来源”值为空的情况,都更新为变量source的值,使该行中列“采购资源来源”的值更改为本来的值。
第四步:关闭游标,释放游标。
CLOSE游标名
DEALLOCATE游标名
最后,经过上述SQL语句的处理,列“采购资源来源”的值得到了更新,变为了每行都有一个不为空的值。下一步审计人员就可以根据该数据进行分析和审计。
在实际的审计工作中,当我们采集到的数据符合上述的数据存储格式时,可以根据数据的实际情况灵活运用EXCEL表格IF函数或者SQL语句的游标功能进行处理,不必拘泥于一种方法。
(作者单位:审计署驻京津冀特派员办事处)