铁路运输统计分析系统的设计与实现
2014-04-29任雯
任雯
摘 要 建立基于数据仓库及OLAP分析服务技术的铁路运输统计分析系统可以更有效地实现跨平台数据集中、以及铁路运输统计信息分析决策支持,是铁路信息化建设的重要组成部分。本分析系统将不同时期的各种运输统计系统,自1998年南昌局建局后独立统计以来的数据做为源数据,通过提取、转化和加载完成数据清洗,转化为有效、完整、可用的数据仓库中的数据,为铁路运输生产的分析决策提供数据支持。采用Sybase IQ数据仓库,选择Microsoft Analysis Manager作为OLAP分析服务,生成多维数据集,通过Excel数据透视表作为前端展示工具,建成铁路运输统计分析系统,辅助企业运输生产决策。
关键词 交通运输 铁路运输 运输统计 ETL转换
中图分类号:TP311.52 文献标识码:A
1研究背景及目的
铁路局在自身发展过程中,积累了大量的客运、行包、货运等数据,为利用这些数据发掘有价值的信息,需要建立一个面向主题的、集成的、稳定的、不同时期的数据集合,即数据仓库。铁路运输统计分析系统采用这一技术解决了铁路局现有数据存储形式已经不能满足信息分析的问题,存储了大量的数据实现了原始数据的整理和挖掘。
传统的数据库应用系统多为OLTP联机事务处理,并不能很好地支持分析决策。而铁路现有的数据库系统正是OLTP联机事务处理型的数据库应用系统,在铁路运输生产市场化的今天,对运输生产的分析决策,市场预测,优化运输组织,OLAP联机分析处理越来越重要。现阶段传统信息系统与决策分析营养需求才能在技术差距,铁路运输企业内部各信息系统中,经过长期应用、分割、累积和沉淀了大量不同存储格式的数据,这是一笔宝贵的决策信息财富。
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)在经营分析决策与分析预测方面:可有效提供客货运输工作量变化与分布;可预测客货运输收入变化趋势;可揭示运输工作量波动主要原因和指标构成;可分析新线开通运能运量对比历史测算;可对不同的运输线路,分析旅客列车种类、运输类别、旅客席别、客流走向等各种分析成分,揭示引起客货运输量变化情况的主要关联因数。