聯機分析處理(英語:Online analytical processing),簡稱OLAP (/ˈoʊlæp/),是計算機技術中快速解決多維分析問題(MDA)的一種方法。[1] OLAP是更廣泛的商業智能範疇的一部分,它還包括關係數據庫、報告編寫和數據挖掘。[2] OLAP的典型應用包括銷售業務報告、市場營銷、管理報告、業務流程管理(BPM)[3]、預算和預測、財務報表以及類似領域,新的應用正在出現,如農業。[4] 術語「OLAP」是對傳統數據庫術語「聯機事務處理」(OLTP)稍微修改而成的。[5]
OLAP工具讓用戶能夠從多個角度交互地分析多維數據。OLAP由三個基本的分析操作組成:上卷(roll-up)、鑽取(drill-down)、切片(slicing)和切塊(dicing)。[6]:402-403 上卷涉及可以在一個或多個維度中累積和計算的數據的聚合。例如,所有的銷售辦事處匯總到銷售部門,以預測銷售趨勢。相比之下,鑽取是一種允許用戶瀏覽詳細信息的技術。例如,用戶可以查看組成一個地區銷售額的單個產品的銷售額。切片和切塊是說,用戶可以從OLAP多維數據集中取出(切片)一組特定的數據,並從不同的角度查看(切塊)切片。這些角度有時被稱為維度(例如按銷售人員、按日期、按客戶、按產品或按地區查看相同的銷售情況等)。
為OLAP配置的數據庫使用多維數據模型,允許快速執行複雜的分析查詢和即席查詢。[7] 它們借鑑了導航型數據庫、層次型數據庫和關係型數據庫的各個方面。
OLAP通常與OLTP(聯機事務處理)形成對比,OLTP的特點是查詢的複雜性要小得多,而且查詢量要大得多,以處理事務,而不是用於商業智能或報告。OLAP系統主要針對讀取進行優化,而OLTP得能處理各種查詢(讀取、插入、更新和刪除)。
OLAP系統概述
OLAP系統的核心是一個OLAP多維數據集。它由稱為度量的數字事實組成,這些數字事實按維度進行分類。這些度量被放置在超立方體的交點處。操作一個OLAP多維數據集的通常接口是一個矩陣接口,就像電子表格程序中的數據透視表一樣,它沿着維度執行投影操作,例如聚合或求平均值。
多維數據集元數據通常是從關係數據庫中的表的星型模式、雪花型模式或事實星座中創建的。度量來自事實表中的記錄,維度來自維度表。
可以認為每個度量都有一組標籤,或者與之關聯的元數據。維度是描述這些標籤的東西; 它提供有關度量的信息。
舉一個簡單地多維數據集的例子,商店的銷售額作為度量,日期/時間作為維度。每個銷售都有一個日期/時間標籤,描述更多關於該銷售的信息。
如下所示:
Sales Fact Table +-------------+----------+ | sale_amount | time_id | +-------------+----------+ Time Dimension | 2008.10| 1234 |----+ +---------+-------------------+ +-------------+----------+ | | time_id | timestamp | | +---------+-------------------+ +---->| 1234 | 20080902 12:35:43 | +---------+-------------------+
多維結構被定義為「使用多維結構組織數據並表達數據之間關係的關係模型的變體」。[6]:177 該結構被分解成多個超立方體,並且在每個超立方體的範圍內都能存儲和訪問數據。「多維結構中的每個單元都包含與其維度上的元素相關的聚合數據」。[6]:178 即使對數據進行操作,也很容易訪問並繼續構成一種緊湊的數據庫格式。數據仍然是相互關聯的。 對於使用OLAP應用程序的分析數據庫,多維結構非常流行。[6] 分析型數據庫使用這些數據庫,是因為它們能夠快速地為複雜的業務查詢提供答案。可以從不同的角度查看數據,這與其他模型不同,為問題提供了更廣闊的視角。[8]
據稱,對於複雜查詢,OLAP多維數據集可以在大約0.1%的時間內生成對OLTP關係數據的相同查詢所需的答案。[9][10] OLAP中允許其實現此類性能的最重要機制是使用聚合。聚合是通過更改特定維度的粒度並使用聚合函數沿着這些維度聚合數據,從事實表構建的。可能聚合的數量由每個可能的維度粒度組合決定。
所有可能的聚合和基礎數據的組合包含可以從數據應答的每個查詢的答案。[11]
因為通常有許多可以計算的聚合,所以通常只有預先確定的數字被完全計算; 其餘的則根據需要求解。決定要計算哪些聚合(視圖)的問題稱為視圖選擇問題。視圖選擇可以受到所選聚合集的總大小、根據基礎數據的更改更新它們的時間的限制,或者同時受兩者的限制。視圖選擇的目標通常是最小化進行OLAP查詢的平均時間,儘管一些研究也最小化了更新時間。視圖選擇是NP完全問題。這個問題已經被探索了許多方法,包括貪心算法、隨機搜索、遺傳算法和A*搜尋演算法。
對於整個OLAP多維數據集,可以通過預先計算每個單元的值來計算一些聚合函數,然後通過聚合這些聚合來計算單元匯總的聚合,並對多維問題應用分治法來有效地計算這些聚合。[12] 例如,所有的總和就是每個單元的子和的總和。可以這樣分解的函數稱為可分解聚合函數,包括COUNT、MAX、MIN
和SUM
,這些函數可以為每個單元計算,然後直接聚合;這些函數稱為自可分解聚合函數。[13] 在其他情況下,聚合函數可以通過計算單元的輔助數,聚合這些輔助數,最後計算最後的總數來計算;例子有AVERAGE
(跟蹤和與數量,最後再做除法)和RANGE
(跟蹤最大值和最小值,最後再相減)。在其他情況下,如果不立即分析整個集合,就無法計算聚合函數,儘管在某些情況下可以計算近似值;例如DISTINCT COUNT、MEDIAN
和MODE
;例如,集合的中位數不等於子集的中位數。後者很難在OLAP中有效地實現,因為它們需要在基礎數據上計算聚合函數,或者在線(慢)計算它們,或者為可能的展開(大空間)進行預計算。
參考文獻
參見
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.