劉乾鵬 孫效玉 趙永嬌 張 博 王仁炎
(1.東北大學(xué)資源與土木工程學(xué)院,遼寧 沈陽 110004;2.宇通客車股份有限公司,河南 鄭州 450061;3.內(nèi)蒙古平莊煤業(yè)(集團)有限責(zé)任公司,內(nèi)蒙古 赤峰 024000)
按照國家統(tǒng)計局最權(quán)威解釋,單位是指能以自己的名義擁有資產(chǎn)、發(fā)生負(fù)債、從事經(jīng)濟活動并與其他實體進(jìn)行交易的經(jīng)濟實體,單位又分為政府單位、事業(yè)單位和企業(yè)單位3 類。 單位有大小之分,也有上下級行政隸屬關(guān)系或業(yè)務(wù)隸屬關(guān)系。 如內(nèi)蒙古平莊煤業(yè)(集團)有限責(zé)任公司隸屬于國家能源集團,旗下又包含平莊煤業(yè)母公司、平莊能源兩大業(yè)務(wù)公司(分公司)與9 個礦山實體單位(子公司)。 單位統(tǒng)計的主要職能就是及時、準(zhǔn)確、系統(tǒng)采集、整理、展現(xiàn)與單位生產(chǎn)經(jīng)營活動相關(guān)的數(shù)據(jù)信息,形成完備的單位統(tǒng)計信息數(shù)據(jù)庫,一方面及時、準(zhǔn)確和全面地對單位生產(chǎn)經(jīng)營活動狀況進(jìn)行分析評估,為單位生產(chǎn)經(jīng)營計劃制定提供依據(jù);另一方面需要向上級及行業(yè)主管部門報送相關(guān)統(tǒng)計信息,為國民經(jīng)濟統(tǒng)計提供基礎(chǔ)信息。如平莊煤業(yè)集團分平莊煤業(yè)母公司和平莊能源兩大統(tǒng)計口徑,分別包含1 個、4 個實體單位,兩大統(tǒng)計口徑相互獨立,互不兼容。
集團公司數(shù)據(jù)統(tǒng)計往往涉及下屬多個子單位,根據(jù)對外報送或組織管理的需求,又形成不同的統(tǒng)計口徑,由于企業(yè)的重大戰(zhàn)略調(diào)整、業(yè)務(wù)重組或組織結(jié)構(gòu)變革,難免引起單位名稱及統(tǒng)計口徑變化,有效處理單位名稱及統(tǒng)計口徑變化,是統(tǒng)計信息系統(tǒng)必須解決的問題。 如平莊煤業(yè)集團因戰(zhàn)略調(diào)整需要,于2021年6 月將旗下西二露天礦的名稱變更為蒙東礦業(yè),造成統(tǒng)計系統(tǒng)紊亂;2022 年2 月將平莊煤業(yè)母公司和平莊能源兩大統(tǒng)計口徑合并為平莊煤業(yè)本埠統(tǒng)計口徑,且在新增統(tǒng)計口徑時,需調(diào)整礦山單位在統(tǒng)計口徑中的順序。 因單位名稱及統(tǒng)計口徑變化,造成平莊煤業(yè)集團綜合統(tǒng)計信息系統(tǒng)紊亂。
目前,大多數(shù)研究者主要圍繞統(tǒng)計信息系統(tǒng)的設(shè)計與開發(fā)進(jìn)行研究。 胡海濤[1]設(shè)計開發(fā)了潞安煤炭集團統(tǒng)計信息系統(tǒng),所建立的單位名錄庫涵蓋了集團所有子、分公司的基本信息;趙振倫等[2]通過匯總行的增加以及修改匯總公式的方式,對信息數(shù)據(jù)進(jìn)行追溯與匯總;王艷明等[3]討論了單位固有屬性數(shù)據(jù)較長時間不變下的基礎(chǔ)信息建設(shè),但未說明變化后需要采取的措施。
綜上所述,研究者對統(tǒng)計信息系統(tǒng)的研究應(yīng)用較多,主要分析了基礎(chǔ)信息建設(shè)內(nèi)容,但對基礎(chǔ)信息變化產(chǎn)生問題的分析較少,基礎(chǔ)信息作為統(tǒng)計信息系統(tǒng)中最底層部分,其歷史信息追溯直接影響數(shù)據(jù)統(tǒng)計的效率和質(zhì)量。 本研究對平莊煤業(yè)集團綜合統(tǒng)計信息系統(tǒng)開發(fā)應(yīng)用過程中遇到的單位名稱及統(tǒng)計口徑變化存在的問題進(jìn)行了深入分析,提出了統(tǒng)一的單位編碼規(guī)則和以時間為節(jié)點的歷史信息追溯方法,設(shè)計了統(tǒng)計口徑和單位信息數(shù)據(jù)表結(jié)構(gòu),解決了單位名稱及統(tǒng)計口徑變化追溯問題;定義了多個程序接口,利用Ajax 技術(shù)實現(xiàn)前后端交互[4-5],提高了開發(fā)效率,通用性與擴展性較強,在實際應(yīng)用中取得了良好的效果。
單位名稱及統(tǒng)計口徑變化后存在以下問題:
(1)單位名稱追溯。 在查詢數(shù)據(jù)時,如果不考慮單位名稱變更的時間點因素,則會將變更前后的新舊單位名稱同時顯示,相當(dāng)于兩個不同單位,顯然這是不合理的。 實際要求是以變更時間節(jié)點為界,進(jìn)行單位名稱追溯。 在變更時間節(jié)點之前,用舊單位名稱顯示;在變更時間節(jié)點之后,用新單位名稱顯示。
(2)匯總數(shù)據(jù)集成。 在匯總起止時間跨越單位名稱變更時間點時,如果不對單位名稱進(jìn)行匯總集成處理,則變更前后的單位名稱和數(shù)據(jù)被當(dāng)作兩個獨立單位分別進(jìn)行統(tǒng)計,顯然這是不合理的。 實際要求是在統(tǒng)計匯總某時間段內(nèi)的數(shù)據(jù)時,當(dāng)時間段跨越單位名稱變更時間點時,同一單位下不同單位名稱對應(yīng)的數(shù)據(jù)應(yīng)統(tǒng)一匯總,此時的單位名稱用變更后的新名稱顯示。
(3)統(tǒng)計口徑中單位排序。 統(tǒng)計口徑通常包含多個單位,根據(jù)單位類型的不同,各單位在統(tǒng)計口徑中的排列順序也不同。 顯然,單位名稱追溯過程實際上就是找到同一單位不同單位名稱在變更時間點前后的變化過程,可以通過統(tǒng)一編碼實現(xiàn)對單位的唯一識別。 在此基礎(chǔ)上,以變更時間點為分割,及時修正單位名稱顯示;在數(shù)據(jù)匯總時,對同一編碼下不同時間段內(nèi)的數(shù)據(jù)進(jìn)行綜合匯總,再根據(jù)編碼和時間段內(nèi)最大時間點追溯單位名稱;單位在統(tǒng)計口徑中排序時,根據(jù)選擇單位的先后順序獲取對應(yīng)順序的單位編碼,并對編碼進(jìn)行編號排序。 為此,首先對單位統(tǒng)一編碼,然后對統(tǒng)計口徑和單位信息的數(shù)據(jù)表結(jié)構(gòu)進(jìn)行設(shè)計、程序接口設(shè)計,最后通過軟件編程實現(xiàn)。
除此之外,單位統(tǒng)計人員由于職位變更或工作變動,也存在信息變更問題。 為了保證統(tǒng)計數(shù)據(jù)質(zhì)量,明確統(tǒng)計人員責(zé)任,也需要對單位統(tǒng)計人員信息進(jìn)行追溯。 統(tǒng)計人員的變更和追溯,與單位名稱的變更和追溯在管理與功能上有很多相似之處,因此,按照軟件工程的通用性、實用性和擴展性原則,在數(shù)據(jù)庫設(shè)計與程序開發(fā)時將二者統(tǒng)一處理。
目前,統(tǒng)一編碼已在農(nóng)業(yè)產(chǎn)品[6]、電網(wǎng)設(shè)備[7]、城市交通[8]和資產(chǎn)管理[9]等方面得到有效運用。 從企業(yè)管理角度來講,對生產(chǎn)過程中的資源實體進(jìn)行統(tǒng)一編碼,有助于實現(xiàn)對企業(yè)資源的唯一認(rèn)識;從計算機管理系統(tǒng)角度來看,一個龐大的信息系統(tǒng)需要對所有資源實體進(jìn)行統(tǒng)一編碼,為企業(yè)建立統(tǒng)一的基礎(chǔ)數(shù)據(jù)應(yīng)用環(huán)境,以增強系統(tǒng)各部分集成的融合度[10]。因此,基礎(chǔ)信息統(tǒng)一編碼,是企業(yè)各系統(tǒng)實施過程中的先行者和必要條件。
針對單位信息存在空間、時間和類型上的差異,參考中華人民共和國居民身份證編碼規(guī)則,充分考慮唯一性、簡單易記性、層次性、規(guī)范性和可擴展性等編碼原則,本研究設(shè)計統(tǒng)一的單位編碼規(guī)則,其編碼結(jié)構(gòu)如圖1 所示。
圖1 單位編碼結(jié)構(gòu)Fig.1 Unit code structure
具體編碼規(guī)則如下:
(1)整個編碼結(jié)構(gòu)分為4 段,共13 位,4 段編碼分別為地址編碼、時間編碼、類別編碼以及順序編碼。
(2)地址編碼參考居民身份證的前4 位,其中1~2 位表示單位所在省、自治區(qū)、直轄市代碼,3~4 位表示單位所在地級市、盟、自治州代碼。
(3)時間編碼由4 位數(shù)字構(gòu)成,代表單位創(chuàng)建時間的年份。 時間編碼的使用可減少后續(xù)數(shù)據(jù)表中字段的占用空間。
(4)類別編碼主要區(qū)分單位類型,由2 位字符構(gòu)成,從“01”到“99”。
(5) 順序編碼由3 位字符構(gòu)成,從“001” 至“999”。 當(dāng)單位地址編碼、時間編碼以及類別編碼都相同時,按順序進(jìn)行編碼。
統(tǒng)計口徑至少包含一個單位,單位在統(tǒng)計口徑中的順序由ID 編號決定,其數(shù)據(jù)表結(jié)構(gòu)見表1。
表1 統(tǒng)計口徑數(shù)據(jù)表結(jié)構(gòu)Table 1 Statistical caliber data table structure
根據(jù)單位名稱追溯過程,設(shè)計了多數(shù)據(jù)表與單一數(shù)據(jù)表兩種方案,并開發(fā)了相應(yīng)的應(yīng)用程序,經(jīng)比較采用了單一數(shù)據(jù)表方案。
3.2.1 方案一:單位信息存儲于多數(shù)據(jù)表
將統(tǒng)一編碼的單位存儲于數(shù)據(jù)表中,當(dāng)單位關(guān)閉后,不允許修改任何信息,其數(shù)據(jù)表結(jié)構(gòu)見表2。
表2 單位編碼數(shù)據(jù)表結(jié)構(gòu)Table 2 Unit code data table structure
由于單位統(tǒng)計人員信息比單位名稱變化更頻繁,故將統(tǒng)計人員信息的留檔與更新都存儲于同一張數(shù)據(jù)表,數(shù)據(jù)表結(jié)構(gòu)見表3。
表3 統(tǒng)計人員信息數(shù)據(jù)表結(jié)構(gòu)Table 3 Statistical staff information data table structure
當(dāng)單位名稱變更時,將信息存儲于單獨的數(shù)據(jù)表,數(shù)據(jù)表結(jié)構(gòu)見表4。
表4 單位名稱變更數(shù)據(jù)表結(jié)構(gòu)Table 4 Unit name change data table structure
此方案中單位信息追溯和數(shù)據(jù)匯總的實施步驟如下:
(1)獲取單位編碼
根據(jù)選擇查詢的統(tǒng)計口徑或單位,借助數(shù)據(jù)庫的結(jié)構(gòu)化查詢語言(Structured Query Language,SQL),獲取單位編碼的集合List。
(2)剔除無關(guān)單位編碼
對List 循環(huán)判斷單位是否已創(chuàng)建,從單位編碼中截取第5~8 位的時間編碼來得到單位的創(chuàng)建時間,如果查詢時間小于某單位的創(chuàng)建時間,則從List 中剔除該單位編碼,否則,不對List 進(jìn)行操作。 然后再對List 循環(huán)判斷單位是否關(guān)閉,若都不關(guān)閉,則對List不進(jìn)行操作;若存在某單位關(guān)閉,判斷查詢時間的年份是否大于關(guān)閉時間,如果大于就從List 中剔除該單位編碼,否則,不對List 進(jìn)行操作。
(3)獲取單位名稱及數(shù)據(jù)
創(chuàng)建DataTable 加載數(shù)據(jù)。 對List 逐一循環(huán)判斷是否存在單位名稱變更現(xiàn)象,若某單位不存在名稱變更,則從單位編碼數(shù)據(jù)表中獲得單位名稱String;若某單位存在名稱變更現(xiàn)象,根據(jù)查詢時間追溯單位名稱String,找到變更時間點中小于查詢時間的最大變更時間點對應(yīng)的NewName,若存在則賦值給String,不存在則找到變更時間點中最小變更時間點對應(yīng)的OldName 并賦值給String。 再根據(jù)單位編碼、查詢時間和SQL 語句中的SUM 函數(shù)獲取數(shù)據(jù),最后將單位名稱String 和數(shù)據(jù)添加到DataTable 的數(shù)據(jù)行中。
(4)獲取統(tǒng)計人員信息
根據(jù)選擇單位編碼和查詢時間從統(tǒng)計人員信息數(shù)據(jù)表中加載人員信息。 找到統(tǒng)計人員信息變更時間點中小于查詢時間的最大變更時間點對應(yīng)的信息,若存在則加載此人員信息,若不存在則默認(rèn)人員信息為空。
3.2.2 方案二:單位信息存儲于單一數(shù)據(jù)表
將單位的新舊信息都存儲于同一數(shù)據(jù)表中,關(guān)閉后的單位不能修改任何信息,其數(shù)據(jù)表結(jié)構(gòu)見表5。
表5 單位信息數(shù)據(jù)表結(jié)構(gòu)Table 5 Unit information data table structure
此方案單位信息追溯和數(shù)據(jù)匯總的實施步驟如下:
(1)獲取單位編碼
根據(jù)選擇的統(tǒng)計口徑或單位,從單位信息數(shù)據(jù)表中獲取對應(yīng)的單位編碼集合List。
(2)剔除無關(guān)單位編碼
對List 循環(huán)判斷單位是否已創(chuàng)建,如果查詢時間小于某單位的創(chuàng)建時間,則從List 中剔除該單位編碼,否則不對List 進(jìn)行操作。 再對List 循環(huán)判斷單位是否關(guān)閉,若都不關(guān)閉,則對List 不進(jìn)行操作;若某單位關(guān)閉,則獲取該單位對應(yīng)編碼下時間點最大的時間年份,判斷查詢時間的年份是否大于該時間年份,如果大于就從List 中剔除該單位編碼,否則不對List 進(jìn)行操作。
(3)獲取單位信息及數(shù)據(jù)
創(chuàng)建DataTable 加載數(shù)據(jù),對List 進(jìn)行逐一循環(huán)。首先根據(jù)查詢時間追溯某單位信息,找到該單位編碼下小于查詢時間中最大時間點對應(yīng)的單位信息(此單位信息一定存在),從單位信息中得到此時的單位名稱String;然后根據(jù)該單位編碼、查詢時間和SQL語句中的SUM 函數(shù)獲取數(shù)據(jù);最后將單位名稱String和數(shù)據(jù)添加到DataTable 的數(shù)據(jù)行中。
由上述可知,兩種方案都能實現(xiàn)單位信息追溯和數(shù)據(jù)綜合匯總,即兩種方案的實現(xiàn)效果相同。 但在以下兩方面存在差異:
(1)數(shù)據(jù)庫空間占用
方案一的3 張數(shù)據(jù)表要多于方案二的1 張數(shù)據(jù)表,在實現(xiàn)同等效果的情況下,過多的數(shù)據(jù)表容易造成數(shù)據(jù)庫空間浪費。
(2)系統(tǒng)響應(yīng)時間
由具體實施步驟可以看出,方案一打開關(guān)閉數(shù)據(jù)庫的次數(shù)較多,次數(shù)越多系統(tǒng)響應(yīng)時間越長,信息數(shù)據(jù)加載越慢。 所有報表信息的加載都涉及單位,故以加載平莊煤業(yè)口徑下各礦山單位的原煤產(chǎn)量為例,方案一系統(tǒng)響應(yīng)時間為1 241.43 ms,方案二系統(tǒng)響應(yīng)時間為839.98 ms。 綜上所述,方案二優(yōu)于方案一,故在實踐中方案二更適用。
根據(jù)面向?qū)ο蟪绦蛟O(shè)計原則[11-12],采用C#編程語言定義接口,并在類中實現(xiàn)接口,為方便代碼統(tǒng)一調(diào)用,故設(shè)計以下程序接口:
(1)變更單位信息
接口形式:bool UpdateInfo(string code,string name,string type,string statistician,string telphone,bool close,DateTime time)。
入口參數(shù):單位編碼code、單位名稱name、單位類型type、統(tǒng)計人員statistician 及其聯(lián)系電話telphone、關(guān)閉狀態(tài)close、變更時間點time。
產(chǎn)業(yè)扶貧要加強貧困戶實用技術(shù)的培訓(xùn),特別是從選育、引進(jìn)優(yōu)質(zhì)品種,提高特色農(nóng)產(chǎn)品定向培訓(xùn)水平,將貧困戶納入新型職業(yè)農(nóng)民、新型農(nóng)業(yè)經(jīng)營主體中。如充分利用農(nóng)牧民夜校學(xué)習(xí)相關(guān)農(nóng)業(yè)使用技術(shù);選派優(yōu)秀技術(shù)員到貧困村開展農(nóng)業(yè)實用技術(shù)培訓(xùn);每季度邀請農(nóng)業(yè)方面專家定期開展技術(shù)培訓(xùn),提高有勞動能力的貧困戶技能培訓(xùn)覆蓋面。
出口參數(shù):無。
返回值:成功返回真,否則返回假。
功能說明:將單位信息保存至數(shù)據(jù)表中。 由于變更單位信息就是在保持單位編碼不變的情況下增加一條新的單位信息,故增加初始單位信息和變更單位信息是同樣的接口。
(2)查詢單位名稱
接口形式:string SelectInfo(string code,DateTime time)。
入口參數(shù):單位代碼code、時間time。
出口參數(shù):無。
返回值:單位名稱name。
功能說明:獲取單位名稱。 找到小于time 的最大變更時間點,獲取此時間點的單位名稱。
(3)獲取單位某時間段內(nèi)累計數(shù)據(jù)
接口形式:List
入口參數(shù):單位編碼code,起始時間time1、終止時間time2。
出口參數(shù):無。
返回值:數(shù)據(jù)集合List。
功能說明:獲取某時間段內(nèi)的累計數(shù)據(jù)集合。
(4)設(shè)置統(tǒng)計口徑中單位的順序
接口形式:bool UpdateType(string typeName,string code,int id)。
入口參數(shù):統(tǒng)計口徑名稱typeName、單位編碼code 和排序編號ID。
出口參數(shù):無。
返回值:成功返回真,否則返回假。
功能說明:調(diào)整統(tǒng)計口徑中單位的順序,并將排序結(jié)果保存至數(shù)據(jù)表中。
(5)獲取統(tǒng)計口徑中單位編碼
接口形式:List
入口參數(shù):統(tǒng)計口徑名稱typeName。
出口參數(shù):無。
返回值:單位編碼集合List。
功能說明:獲取單位編碼集合,順序由數(shù)據(jù)表中的ID 字段決定。
通過采用Visual Studio 2015 開發(fā)工具[13]、后端選用ASP. NET 框架[14-15]、前端選用Vue 框架[16]和SQL Server 2016 作為數(shù)據(jù)庫應(yīng)用平臺[17]進(jìn)行程序開發(fā),利用Ajax 技術(shù)實現(xiàn)前后端信息交互,經(jīng)過在平莊煤業(yè)集團綜合統(tǒng)計信息系統(tǒng)中的實際運用,取得了良好的效果。 其中單位信息在數(shù)據(jù)表的存儲情況如圖2 所示,Web 頁面單位管理如圖3 所示,顯示的為最大時間點對應(yīng)的單位信息。
圖2 單位信息存儲情況Fig.2 Unit information storage
圖3 單位管理Fig.3 Unit management
在查詢原煤產(chǎn)量時,名稱變更前后的顯示情況如圖4、圖5 所示,平莊煤業(yè)口徑原煤產(chǎn)量數(shù)據(jù)匯總顯示結(jié)果如圖6、圖7 所示。
圖4 變更前原煤產(chǎn)量顯示情況Fig.4 Display of raw coal output before change
圖5 變更后原煤產(chǎn)量顯示情況Fig.5 Display of raw coal output after change
圖7 變更后數(shù)據(jù)匯總顯示情況Fig.7 Data summary and display after change
統(tǒng)計口徑管理界面如圖8 所示。 統(tǒng)計口徑中單位的管理界面如圖9 所示,左右雙箭頭可以對選中的單位進(jìn)行增加和刪除操作,上下單箭頭可以修改已選擇單位在統(tǒng)計口徑中出現(xiàn)的先后順序。
圖9 統(tǒng)計口徑中單位管理界面Fig.9 Company management interface in statistical caliber
(1)提出了單位統(tǒng)一編碼規(guī)則,實現(xiàn)了單位的唯一身份識別,為單位名稱追溯和數(shù)據(jù)匯總奠定了基礎(chǔ);后續(xù)還可解決由于單位名稱變更帶來的數(shù)據(jù)核對、接口開發(fā)和后期維護(hù)等一系列問題。
(2)提出的以時間為節(jié)點的歷史信息追溯方法,實現(xiàn)了單位名稱和統(tǒng)計人員等信息的追溯,具有較強的通用性和實用性。
(3)單一數(shù)據(jù)表相較于多數(shù)據(jù)表減少了數(shù)據(jù)庫空間占比和字段冗余,縮短了系統(tǒng)響應(yīng)時間,提高了系統(tǒng)性能。
(4)設(shè)計的面向?qū)ο蟪绦蚪涌?減少了開發(fā)人員的工作量,后續(xù)可通過改變程序接口參數(shù)以獲取其他的單位信息和數(shù)據(jù),具有良好的通用性、易維護(hù)性和擴展性。