任雯
摘 要 建立基于數據倉庫及OLAP分析服務技術的鐵路運輸統計分析系統可以更有效地實現跨平臺數據集中、以及鐵路運輸統計信息分析決策支持,是鐵路信息化建設的重要組成部分。本分析系統將不同時期的各種運輸統計系統,自1998年南昌局建局后獨立統計以來的數據做為源數據,通過提取、轉化和加載完成數據清洗,轉化為有效、完整、可用的數據倉庫中的數據,為鐵路運輸生產的分析決策提供數據支持。采用Sybase IQ數據倉庫,選擇Microsoft Analysis Manager作為OLAP分析服務,生成多維數據集,通過Excel數據透視表作為前端展示工具,建成鐵路運輸統計分析系統,輔助企業運輸生產決策。
關鍵詞 交通運輸 鐵路運輸 運輸統計 ETL轉換
中圖分類號:TP311.52 文獻標識碼:A
1研究背景及目的
鐵路局在自身發展過程中,積累了大量的客運、行包、貨運等數據,為利用這些數據發掘有價值的信息,需要建立一個面向主題的、集成的、穩定的、不同時期的數據集合,即數據倉庫。鐵路運輸統計分析系統采用這一技術解決了鐵路局現有數據存儲形式已經不能滿足信息分析的問題,存儲了大量的數據實現了原始數據的整理和挖掘。
傳統的數據庫應用系統多為OLTP聯機事務處理,并不能很好地支持分析決策。而鐵路現有的數據庫系統正是OLTP聯機事務處理型的數據庫應用系統,在鐵路運輸生產市場化的今天,對運輸生產的分析決策,市場預測,優化運輸組織,OLAP聯機分析處理越來越重要?,F階段傳統信息系統與決策分析營養需求才能在技術差距,鐵路運輸企業內部各信息系統中,經過長期應用、分割、累積和沉淀了大量不同存儲格式的數據,這是一筆寶貴的決策信息財富。
2系統的架構與流程
2.1系統架構
本系統采用“Sybase IQ數據倉庫 + SQL server 分析服務 + Excel透視表分析展示”體系結構,構建分析系統應用。通過分析服務、借助分析展示工具,可以對存儲在數據倉庫中的分析指標,生成歷史時間范疇內、各種線路上產生的、全部不同的到達與發送地區的、各類貨物品類、各種級別的旅客列車、等等其他不同查詢視角屬性的統計分析指標變化情況。
本系統由四部分組成:分析數據源、數據倉庫、分析服務器和分析服務工具、客戶端分析展示工具。見圖1。
圖1 系統架構圖
2.2系統流程與模塊
根據客運精密統計智能分析系統的用戶需求及業務流程,流程如圖2,并將系統的功能劃分為如下模塊:
(1)事實表與維度表的ETL數據轉換模塊;
(2)創建多維數據集模塊;
(3)創建Excel透視表模塊。
圖2 系統流程圖
事實表與維度表的ETL數據轉換模塊:主要包含維度字典表、客票報表事實表、行包報表事實表、客票壓縮事實表行包壓縮事實表的清洗與轉換,并將這些維度表和事實數據表導入到Sybasse IQ數據庫。
創建多維數據集模塊:多維數據集是聯機分析處理 (OLAP) 中的主要對象,是一項可對數據倉庫中的數據進行快速訪問的技術。多維數據集是一個數據集合,通常從數據倉庫的子集構造,并組織和匯總成一個由一組維度和度量值定義的多維結構。
創建Excel透視表模塊:數據透視表是一種可用于OLAP分析的交互式動態表格,可以完成對大量數據快速匯總和快速查看不同列表的數據統計結果,并能打印或圖形化統計結果,能多視角、多層次、快速便利的分析、組織數據。例如,可對統計結果建立列聯表、計算平均數、計算百分比、計算標準差,建立新的數據子集等。在建立好數據透視表后,還可以重新安排數據透視表,以便從多視角、多層次查看數據。連接已創建好的OLAP多維數據集,創建用戶需求的透視表。
3ETL設計
ETL是將業務系統中的數據經過抽取、清洗轉換之后加載到數據倉庫的過程。ETL是該項目中的重要環節。ETL的質量主要表現為正確性、完整性、一致性、有效性的等幾個特性。影響ETL質量的原因很多,主要包括:業務系統不同時期之間的數據結構不一致,業務系統不同時期的業務過程不一致,業務系統不同時期的數據完整性不一致等。
ETL的主要方式有空值處理、規范數據格式處理、拆分數據處理、驗證主外鍵處理等。
(1)空值處理可用兩種方式,一是直接在初始化時賦一個初始值,二是更具條件賦予不同的值,如在本系統中客票壓縮表中的部分運類取值為空,就在讀取客票壓縮表前將運類值先初始化為0,然后根據客票壓縮表中的運類數值重新取值。
(2)規范數據格式處理。對于不同時期的業務系統中,數據源中的時間、數值、字符等數據進行規范化,確保數據格式一致性,如有的系統中ny這個字段的命名格式是data型,有的系統中是char型;盡管都是char型,有的是char(8),有的是char(6);就算都是char(8),有的格式是“YYYYMMDD”,有的格式則是“MMDDYYYY”,這時就需要進行其規范數據格式。在數據倉庫中,退票人數、票額都以負數表示,而業務系統中,退票人數、票額都以正數表示,那在轉換過程中就需要對此處理。如:
if (kpys. pl.equals("T"))
{
kpys.rs = -kpys.rs;
kpys.je = -kpys.je;
}
還有一種情況是在字符串類型時,頭尾存在空格,也會對數據一致性產生影響,這是我們就通過trim()函數去除兩端的空格,或者用ltrim()函數去除左邊空格,或者用rtrim()函數去除右邊的空格,這也是一種規范數據格式的方式。如一般在數據轉換過程中每個字段為了確保兩端不存在空格,會使用類似kpys.fzdm = kpys.fzdm.trim()這樣的語句確保數據格式規范。
(3)拆分數據處理。拆分數據就是根據業務需求對字段進行分解,如某車站的統計碼為“15036”,其中,最前面2位“15”就是路局的統計代碼,我們就可以從拆分這個字段獲取路局統計代碼,程序如下代碼進行數據拆分操作。
Kpys.ljdm=kpys.fzdm.substring(0, 2);
(4)驗證主外鍵處理。建立ETL轉換過程中的主外鍵約束,對無依賴性的非法數據,可替換或導出到錯誤數據文件中,保證記錄正確。在本系統中,主要有2種方式確保數據主外鍵正確。
①確保事實表與維度表數據的主外鍵一致
在轉換事實表數據前,先載入維度表數據,轉換事實表數據時,對字段所關聯的維度表數據進行驗證,如下例是在轉換發站字段時,對站名字典維度表數據先進行獲取,如不存在該發站的站名字典維度表數據,則提示“非法發站代碼:”
zm = Zmzd.db_GetZmzdbyZmdm(kpys.fzdm);
if (zm == null)//發站在站名字典中不存在
{
fKpys.fzid = -1;
ErrorMsg err = new ErrorMsg();
err.time = AMTime.GetCurTime();
err.cwbh = "2";
err.cwlx = "非法發站代碼";
err.cwms = "站名代碼為:" + kpys.fzdm;
ErrorMsg.WriteLog(err, fileLog);
}
else
{
fKpys.fzid = zm.czid;
}
②確保維度表與維度表之間的主外鍵一致
由于維度表之間有些存在層次關系,也存在主外鍵一致性問題,可通過數據校驗中的表間校驗,查看維度表之間的主外鍵是否一致。表間校驗,校驗維度表的表間關系,如站名字典維度表中的cwdid,檢查在其關聯的車務段字典維度表中是否存在,并反饋表內校驗和表間校驗的校驗結果,確保維度表轉換正確。
4系統應用舉例
通過建立客運堵漏保收效益指標分析模型、貨物運輸工作量變動監測分析模型,以及專項統計決策模型設計,能夠提供運輸經營決策統計依據,及早發現和查明運量指標異常變化情況。
(1)在客運補票收入分析方面:可將車站旅客售票量、售票收入、車站補票量、旅客列車補票量、補票車站、補票列車、列車車次范圍、列車擔當局、列車補票運行區段、漏收問題單位等各項分析信息有機聯系起來;可設立分析模型,早期預警路局客運堵漏保收工作收效情況,確認漏收客流流向的旅客列車和客車擔當企業,獲取售票收入流失程度信息。
(2)在貨物運輸工作量變動監測方面:可通過分析模型,及早監控各運輸企業在局管內發生的分品類、運類、線路、發到地區、車種、時期變化等,以及貨運工作量對路局運輸經營效益的影響程度;可把直通清算資料、與運輸重車監測資料有機聯系起來。
(3)在經營分析決策與分析預測方面:可有效提供客貨運輸工作量變化與分布;可預測客貨運輸收入變化趨勢;可揭示運輸工作量波動主要原因和指標構成;可分析新線開通運能運量對比歷史測算;可對不同的運輸線路,分析旅客列車種類、運輸類別、旅客席別、客流走向等各種分析成分,揭示引起客貨運輸量變化情況的主要關聯因數。