石巖峰
隨著計算機(jī)審計的逐步開展,審計人員需要采集的電子數(shù)據(jù)范圍也在不斷擴(kuò)大,不僅要采集被審計單位的財務(wù)數(shù)據(jù),還要關(guān)注被審計單位的業(yè)務(wù)數(shù)據(jù),不僅要采集被審計單位內(nèi)部的電子數(shù)據(jù),還要想方設(shè)法取得與被審計單位經(jīng)濟(jì)業(yè)務(wù)相關(guān)單位的外部電子數(shù)據(jù)。電子數(shù)據(jù)采集范圍的擴(kuò)大,隨之帶來了電子數(shù)據(jù)的多樣性,如各種各樣的后臺數(shù)據(jù)庫、千姿百態(tài)的數(shù)據(jù)存儲格式等。針對采集到的電子數(shù)據(jù),要想使其發(fā)揮作用,就要使其符合審計工作的需要。按照審計署對審計工作的要求,要全面把握被審計單位的總體,然后才能進(jìn)一步開展審計工作。因此,要想全面的反映被審計單位的總體情況,電子數(shù)據(jù)的完整性是一個前提條件。
這些年,我們在審計中經(jīng)常遇到一種數(shù)據(jù)存儲格式,需要對其進(jìn)行整理才能使其滿足電子數(shù)據(jù)的完整性。其主要特征如圖1所示:
圖1
1.數(shù)據(jù)存儲時自動分類。對每行數(shù)據(jù)按照各列的值依次進(jìn)行分類,按照順序進(jìn)行存儲。如圖1中按照采購資源來源、出票方、物料三列依次分類。
2.同一類數(shù)據(jù)存儲時,只存儲第一行數(shù)據(jù)的值,以后同類數(shù)據(jù)值均為空。
這樣的數(shù)據(jù)存儲格式,在數(shù)據(jù)存儲時可以節(jié)省大量的存儲空間,使得數(shù)據(jù)庫中冗余數(shù)據(jù)較少。但是,在審計中,我們需要以每一行數(shù)據(jù)為單位,對數(shù)據(jù)進(jìn)行分析,面對如上圖所示的數(shù)據(jù)時,需要把值為空的數(shù)據(jù)還原為其應(yīng)為的值,如:圖1中第二行“采購資源來源”應(yīng)為它上一行的值“從省內(nèi)地方煉油企業(yè)購進(jìn)”。在審計中,面對這樣的數(shù)據(jù)存儲格式,我們可以使用兩個方法進(jìn)行操作,還原數(shù)據(jù)。
一、利用EXCEL表格的IF函數(shù)
EXCEL表格中IF函數(shù)是一個邏輯函數(shù),主要公式為:IF(邏輯表達(dá)式,邏輯表達(dá)式值為真時的值,邏輯表達(dá)式值為假時的值)。
首先,在需要處理的一列數(shù)據(jù)后面插入一列,用于存儲還原后的值,如圖2中C列。
圖2
其次,在第一行數(shù)據(jù)與C列相交的單元格內(nèi)編寫IF函數(shù),具體為:IF(B2<>” ” ,B2,Cl)。這個語句表示:如果B列中的值不為空,則C列中的值為B列中的值,如果為空,則值為C列中前一行的值。
最后,把此IF函數(shù)在C列中各行進(jìn)行復(fù)制,這樣C列中就是B列還原后的值??梢允褂眠x擇性粘貼把C列中IF函數(shù)刪除,只保留最終的值。
二、利用SQL語句中的游標(biāo)功能
當(dāng)遇到數(shù)據(jù)量很大的情況,像第一種方法在EXCEL表格中進(jìn)行處理就很難實現(xiàn)。如:EXCEL 2007以前的版本最多支持65 536行數(shù)據(jù),如果使用EXCEL 2007以上的版本,當(dāng)數(shù)據(jù)量上萬行時,在新增加的列中復(fù)制公式就是一個很費時間和精力的工作。因此,我們可以通過把數(shù)據(jù)導(dǎo)入到SQL SERVER數(shù)據(jù)庫中,利用SQL語句中的游標(biāo)功能進(jìn)行處理。
首先,將采集后的數(shù)據(jù)導(dǎo)入SQL SERVER數(shù)據(jù)庫中。
其次,利用SQL語句的游標(biāo)功能處理數(shù)據(jù)。下面的SQL語句以圖1中處理列“采購資源來源”為例。
第一步:定義游標(biāo)。此游標(biāo)采集列“序號”和“采購資源來源”的值。
DECLARE游標(biāo)名CURSOR
FOR SELECT序號,采購資源來源FROM數(shù)據(jù)表名
第二步:打開游標(biāo),同時聲明幾個變量,用于臨時存儲數(shù)值。
OPEN游標(biāo)名
DECLARE @source char(100)
——定義source存儲列“采購資源來源”的值不為空時的數(shù)值,也就是碰到某行中列“采購資源來源”值為空時,需要將該字段值替換為source的值
DECLARE @sourcenext char(100)
——定義sourcenext為當(dāng)前取得某行的字段值,即要處理的這一行數(shù)據(jù)中列“采購資源來源”的值
DECLARE @num int
——定義num為序號,存儲列“序號”的值
第三步:利用whi1e循環(huán)對數(shù)據(jù)進(jìn)行處理。
FETCH FROM游標(biāo)名INTO @num,@sourcenext
——提取列“序號”和“采購資源來源”的值
SET @source=@sourcenext
FETCH FROM游標(biāo)名INTO @num,@sourcenext
WHILE @@fetch_status=0
BEGIN
IF @sourcenext IS NULL
BEGIN
UPDATE數(shù)據(jù)表名
SET采購資源來源=@source WHERE序號=@num
END
ELSE BEGIN SET @source=@sourcenext
FETCH FROM游標(biāo)名INTO @num,@sourcenext
END
——利用whi1e循環(huán)對該電子數(shù)據(jù)的每一行都進(jìn)行處理,對列“采購資源來源”值為空的情況,都更新為變量source的值,使該行中列“采購資源來源”的值更改為本來的值。
第四步:關(guān)閉游標(biāo),釋放游標(biāo)。
CLOSE游標(biāo)名
DEALLOCATE游標(biāo)名
最后,經(jīng)過上述SQL語句的處理,列“采購資源來源”的值得到了更新,變?yōu)榱嗣啃卸加幸粋€不為空的值。下一步審計人員就可以根據(jù)該數(shù)據(jù)進(jìn)行分析和審計。
在實際的審計工作中,當(dāng)我們采集到的數(shù)據(jù)符合上述的數(shù)據(jù)存儲格式時,可以根據(jù)數(shù)據(jù)的實際情況靈活運用EXCEL表格IF函數(shù)或者SQL語句的游標(biāo)功能進(jìn)行處理,不必拘泥于一種方法。
(作者單位:審計署駐京津冀特派員辦事處)