以A表為例子
先建立一個table0
create table_0
(n_date date,
sheng varchar2(20),
sale number
tongbi number);
create unique index table_0_U1 on table_0 (n_date,sheng);
create or replace package body pkg_b_tongji is
procere sp_update_party_rating(p_sdate number, p_edate number) is
v_sdate date default to_date(p_sdate,'yyyymmdd');
v_edate date default to_date(p_edate,'yyyymmdd');
v_sqlUpd varchar2(3000);
v_sqlIns varchar2(3000);
begin
v_sqlIns := 'insert into table_0(n_date,sheng,sale)
values(:v1,:v2,:v3)';
v_sqlUpd := 'update table_0 t set sale = :v1
where n_date = :v2 and sheng = :v3';
for c1 in (select a.ndate,
a.sheng,
sum(sale) sale
from a
where ndate between v_sdate and v_edate
group by a.ndate,
a.sheng
)
loop
execute immediate v_sqlUpd using c1.sale;
if sql%rowcount<=0 then --如果更新操作沒有執行就執行插入操作
execute immediate v_sqlIns using c1.n_date,c1.sheng,c1.sale;
end if;
end loop;
commit;
end sp_update_party_rating;
---更新同比
procere sp_update_tongbi is
begin
for c2 in (
select n_date,
sheng,
sale,
nvl(sale,0) sale1
from table_0 a
left join
(select n_date,sheng,a.nvl(sale,0) sale
from table_0 a,
(select t.n_date,sheng
add_months(n_date,-1) n_date2
from table_0 t)
where a.sheng = b.sheng and a.n_date = b.n_date2)
)
loop
update table_0
set tongbi = sale/sale1
where n_date = c2.n_date and sheng = c2.sheng;
commit;
end loop;
end sp_update_tongbi;
end pkg_b_tongji;
❷ 怎麼將兩個sql兩個輸出值相加
用內聯系和結果合並都可以
❸ BI主要掌握什麼
商業智能也稱作BI,是英文單詞Business Intelligence的縮寫。商業智能的概念最早在1996年提出。當時將商業智能定義為一類由數據倉庫(或數據集市)、查詢報表、數據分析、數據挖掘、數據備份和恢復等部分組成的、以幫助企業決策為目的技術及其應用。目前,商業智能通常被理解為將企業中現有的數據轉化為知識,幫助企業做出明智的業務經營決策的工具。這里所談的數據包括來自企業業務系統的訂單、庫存、交易賬目、客戶和供應商等來自企業所處行業和競爭對手的數據以及來自企業所處的其他外部環境中的各種數據。而商業智能能夠輔助的業務經營決策既可以是操作層的,也可以是戰術層和戰略層的決策。為了將數據轉化為知識,需要利用數據倉庫、聯機分析處理(OLAP)工具和數據挖掘等技術。因此,從技術層面上講,商業智能不是什麼新技術,它只是數據倉庫、OLAP和數據挖掘等技術的綜合運用。BI 是一個工廠:
>> BI 的原材料是海量的數據;
>> BI 的產品是由數據加工而來的信息和知識;
>> BI 將這些產品推送給企業決策者;
>> 企業決策者利用 BI 工廠的產品做出正確的決策,促進企業的發展;
這就是 Business Intelligence,即商業智能——連接數據與決策者,變數據為價值。
BI 應用的兩大類別是信息類應用 和 知識類應用,其特徵如下表所示:
信息類 BI 應用:
指由原始數據加工而來的數據查詢、報表圖表、多維分析、數據可視化等應用,這些應 用的共同特點是:將數據轉換為決策者可接受的信息,展現給決策者。
例如將銀行交易數據加工為銀行財務報表。
僅負責提供信息,而不會主動去分析數據。
例如,銀行財務報表工具沒有深入分析客戶流失和銀行利率之間關系的能力,而只能靠決策者結合信息,通過人的思考,得出知識。
知識類 BI 應用:
指通過數據挖掘技術和工具,將數據中隱含的關系發掘出來,利用計算機直接將數據加工為知識,展現給決策者。
會主動去數據中探查數據關聯關系,發掘那些決策者人腦無法迅速發掘的隱含知識,並將其以可理解的形式呈現在決策者面前。
(3) BI 初級應用模式概覽——數據查詢(Querying)
數據查詢是最簡單的 BI 應用,屬於 MIS 系統遺產,雖然出身比較老土,但是目前仍然是決策者獲取信息的最直接的方法。
如今,數據查詢界面已經徹底擺脫了傳統 SQL 命令行,大量的下拉菜單、輸入框、列表框等元素甚至是滑鼠拖拽界面將後台干苦力的 SQL 語句包裝成一個妖艷無比的數據獲取系統,而本質仍然沒有離開數據查詢的幾大要素:
>> 查什麼
>> 從哪兒查
>> 過濾條件
>> 展示方法
目前國外比較流行的數據查詢應用已經完全釋放了數據查詢的靈活性,如右圖所示的是 Cognos ReportNet 的數據查詢界面 Query Studio,允許用戶通過純瀏覽器界面,以滑鼠拖拽操作定義數據查詢要素,並以報表和圖表等多種方式展現數據。
(4) BI 初級應用模式概覽——報表(Reporting)
報表是國內最熱衷的 BI 應用之一,這與報表在我國企事業單位中的歷史地位是分不開的。我國的報表以其格式詭異、數據集中、規則古怪等特徵著稱於世,曾經讓無數國外報表工具和 BI 工具捶胸頓足。
報表的兩大要素是數據和格式,如果沒有格式,則報表應用幾乎等同於數據查詢應用。可以說,報表就是將查詢出來的數據按照指定的格式展現。
報表應用包含了報表展現和報表製作兩大模塊。報表展現就是讓決策者看到報表,並允許決策者通過條件定義來選擇報表數據,例如選擇報表年度、部門、機構等等;報表製作面向報表的開發人員,其格式定義靈活性、數據映射靈活性、計算方法的豐富程度等均影響了 BI 報表應用的質量。
需要澄清一下的是,Microsoft Excel 不算是一個 BI 報表工具,因為 Excel 沒有連接數據源的能力,充其量是一個 Spread Sheet。但是 Excel 強大的格式功能讓報表製作人員竟折腰,乃至到後來,幾乎所有 BI 廠商都提供了面向 Microsoft Excel 的插件,通過插件,Excel 可以連接到 BI 的數據源上,搖身一變為 BI 報表工具,丑小鴨變天鵝。
5) BI 高級應用模式概覽——在線分析(OnLine Analytical Processing,OLAP)
OLAP ,即聯機分析處理,是 BI 帶來的一種全新的數據觀察方式,是 BI 的核心技術之一。
我們知道,數據在資料庫中是以數據表來存儲的,比如某商店的銷售數據存儲在如下所示的一張數據表中:
銷售時間
銷售地點
產品
銷售數量
銷售金額
2004-11-1
北京
肥皂
10
342.00
2004-11-6
廣州
桔子
30
123.00
2004-12-3
北京
香蕉
20
12.00
2004-12-13
上海
桔子
50
189.00
2005-1-8
北京
肥皂
10
342.00
2005-1-23
上海
牙刷
30
150.00
2005-2-4
廣州
牙刷
20
100.00
決策者希望知道的往往是分布、佔比、趨勢之類的宏觀信息,比如下列問題:
>> 北京地區的銷售數量雖時間的變化趨勢?
>> 哪種產品在 2005 年銷售比 2004 年銷售增幅最大?
>> 2004 年各產品銷售額的比例分布? ……
面對這種需求,必須用 SQL 語句進行大量的 SUM 操作,每得出一個問題的結果,就需要 SQL SUM。面對上面的 7 條記錄,我們可以很容易的得出結果,但是當我們面對百萬級甚至億級的記錄條數時,例如移動公司通話數據,每次 SQL SUM 都需要消耗大量的時間來計算,決策者經常是在第一天提出分析需求,等到第二天才能拿到計算結果,這種分析方式是「離線分析」,效率很低。
為了提高數據分析效率,OLAP 技術徹底打破以記錄為單位的數據瀏覽方式,而將數據分離為「維度(Dimension)」和「度量(Measure)」:
>> 維度是觀察數據的角度,例如上面示例中的「銷售時間」、「銷售地點」、「產品」;
>> 度量是具體考察的數量值,例如上例中的「銷售數量」和「銷售金額」;
這樣一來,我們就可以將上面這張平版的數據列表轉換為一個擁有三個維度的數據立方體( Cube ):
而探查數據的過程,就是在這個立方體中確定一個點,然後觀察這個點的度量值:
當然,數據立方體並不局限於三個維度,這里採用三個維度來說明問題,只是因為通過圖形可以表現出來的極限就是三個維度。
維度可以劃分層次,例如時間上可以從日向上匯總為月和年,產品可以向上匯總為食品和日用品,地點可以向上匯總為華北和華南,用戶可以沿著維度的層次任意向下鑽取(Drill Down)和向上匯總(Roll Up):
通過這種方式,我們就可以擺脫 SQL SUM 對速度的制約,快速定位符合不同條件的細節數據,更可以迅速得到某一層次的匯總數據。OLAP 技術為決策者提供了多角度、多層次、高效率的數據探查方式,決策者的思維不再被固定的下拉菜單、查詢條件所束縛,而是由決策者的思維帶領數據的獲取,任意組合分析角度和分析目標,這種打破傳統的互動性分析和高效率使 OLAP 成為 BI 系統的核心應用。
(*) 第四噴:BI 高級應用模式 —— 數據可視化與數據挖掘
(6) BI 應用模式概覽——數據可視化(Visualization)
數據可視化應用致力於將信息以盡可能多的形式展現出來,目的是使決策者通過圖形這種直觀的表現方式迅速獲得信息中蘊藏的知識,如趨勢、分布、密度等要素。 值得一提的是,以 MapInfo 公司為代表的 GIS 軟體商,目前也正在努力結合 BI 應用。MapInfo 率先提出了 Location Intelligence 概念,依託於地理信息系統,展現各地區的屬性值,例如人口密度,工業產值,人均醫院數量等等,這種可視化應用部分與 BI 數據可視化應用重合,並形成有力補充,有時可以在一個項目中互相搭配。
上圖所示的是 Cognos Visualizer 產品,這傢伙用幾近嘩眾取寵的豐富形式展現數據和信息,包含了地圖、餅圖、瀑布圖等近五十種展現圖形,並提供了二維和三維兩種展現方式。所有的圖形元素都是可活動的,例如用戶可以通過點擊地圖上的某一個省,鑽取到這個省各個城市的信息,這種可交互性是 BI 與普通圖片生成軟體的顯著差異。
(7) BI 應用模式概覽——數據挖掘(Data Mining)
數據挖掘是最高級的 BI 應用,因為它能代替部分人腦功能。
數據挖掘隸屬於知識發現(Knowledge Discovery)在結構化數據中的特例。
數據挖掘的目的是通過計算機對大量數據進行分析,找出數據之間潛藏的規律和知識,並以可理解的方式展現給用戶。
數據挖掘的三大要素是:
>> 技術和演算法:目前常用的數據挖掘技術包括——
自動類別偵測(Auto Cluster Detection)
決策樹(Decision Trees)
神經網路(Neural Networks)
>> 數據:由於數據挖掘是一個在已知中挖掘未知的過程,
因此需要大量數據的積累作為數據源,數據積累
量越大,數據挖掘工具就會有更多的參考點。
>> 預測模型:也就是將需要進行數據挖掘的業務邏輯由
計算機模擬出來,這也是數據挖掘的主要任務。
與信息類 BI 應用相比,以數據挖掘為代表的知識類 BI 應用目前還不成熟,但是從另一個角度來看,數據挖掘可發展的空間還很大,是今後 BI 發展的重點方向,SAS,SPSS 等知識類 BI 應用廠商形象逐漸高大,悄悄占據了新的利潤增長點。
上圖中是著名的 IBM Intelligent Miner 在分析客戶的消費行為。它能對大量的客戶數據進行分析,然後自動將客戶劃分為若干群體(自動類別偵測),並將每個群體的消費特徵顯示出來,這樣決策者就能一目瞭然的針對不同客戶的消費習慣,制定促銷計劃或廣告計劃。
上述功能如果單靠信息類 BI 應用來實現,則需要決策者根據經驗進行大量的 OLAP 分析、數據查詢工作,而且還不一定能發現數據中隱藏的規律。例如上述客戶分類,對於一個擁有 400 萬用戶的銀行來說,如果沒有數據挖掘工具,會把人活活累死的。
(8) BI 底座——數據倉庫技術(Data Warehouse)
在開始噴這個主題之前,讓我們先看看數據倉庫的官方定義:
數據倉庫(Data Warehouse)是一個面向主題的(Subject Oriented)、集成的(Integrate)、相對穩定的(Non-Volatile)、反映歷史變化(Time Variant)的數據集合,用於支持管理決策。以上是數據倉庫的官方定義。
「操作型資料庫」如銀行里記賬系統資料庫,每一次業務操作(比如你存了5元錢),都會立刻記錄到這個資料庫中,長此以往,滿肚子積累的都是零碎的數據,這種干臟活累活還不得閑的資料庫就叫「操作型資料庫」,面向的是業務操作。
「數據倉庫」用於決策支持,面向分析型數據處理,不同於操作型資料庫;另外,數據倉庫是對多個異構的數據源有效集成,集成後按照主題進行了重組,並包含歷史數據,而且存放在數據倉庫中的數據一般不再修改。
操作型資料庫、數據倉庫與資料庫之間的關系,就像 C:、D: 與硬碟之間的關系一樣,資料庫是硬碟,操作型資料庫是 C:,數據倉庫是 D:,操作型資料庫與數據倉庫都存儲在資料庫里,只不過表結構的設計模式和用途不同。
那麼為什麼要在操作型資料庫和 BI 之間加這么一層「數據倉庫」呢?
一是因為操作型資料庫日夜奔忙,以快速響應業務為主要目標,根本沒精力伺候 BI 這邊的數據需求,而且 BI 這邊的數據需求通常是匯總型的,一個 select sum(xx) group by xx 就能讓操作型資料庫耗費大量資源,業務處理跟不上趟,麻煩就大了,比如你存了 5000 元錢,發現十分鍾後錢還沒到賬,作何感想?一定是該銀行的領導在看餅圖?
二是因為企業中一般存在有多個應用,對應著多個操作型資料庫,比如人力資源庫、財務庫、銷售單據庫、庫存貨品庫等等,BI 為了提供全景的數據視圖,就必須將這些分散的數據綜合起來,例如為了實現一個融合銷售和庫存信息的 OLAP 分析,BI 工具必須能夠高效的取得兩個資料庫中的數據,這時最高效的方法就是將數據先整合到數據倉庫中,而 BI 應用統一從數據倉庫里取數。
將分散的操作型資料庫中的數據整合到數據倉庫中是一門大學問,催生了數據整合軟體的市場。這種整合並不是簡單的將表疊加在一起,而是必須提取出每個操作型資料庫的維度,將共同的維度設定為共用維度,然後將包含具體度量值的資料庫表按照主題統一成若干張大表(術語「事實表」,Fact Tables),按照維度-度量模型建立數據倉庫表結構,然後進行數據抽取轉換。後續的抽取一般是在操作性資料庫負載比較小的時候(如凌晨),對新數據進行增量抽取,這樣數據倉庫中的數據就會形成積累。
大多數 BI 應用並不要求獲取實時的數據,比如決策者,只需要在每周一看到上周的周報就可以了,95% 的 BI 應用都不要 求實時性,允許數據有 1 小時至 1 個月不等的滯後,這是決策支持系統的應用特點,這個滯後區間就是數據抽取工具工作的時間。當然,BI 應用中通常還將包含極少的對實時數據的要求,這時僅需針對這些特殊需求,將 BI Querying 軟體直接連接在業務資料庫上就可以了,但是必須限制負載,禁止做復雜查詢。
目前的資料庫產品都對數據倉庫提供有專門優化,例如在安裝 MySQL 的高版本時,安裝成序會詢問你是想讓資料庫實例作為 Transaction-Oriented ,還是 Decision Support ,前者就是操作型資料庫,後者就是數據倉庫(決策支持么,再振臂高呼一遍),針對這兩種形式,資料庫將提供針對性的優化。
(9) BI 花邊
BI 的相關知識大致就是這樣了,寫一些花邊作為結束語吧。
BI 要害:BI 無法處理非結構化數據,只能處理數字信息,但是在企業中,還存在有大量像文本、流媒體、圖片等非結構化的數據,這些數據同樣蘊藏有大量價值,但是面對這些數據,目前的 BI 工具無能為力。比較靠譜的是 IBM Intelligent Miner for Text,但是它在處理中文方面似乎十分薄弱。
BI 廠商和產品:
首先讓我們認識一下國外大人物!數據倉庫方面,有 IBM DB2,Oracle,Sybase IQ,NCR Teradata 等等;BI 應用方面,有 Cognos,Business Objects,MicroStrategy,Hyperion,IBM 等等;數據挖掘方面,有 IBM,SAS,SPSS 等等。巨無霸 Microsoft 也在 BI 領域插了一腿,推出了 SQL Server Analysis Server、Reporting Services 等 BI 相關產品搶佔山頭!
我們往往容量只把眼光放在國外的BI大佬們而忽略國內漸漸突起的BI新軍,如今國內比較出名的BI有奧威智動的Power-BI,尚南的BlueQuery 及潤乾報表等,特別值得一提的是奧威智動的Power-BI是一款標准化BI,在國內已經具有一定的市場佔有率。
中國的 BI 市場發展:
時間段
國內 BI 應用情況
2002 年以前
大量 BI 軟體被看作是能從多個數據源中抽取數據的報表工作,滿眼全是報表。
一開始,公司的銷售在推銷產品時都向用戶介紹:「我們是 BI 領域最強的……」效果不好;後來那些銷售終於找到了竅門,上來就說:「我們什麼報表都能做!」然後訂單不斷。
2002-2003
OLAP 的價值終於被某些慧眼發現,一些競爭壓力大的企業為了提高競爭力,迫切需要從歷史數據中挖掘價值,迅速發現了 OLAP 的優勢,這時銷售終於不用再說「我們什麼報表都能做」了。但是國家機關、壟斷型企業,仍舊是報表,並且以為 BI 就是報表。
2004
隨著越來越多成功 BI 項目的實施,OLAP 終於得以見天日,這時國內才形成數據查詢+報表展示+OLAP分析的合理 BI 應用結構。一些數據可視化的需求也時常被用戶提出,在一些競爭激烈、數據量大的企業,已經出現了數據挖掘應用。
2005
信息提供已經無法滿足很多企業的要求,特別是銀行、通信、證券等競爭激烈、風險密集的行業,大量涌現對數據挖掘的需求,BI 應用終於形成信息+知識的整體。
BI 工具在中國遇到的難題:
* 復雜表樣:中國是世界上報表最復雜的國家。中國的表樣設計思想與西方不同,西方報表傾向於僅用一張報表說明一個問題,而中國的報表傾向於將盡可能多的問題集中在一張報表中,這種思路直接導致了中國報表的復雜格式和詭異風格。
* 大數據量:中國是世界上人口最多的國家。以中國移動公司為例,僅我國一個省的用戶數量,就相當於歐洲一個中等國家的人口,是真正的海量數據!國外資料庫、數據倉庫和 BI 應用軟體,都在中國經受著大數據量承載能力的考驗。對於美國,可能一個客戶分析應用兩秒鍾就能出結果,但是在中國這樣的數據量下,可就不是兩秒鍾的問題了。
* 數據回寫:中國是世界上對 BI 系統要求最奇特的國家。本來 BI 系統是以忠實再現源數據為原則,但這個原則在中國遇到了難題,許多領導都提出了數據修改需求,「報表裡數字不好看,就要能改啊,而且有時候也需要調整啊,這樣上級領導看著就好嘛! 」一個領導如是說。目前能滿足此要求的 BI 產品,僅有 Microsoft 和 MicroStrategy 兩家。微軟對中國市場算是吃透了。
❹ 做bi工程師需要掌握哪些技術
BI需要的技術:
1.資料庫:Oracle, DB2, SQL SERVER,最好也懂點Sybase, My SQL
包括,SQL,PLSQL,備份,恢復,調優
2.ETL: Informatica, Datastage, 手工ETL
3.報表:Cognos, BO, BIEE, Hyperion.....
4.操作系統, UNIX或者Linux,AIX, Solaris之類,SHELL腳本
5.外語,英語日語一種,全會更好
6.HTML, JAVA, JS, CSS 多多益善
7.熟悉了解一些ERP系統,SAP,Sieble,Salesforce
❺ 求SQL兩列數據求和
select IDependCode, sum(money1) as money3 from (select * from table1
union all
select * from table2
) as temp group by IDependCode