企業數據應用工具的選擇
一、 為什么要選擇工具
企業與機關、院校有于最大的不同就是內部人員的素質層次不一,而因很多原因不能要求所有的人都可以有很高的水平。記著我所接觸的一個還算是十分新的企業里,在企業里會格盤就算是計算機高手了。這也從一個方面表現出了企業應用的滯后性。
正是在這種環境里,為了叫我們一線人員能夠不改變其原有工作習慣的條件下完成工作。我們也進一步去體會辦公自動化產品本身的高度集成與開放性。而這一切的基礎都源于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中是通過父子關系來加以表現的,就是圖十三所示的方式,而實現應用時,要求有一個完整的工藝流程,這就需要對數據進行處理。而圖十四的這個例子就是為了生成流程卡而設計的。
通過以下幾個例子與相當的圖示,應該已經我們展示了現代企業數據應用工具的一個方面,我們企業在信息化,已經開始關注我們產品、原材料之后另一大資源就是生產數據,這本身就是我們企業管理的一個飛躍。在工具的選擇方面,這只是現在應用中的一個例子,當然這只是冰山一角。新的技術還沒有更好地在我們的企業中變成一線的生產力。
在以上的例子中,我們已經可以看來我們的數據已經是活的了現代的生產管理更加需要第一手的材料。只有最準的數據才會有最有效地決策。而現代的企業通過現代信息技術的集成,也比傳統企業中組織聯系地更加密切,部門的作用不僅僅表現在其職能上,更多地是表現在其在組織中的作用。因為每一個職能組織都是為別的組織服務的。也正是這種服務關系,在信息化的集成中更進一步加強我們管理的能力與資源的集成。