审计分析中巧用“数据字典”,本文主要内容关键词为:巧用论文,字典论文,数据论文,此文献不代表本站观点,内容供学术参考,文章仅供参考阅读下载。
数据字典是关于数据信息的集合,即对数据流图中包含的所有元素定义的集合。在结构化分析中,数据字典的作用是给数据流图上每个成分加以定义和说明。我们将数据字典的定义引入到审计分析中,用于查找数据错误或缺失。本文从车辆识别号分析和票据缺号查找案例来说明如何查找错误或缺失。 一、车辆识别号校验分析 车辆识别号(即VIN码)的第九位是校验码,根据其他16位计算而来,计算规则如下:VIN码中的每一位都是数字或大写字母,每个数字和大写字母对应一个数值;车辆识别号中除检验位之外的每一位都有一个权重;将每一位的数值和权重相乘后累加,累加数除以11所得余数即为检验码,如余数为10则检验码为X。在对车辆识别号进行查错分析时,我们可以巧用数据字典表来对VIN码进行校验。 第一步:制作两张字典表,一张用来说明权重(如图1),一张用来说明转换值(如图2)。 第二步:对VIN码进行提取、计算。 由于VIN码位数比较多,我们可以利用游标循环来提取计算或者在excel中写出批量语句。 方法一:利用游标提取SQL语句如下: declare a cursor for select VIN码,校验码=case sub-string(VIN码,9,1)when ‘X’ then 10else substring(VIN码,9,1)end from abaVIN码 declare @vin-char(25),@jy char(6) open a fetch a into @vin,@jy print 'VIN码检验码余数' while @@FETCH_ST ATUS=0 begin declare @a int,@sum int select @a=1,@sum=0 while @<=17 begin set @sum=@sum+(select对应值from取值字典表where原始值=SUBSTRING(@vin,@a,1) *(select权重from权重字典表where第X位左向右=@a) set@a=@a+l set@sum=@sum%11 if@sum<>@jy print@vin+@jy+cast(@sum as varchar(2) fetch a into @vin,@jy close a deallocate a 查找结果如图3 方法二:在excel中生成批量语句 Step 1:在excel中生成计算语句(如图4) Step 2:在SQL中进行校验 select VIN码,检验码=case SUBSTRING(VIN码,9,1)when ‘x’ then 10 else SUBSTRING(VIN码,9,1)end, 余数=cast(select对应值from取值字典表where原始值=SUBSTRING(VIN码,1,1))*(select权重from权重字典表where第X位左向右=1)+ (select对应值from取值字典表where原始值=SUBSTRING(VIN码,2,1))*(select权重from权重字典表where第X位左向右=2)+ (select对应值from取值字典表where原始值=SUBSTRING(VIN码,3,10)*(select权重from权重字典表where第X位左向右=3)+ (select对应值from取值字典表where原始值=SUBSTRING(VIN码,4,1))*(select权重from权重字典表where第X位左向右=4)+ (select对应值from取值字典表where原始值=SUBSTRING(VIN码,5,1))*(select权重from权重字典表where第X位左向右=5)+ (select对应值from取值字典表where原始值=SUBSTRING(VIN码,6,1))*(select权重from权重字典表where第X位左向右=6)+ (select对应值from取值字典表where原始值=SUBSTRING(VIN码,7,1))*(select权重from权重字典表where第X位左向右=7)+ (select对应值from取值字典表where原始值=SUBSTRING(VIN码,8,1))*(select权重from权重字典表where第X位左向右=8)+ (select对应值from取值字典表where原始值=SUBSTRING(VIN码,9,1))* (select权重from权重字典表where第X位左向右=9)+ (select对应值from取值字典表where原始值=SUBSTRING(VIN码,10,1) *(select权重from权重字典表where第X位左向右=10)+ (select对应值from取值字典表where原始值=SUBSTRING(VIN码,11,1) *(select权重from权重字典表where第X位左向右=11)+ (select对应值from取值字典表where原始值=SUBSTRING(VIN码,12,1)) *(select权重from权重字典表where第X位左向右=12)+ (select对应值from取值字典表where原始值=SUBSTRING(VIN码,13,1) *(select权重from权重字典表where第X位左向右=13)+ (select对应值from取值字典表where原始值=SUBSTRING(VIN码,14,1)) *(select权重from权重字典表where第X位左向右=14)+ (select对应值from取值字典表where原始值=SUBSTRING(VIN码,15,1) *(select权重from权重字典表where第X位左向右=15)+ (select对应值from取值字典表where原始值=SUBSTRING(VIN码,16,1)) *(select权重from权重字典表where第X位左向右=16)+ (select对应值from取值字典表where原始值=SUBSTRING(VIN码,17,1)) *(select权重from权重字典表where第X位左向右=17) as int)%11 into校验表 from dbo.VIN码 select*from校验表 where校验码<>余数 查找结果如图5: 这两种方法得到的结果是一致的,我们可以根据实际情况选择其中的一种。 二、票据缺号查找 完整性审计是审计必不可少的过程之一。对于连续编号的票据来说,我们往往通过最大值、最小值和计数就很容易判断票据是否缺失,但是锁定缺失的票据往往不是一件易事。然而,根据最大值、最小值来制作一个无缺失的标准票据表对于审计人员来说却非常简单。将无缺失的票据表与票据表进行对比,无需复杂的SQL语句,对于数据量小的票据表来说,甚至可以直接利用excel中的函数vlookup来进行查找。(本文以U8-999账套中的发货单为例) 第一步:通过最大值、最小值和计数来判断票据是否存在缺失。 Select cVouchType,max(cdlcode),MIN(cdlcode),COUNT(distinct cdlcode) from DispatchList group by cVouchType 查询结果如图6: 从查询结果我们得知,票据类型为05的票据存在缺失情况。 第二步:利用填充对票据类型为05的票据制作一张无缺失的票据表。 select a*from dbo.无缺失票据表a left join dbo.DispatchList b on a.cvouchtype=b.cVouchType and a.cdlcode=b.cDLCode where b.cVouchType is null 查询结果如图7: 在审计过程中,往往涉及到很大而且复杂的数据量,判断数据的正确性和完整性成了审计的一项重要任务。在某些情况下,单纯查错很复杂,但是制作标准表却很简单,我们不妨反向而行之,制作一张标准表作为参照表,然后再对其进行对比,达到化繁为简的目的。标签:数据字典论文; vin论文; substring论文;