企业数据应用工具的选择
一、 为什么要选择工具
企业与机关、院校有于最大的不同就是内部人员的素质层次不一,而因很多原因不能要求所有的人都可以有很高的水平。记着我所接触的一个还算是十分新的企业里,在企业里会格盘就算是计算机高手了。这也从一个方面表现出了企业应用的滞后性。
正是在这种环境里,为了叫我们一线人员能够不改变其原有工作习惯的条件下完成工作。我们也进一步去体会办公自动化产品本身的高度集成与开放性。而这一切的基础都源于odbc,下面将仔细说明这一切。
二、可爱的odbc、缓慢的odbc
odbc(open database connectivity)是由微软公司提出的一个用于访问数据库的统一界面标准,随着客户机/服务器体系结构在各行业领域广泛应用,多种数据库之间的互连访问成为一个突出的问题,而odbc成为目前一个强有力的解决方案。odbc之所以能够操作众多的数据库,是由于当前绝大部分数据库全部或部分地遵从关系数据库概念,odbc看待这些数据库时正是着眼了这些共同点。虽然支持众多的数据库,但这并不意味odbc会变得复杂,odbc是基于结构化查询语言(sql),使用sql可大大简化其应用程序设计接口(api),由于odbc思想上的先进性,而且没有同类标准或产品与之竞争,因而越来越受到众多厂家和用户的青睐。目前,odbc已经成为客户机/服务器系统中的一个重要支持技术。
在1994年时odbc有了第一个版本,这种名为open data base connection(开放式数据库互连)的技术很快通过了标准化并且得到各个数据库厂商的支持。odbc在当时解决了两个问题,一个是在windows平台上的数据库开发,另一个是建立一个统一的标准,只要数据厂商提供的开发包支持这个标准,那么开发人员通过odbc开发的程序可以在不同的数据库之间自由转换。这对开发人员来说的确值得庆贺。
odbc参照了x/opendata management: sql call-level interface和iso/ice1995 call-level interface标准,在odbc版本3.x中已经完全实现了这两个标准的所有要求。所以本书所有内容都基于odbc 3.0以上版本。
最开始时支持odbc的数据库只有sql server,access,foxpro,这些都时微软的产品,他们能够支持odbc一点也不奇怪,但是那时候windows的图形界面已经成为了客户端软件最理想的载体,所以各大数据厂商也在不久后发布了针对odbc的驱动程序。
在windows 3.x和windows 95的时候odbc并不作为系统的组成部分出现,使用前必须另行安装。但到了windows 98的时候,当你安装好操作系统后,odbc不需要另行安装了,因为它已经成为了操作系统的一部分。这对很多拒绝odbc的人来说又少了一个借口。
在远程数据访问方面,很多程序员都采用了odbc的方式进行方式,其方便性、简易性都是十分突出的。但,其效率的低也成了odbc致命的缺点。所以缓慢的odbc在对效率要求比较高的时候,都被放弃掉了。而我们只是对远程sqlserver数据库进行有限前台的访问,而访问的数据量相对来说也不是很大,而是在服务器上处理过后,才提出来的。所以odbc对于我们而言自然可以说是可爱的了。
三、 开放的桌面数据
叫你的报表动起来,这好像是句疯话。但,我们今天在完备的基础网络建设帮忙下,已经可以实现这一点了。
伴着信息化建设的深入,数据已经成为了生产、财务、管理等几个部门最重要的资源,同时,全部的业务资源都在一个平台上进行集成后,数据从量上和种类上都有了一个很大的飞跃,新的技术与管理要求,对数据分析的要求也有了进一步的要求。在这种发展背景下,如何叫我们可以进一步更好地使用数据,如何进一步通过数据提炼出信息,已经成为一个很重要的问题。而这些问题中的第一步就是如何保证数据是正确的。为了这一点唯一的方法就是尽量少地人为参与到数据的转换、分析、表现、统计以及报表的合成。
微软公司的office产品系统因为其面界友好、易于华人的应用与操作等方面的优点,广泛地应用于我们现在的企业与个人电脑里。而其中的excel可以说是数据统计中的一把利剑。以下就是通过excel中的数据透视表来统计与分析产品关键部件的一个实例
企业的应用的要求:
主管生产的厂长,要求生产处提供产品中关键部件的日、月入库量,以便可以推算出现实中生产能力。
软件选择与方案选择:
采用excel,因为企业中多数人都了解其用法。采用前台表现形式为数据透视表与透视图。如图五、图六所示。
图五
图六
数据透视表是一种交互式工作表,用于对已有数据清单、表和数据库中的数据进行汇总和分析。通过这种方式,可以很方便地进行数据的组织、汇总与分析。特别是数据透视图的使用,进一步受到了管理层的青睐。
而这种数据透视图是基于非olap数据源的,只是通过odbc联系把远程数据库中的做了的数据,经过microsoft query的数据操作,导入到前台的。这种方式有一个缺点就是数据是基于远程服务器的,每一次要使用时必须进行数据更新。
而这种方式还有一种方法进行改革,可以进一步实现其自动化。其过程是下面的两个过程。
1、 从sqlserver中自动向本地导出数据,格式为excel如图七来设计包。
图七
此时,数据是导入到本地sheet1中的
2、 改变数据透视表与透视图是基于外部数据的这种数据依存关系,改为基于本地sheet1中的数据。
这样就能通过地远程数据库中自动调用数据包,来自动更新前台的数据而这样一来,数据透视表与透视图也进一步地自动处理了。
通过在远程sqlserver数据库中包的设计与作业中调度包的功能的使用,就可以实现前台数据的动态性,自然现在桌面上的报表也就动了起来。无疑桌面数据工具的动态性与开放性进一步为数据的动态性与整体性提供了一个坚实的实现基础。
以上的产品只是微软的office2000,而在微软新的办公产品中提出的system project又进一步强调了桌面工具的动态性与互联性。进一步提出了部门级门户与企业门户的思想,进一步加强了企业数据内部传输的整体性与完整性。伴着信息化技术与计算机技术地进一步发展,功能上越来越完整的产品会进一步为我们企业的信息化建设提供更好的解决方案的。
四、最好的后备力量——sqlserver服务器
可能这个标题会引来很多的非议,特别是来自oracle的呼声。现在国内有很多大型数据库可以选择,但基于成本与技术人员的素质,微软公司的sqlserver2000仍然有着很大的市场比例,但随着sap公司客户地进一步扩展,oracle公司也是开始主动与客户进行交流,开始了基础扫盲了。其公司网站上公司开始搞免费的21天培训主要就是教大家如何使用oracle,和如何做一个合格的oracle数据库管理人员。这也从侧面表现了中国市场对甲骨文和微软两家公司都是十分有价值的。
但,我所接触的企业后台数据库目前应用的是sqlserver。所以以下以sqlserver为例,介绍一下sqlserver实用的几个方面。希望可以给大家的工作提供帮忙。
4.1给你一个爱它的理由
sql server作为微软在windows 系列平台上开发的数据库,一经推出就以其易用性得到了很多用户的青睐,相信大多数将自己的业务建立在windows平台上的用户都会对它有相当的亲切感。区别于foxpro、access小型数据库,sql server是一个功能完备的数据库管理系统。它包括支持开发的引擎、标准的sql语言、扩展的特性(如复制、olap、分析)等功能。而像存储过程、触发器等特性,也是大型数据库才拥有的。
sql server 2000往往成为首选的理由
上手容易
话分两头,如果您的企业至今还未购置数据库,其中一个主要的原因可能就是认为它不好上手,那么,从sql server开始吧。毕竟,大多数的中小企业日常的数据应用是建立在windows平台上的。由于sql server与windows界面风格完全一致,且有许多"向导(wizard)"帮助,因此易于安装和学习,有关sql server的资料、培训随处可得,并且目前国内具有mcdba认证的工程师不在少数。
从另一个角度来讲,学习sql server是掌握其他平台及大型数据,如oracle,sybase,db/2的基础。因为这些大型数据库对于设备、平台、人员知识的要求往往较高,而并不是每个人都具备这样的条件,且有机会去接触它们。但有了sql server的基础,再去学习和使用它们就容易多了。it行业的实践经验充分证明了这一点。
兼容性良好
由于今天windows操作系统占领着主导地的位,选择sql server一定会在兼容性方面取得一些优势。另外,sql server 2000 除了具有扩展性,可靠性以外,还具有可以迅速开发新的因特网系统的功能。尤其是它可以直接存贮 xml 数据,可以将搜索结果以 xml格式输出等特点,有利于构建了异构系统的互操作性,奠定了面向互联网的企业应用和服务的基石。这些特点在.net 战略中发挥着重要的作用。
相对于7.0的忧越性
microsoft sql server 2000是在sql server 7.0的基础上对性能、可靠性、质量以及易用性进行了扩展。sql server 2000中包含许多新特性,这些特性使其成为针对电子商务、数据仓库和在线商务解决方案的卓越的数库平台。其增强的特性包括对丰富的扩展标记语言(xml)的支持、综合分析服务以及便捷的数据库管理。
电子商务
在使用由microsoft sql server 2000关系数据库引擎的情况下,xml数据可在关系表中进行存储,而查询则能以xml格式将有关结果返回。此外,xml支持还简化了后端系统集成,并实现了跨防火墙的无缝数据传输。你还可以使用hypertext transfer protocol(超文本传输协议,http)来访问sql server 2000,以实现面向sql server 2000数据库的安全web连接和无须额外编程的联机分析处理(olap)多维数据集。
数据仓库
microsoft sql server 2000非常明显的改进就是增加了olap(联机分析处理)功能,这可以让很多中小企业用户也可以使用数据仓库的一些特性进行分析。olap可以通过多维存储技术对大型、复杂数据集执行快速、高级的分析工作。数据挖掘功能能够揭示出隐藏在大量数据中的倾向及趋势,它允许组织或机构最大
限度的从数据中获取价值。通过对现有数据进行有效分析,这一功能可以对未来的趋势进行预测。
增强的在线商务
microsoft sql server 2000简化了管理、优化工作,并且增强了迅速、成功的部署在线商务应用程序所需的可靠性和伸缩性。其中,用以提高可靠性的特性包括日志传送、在线备份和故障切换群集。在伸缩性方面的改进包括对多达32颗cpu和64 gb ram的支持。通过自动优化和改进后的管理特性--诸如数据文件尺寸的自动管理、基于向导的数据库拷贝、自动内存管理和简化的故障切换群集安装与管理,在线商务应用程序能够被迅速部署并有效管理。
利于构筑"敏捷性商务"
所谓"敏捷性商务" 就是能够打破内部和外部的商业界限,对迅速改变的环境做出快速反应。。微软已经与关键的合作伙伴建立起了战略关系,创造出了能够与许多供应商的产品实现整合的解决方案,因而企业用户并不需要做出"要么完全接受,要么全部不要"的承诺。在部署解决方案的过程中,企业用户不一定要拆除原有的设备从头。敏捷商务让企业用户能够充分利用现有的系统,自主决定所需的硬件和软件解决方案以及由谁来提供,伸缩自如、游刃有余。
现在中小企业应用数据库的不可能超过sqlserver的能力范围,而其东家微软公司操作系统强大的市场份额也不由地要求您去选择sqlserver,同时其界面的友好、操作的简易性也是同类的dbms很难达到的了。
4.2数据库应用的基础——表
表是数据库应用基础,也是信息化软件设计的核心部分之一。记的我曾看到的国内一种物流软件(这里不好提到产品的名字)。它的后台数据库表的设计就是相当地糟糕。在前台用的一个同一个字段,他会用在不同的表中,使数据库的维护工作十分烦琐。可以看出其产品在设计时并没有充分考虑到数据库设计的三范式问题。也没有很好地理解视图与表的关系。
谈到表,大家都会很容易地生成很多的表,也设计过很多的表,而对于数据库中的范式的要求,可能大家都不曾注意过,而在一线应用中,范式的要求才发挥了其作用。这为系统上马后数据库地维护工作,提供了很大的方便。在一个数据库建立的表,特别是基础表(注:基础表:是指用于唯一用于表述信息系统中各个方面的元素的属性的表,如我们的供应商表、经销商表等)通过建立关系与表的完整性,来保证数据库中各种表之间的数据唯一与数据统一性。而这一点就在很多的信息系统设计时,出现过问题,以至于给后期的企业人员进行数据维护造成了很大的麻烦。
同时,在表中设计触发器也一个十分关键的方面,这一点特别在设计系统前台的时候会显出特别地重要。特别是对数据进行插入、更新、删除操作时,通过触发器可以进一步调用服务器,使服务器上可以自动地做些一些相关联的操作。
提到表就不得不说说dts包了。dts是data transform system的缩写,也是sqlserver中提供很重要一个数据转换工具。通过设计dts包,可以更有效地将数据转换工作变的方便与自动化。其界面设计如图八所示
图八
这就是一个将dbf数据导入sqlserver并在导入时将sqlserver中的历史数据先删除的一个dts包。这个关键就在dbf数据文件地存放路径。特别是当你操作的计算机而不是服务器时,一定要搞清楚在服务器上的数据存放的路径。因为设计时,通过网络在服务器上操作,但此时服务器设计的路径是认为是本地的,而非是服务器的。所以这个问题一定要加以注意,这一点与数据库备份的问题正好相反。数据备份认为的数据存放路径是服务器上的路径而非本地的。
一个包设计好后,如果你在本地去执行服务器上包又会存在两个方式的两个数据服务方式,将在下面谈dts包中加以说明。
4.3最好用的伙伴——视图
关于表说了这么多,很多人一定认为如果不设计那么多的表,我怎么表现数据与不同表中的数据呢??视图,一个最好用的伙伴,一个助手。通过我的经验来讲视图在数据应用中的地位十分地突出,其与表的关系就如同地基与建筑物的关系一样。表就是那些地基而视图就是建筑物。叫我们看到的,美丽与雄伟的建筑物。
谈到视图的作用,它本身不仅仅是把不同表通过字段联系起来,而且通过期分组、分层计算,可以很多好的统计、监管和分析的作用。以下将通过一个例子来说明这表与视图的关系。
企业需求:
现代的制造业竞争激烈,同时原材料市场上也一度走高。所以几乎所有的企业都采用的是按订单生产,减少或者消灭库存。在这样一个背景下,企业就需要了解自己的完成能力。四班mrpii在生产管理上就是通过在生产流程中设计虚拟库位来反应生产的能力。现在要跟踪的关键部件的入库情况。(编外话:在上面谈到excel的作用时已经提到了关键件,这种方法是在五大件的基础上,发现的一种更实用的技术。其核心与不同就在于其在服务器已经开始设计这个考察方案了,有很大的推广价值。)
设计思想:
先建立一个要考核的关键部分表key_item_cal,通过部件码与入库表h_morve相联接。以key_item_cal为基准,同时,在设计上要求一次性生成明细与汇总,所以表结构如图九所示。
图九
其表中的数据的特点如图十所示。
图十
看到这一张表,一定会有会为什么会有两个编码字段:key_item,style还有就是为什么所有的汇总的key_item全为1其实这就是这个表的特点所在,因为我们最后的表现时是要在一张表里表现了前明细,后汇总,而汇总与明细也要相接的,就是如图十一所示的结构。
图十一
通过设计两个编码字段,第一个字段可以用于联接入库表,通过条件把编码为1的去掉,而第二个字段就是为了分组汇总,通过个结构,可以很好地进行关键部件地统计与分析。
其结果的原代码为:
select dbo.key_item.key_item_name as item_name,
dbo.h_morve.qty_recvd1 as quantity,
dbo.key_item.style as style
from dbo.key_item left outer join
dbo.h_morve on dbo.key_item.key_item = dbo.h_morve.item
where (dbo.key_item.key_item <> 1)
union (
select max(dbo.key_item.key_item_name) as item_name,
sum(dbo.h_morve.qty_recvd1) as quantity,
dbo.key_item.style as style
from dbo.key_item left outer join
dbo.h_morve on dbo.key_item.key_item = dbo.h_morve.item
group by dbo.key_item.style)
order by dbo.key_item.style asc
这个算法,在sqlserver提供的视图向导中,不支持union的。而采用命令方式生成视图时,最后的一个按序又不支持。而不用style编序,最终的数据表现效果又不出来。所以最终采用的方法是存储过程,生成key_itm的存储过程。其代码如下:
create proc key_itm
as
select dbo.key_item.key_item_name as item_name,
dbo.h_morve.qty_recvd1 as quantity,
dbo.key_item.style as style
from dbo.key_item left outer join
dbo.h_morve on dbo.key_item.key_item = dbo.h_morve.item
where (dbo.key_item.key_item <> 1)
union
(
select max(dbo.key_item.key_item_name) as item_name,
sum(dbo.h_morve.qty_recvd1) as quantity,
dbo.key_item.style as style
from dbo.key_item left outer join
dbo.h_morve on dbo.key_item.key_item = dbo.h_morve.item
group by dbo.key_item.style)
order by dbo.key_item.style asc
go
在通过dts包的设计生成两个数据最终表现形式,一个是excel表格,另一个是key_item_check的sqlserver表。这样通过每天自动调用dts包就可以自动生成excel和sqlserver中key_item_check的表。以供数据分析人员与一线生产统计的使用。其包结构如图十二
图十二
sqlserver2000中提供一个很好的视图设计平台,其简单方便,在对于两个表的内联、外联等工作都十分的容易。但其提供的向导本身就存着限制条件。如union关键字不能在视图的设计平台中用,还有如case这一类的条件也不能在设计平台中使用。这一点就大大打折了视图的用图。相对而言,对于一个精通sql语句的人员而言,使用命令来生成视图会更方便一些,特别是如数据透视表这种比较复杂的数据库应用如下面的例子:
select
parent,max(parnt_desc) as parnt_desc,
max(case component when 'wc[r]101' then comp_desc else '' end) as 'wc[r]101',
max(case component when 'wc[r]102' then comp_desc else '' end) as 'wc[r]102',
max(case component when 'wc[r]103' then comp_desc else '' end) as 'wc[r]103',
max(case component when 'wc[r]104' then comp_desc else '' end) as 'wc[r]104',
max(case component when 'wc[r]105' then comp_desc else '' end) as 'wc[r]105',
max(case component when 'wc[r]106' then comp_desc else '' end) as 'wc[r]106',
max(case component when 'wc[r]107' then comp_desc else '' end) as 'wc[r]107',
max(case component when 'wc[r]108' then comp_desc else '' end) as 'wc[r]108',
max(case component when 'wc[r]109' then comp_desc else '' end) as 'wc[r]109',
max(case component when 'wc[r]10b' then comp_desc else '' end) as 'wc[r]10b',
max(case component when 'wc[r]10c' then comp_desc else '' end) as 'wc[r]10c',
max(case component when 'wc[r]10d' then comp_desc else '' end) as 'wc[r]10d',
max(case component when 'wc[r]10e' then comp_desc else '' end) as 'wc[r]10e',
max(case component when 'wc[r]201' then comp_desc else '' end) as 'wc[r]201',
max(case component when'wc[r]202' then comp_desc else '' end) as 'wc[r]202',
max(case component when'wc[r]203' then comp_desc else '' end) as 'wc[r]203',
max(case component when'wc[r]204' then comp_desc else '' end) as 'wc[r]204',
max(case component when'wc[r]205' then comp_desc else '' end) as 'wc[r]205',
max(case component when'wc[r]206' then comp_desc else '' end) as 'wc[r]206',
max(case component when'wc[r]207' then comp_desc else '' end) as 'wc[r]207',
max(case component when'wc[r]208' then comp_desc else '' end) as 'wc[r]208',
max(case component when 'wc[r]301' then comp_desc else '' end) as 'wc[r]301',
max(case component when 'wc[r]302' then comp_desc else '' end) as 'wc[r]302',
max(case component when 'wc[r]303' then comp_desc else '' end) as 'wc[r]303',
max(case component when 'wc[r]304' then comp_desc else '' end) as 'wc[r]304',
max(case component when 'wc[r]305' then comp_desc else '' end) as 'wc[r]305',
max(case component when 'wc[r]306' then comp_desc else '' end) as 'wc[r]306',
max(case component when 'wc[r]307' then comp_desc else '' end) as 'wc[r]307',
max(case component when 'wc[r]308' then comp_desc else '' end) as 'wc[r]308',
max(case component when 'wc[r]309' then comp_desc else '' end) as 'wc[r]309',
max(case component when 'wc[r]501' then comp_desc else '' end) as 'wc[r]501',
max(case component when 'wc[r]601' then comp_desc else '' end) as 'wc[r]601',
max(case component when 'wc[r]701' then comp_desc else '' end) as 'wc[r]701',
max(case component when 'wc[r]801' then comp_desc else '' end) as 'wc[r]801'
from m_bom
group by parent
这种算法就改变了原有表中数据的结构,其改变如下图十三、图十四所示,大家可以很清楚地明白。
图十三是数据库中原始数据,没有经过上面的算法的处理的数据
图十四是通过以上算法处理后,生成的数据。通过对比大家会发现其不同的。
图十三
图十四
通过以上的算法,就把图十三那种数据格式,转成了图十四所示的一条记录。这种使用也是根据企业中的特殊要求,企业工艺路线在bom中是通过父子关系来加以表现的,就是图十三所示的方式,而实现应用时,要求有一个完整的工艺流程,这就需要对数据进行处理。而图十四的这个例子就是为了生成流程卡而设计的。
通过以下几个例子与相当的图示,应该已经我们展示了现代企业数据应用工具的一个方面,我们企业在信息化,已经开始关注我们产品、原材料之后另一大资源就是生产数据,这本身就是我们企业管理的一个飞跃。在工具的选择方面,这只是现在应用中的一个例子,当然这只是冰山一角。新的技术还没有更好地在我们的企业中变成一线的生产力。
在以上的例子中,我们已经可以看来我们的数据已经是活的了现代的生产管理更加需要第一手的材料。只有最准的数据才会有最有效地决策。而现代的企业通过现代信息技术的集成,也比传统企业中组织联系地更加密切,部门的作用不仅仅表现在其职能上,更多地是表现在其在组织中的作用。因为每一个职能组织都是为别的组织服务的。也正是这种服务关系,在信息化的集成中更进一步加强我们管理的能力与资源的集成。