360 likes | 641 Views
線上分析式處理 On-line Analytical Processing OLAP. 張珀銀、李建祥 2008.1.23. 大 綱. 功能特色 維度模式 特殊型態 塑模步驟 儲存方式 MDX 簡介 結 論. 功 能 特 色. 含 階層式關係的 多維度結構 有效的交叉比較與分析規格 資料結構與呈現方式的分離 多樣且彈性的操作 Roll-up Drill-down Slice and Dice Pivot. 維 度 模 式. 事實資料表 需要以彙總函數計算的屬性 維度資料表 分析所需的分群屬性 維度模式結構
E N D
線上分析式處理On-line Analytical ProcessingOLAP 張珀銀、李建祥 2008.1.23
大綱 • 功能特色 • 維度模式 • 特殊型態 • 塑模步驟 • 儲存方式 • MDX簡介 • 結 論
功能特色 • 含階層式關係的多維度結構 • 有效的交叉比較與分析規格 • 資料結構與呈現方式的分離 • 多樣且彈性的操作 • Roll-up • Drill-down • Slice and Dice • Pivot
維度模式 • 事實資料表 • 需要以彙總函數計算的屬性 • 維度資料表 • 分析所需的分群屬性 • 維度模式結構 • 星狀綱目(Star Schema) • 雪花綱目(Snowflake Schema)
特殊型態 • 非事實資料表(Factless Fact Table) • 事件追蹤管理(Event Tracking) • 問題:學生出席的次數? • 解法:增加虛擬欄位,再利用Count()加總 • 覆蓋分析(Coverage Analysis) • 問題:促銷期間沒有賣出的商品? • 解法:建立覆蓋事實資料表,存入所有促銷商品,再與銷售事實資料表進行差集處理 • 快照事實資料表(Snapshot Fact Table) • 彙總某時點的資料並儲存成預存資料,做為OLAP的資料源,以提升處理效能
塑模步驟 • 建立事實資料表 • 資料表格中需要被彙總的欄位 • 建立維度資料表 • 將其他非彙總性欄位根據分析角度歸類進行反正規化 • 將各維度資料表主鍵加入事實資料表 銷售事實 ----------------------- ProductId TimeId CustomerId StoreId SalesQty SalesAmount
儲存方式 • Relational OLAP (ROLAP) • 明細資料與彙總資料存於RDB • 即時但效率差 • 儲存空間耗用較低 • Multi-dimensional OLAP (MOLAP) • 明細資料與彙總資料存於CUBE • 即時性差但效率好 • 儲存空間耗用較高 • Hybrid OLAP(HOLAP) • 明細資料於RDB • 彙總資料存於CUBE • 查詢效率近似MOLAP • 儲存空間介於MOLAP與ROLAP之間
MDX簡介 • MDX (Multidimensional Expressions) • 針對OLAP多維資料庫的多維度查詢語言 • 1997年由Microsoft 所提出,為OLE DB FOR OLAP的一部分,之後即於1998年內建於SQL SERVER中,名為Analysis Services。 • 儘管MDX並非開放式的規格,其他廠商仍採用此規格,可見MDX確實有它的重要性。 • 因MDX由MS所主導,之後的範例以SQL 2005中的Analysis Services為主。 • OLAP資料庫中的CUBE結構 • 多維度的資料結構 (CUBE),瞭解MDX之前,須先瞭解CUBE的結構
CUBE結構 • OLAP資料庫 • 多維度的資料結構 (CUBE)
CUBE的物件架構與命名原則 • 在Analysis Services中每個物件都要有個識別碼,以中括號[]括起來。 • 找2005年的二月 • [TIME].[ALL].[2005].[Q1].[二月] • 有一原則:結構後面可以接成員,成員不能接結構
MDX語法的分類 • 資料定義語言:CREATE,DROP等等 • 資料操作語言:SELECT,UPDATE • 指令碼陳述式:管理變數範圍,流程控制的指令碼:如SCOPE,CACULATE
基本的MDX查詢句 • SELECT[AXIS的定義 [, <AXIS的定義>…]]FROM <CUBE的定義>WHERE <SLICER 定義> • AXIS:在軸上所要看到的維度成員或計量值, 亦可以使用index的方式指定0:COLUMNS,1:ROWS2:PAGES,3:SECTIONS4:CHAPTERS • CUBE:指定想要用的CUBE • SLICER:指定要出現在結果集中的成員或量值
基本的MDX查詢句 • 範例:以SQL 2005中的範例資料庫”Adventure Work”為例 • MDX CODE • SELECT {[Measures].[Sales Amount], [Measures].[Order Quantity]} on columns, {[Product].[Category].[Bikes],[Product].[Category].[Clothing]} on rowsFROM [Adventure work] on columns on rows
基本的MDX查詢句 • SELECT {[Measures].[Sales Amount], [Measures].[Order Quantity]} on columns, {[Product].[Category].[Bikes],[Product].[Category].[Clothing]} on rowsFROM [Adventure work] WHERE {[Date].[Calendar Year].[CY 2002]} • 此結果只有2002年的總合 on columns on rows
基本的MDX查詢句 • SELECT {[Measures].[Sales Amount], [Measures].[Order Quantity]} on columns, {[Product].[Category].[Bikes],[Product].[Category].[Clothing]} on rowsFROM [Adventure work] WHERE {[Date].[Calendar Year].[CY 2002], [Date].[Calendar Year].[CY 2003]} • 此結果為2002與2003年的總合 on columns =16,927(2002)+35,331(2003) on rows
基本的MDX查詢句 • SELECT {[Sales Channel].[Sales Channel].[Sales Channel].Members}*{[Measures].[Sales Amount], [Measures].[Order Quantity]} on columns, {[Product].[Category].[Bikes],[Product].[Category].[Clothing]} on rowsFROM [Adventure work] WHERE {[Date].[Calendar Year].[CY 2002], [Date].[Calendar Year].[CY 2003]} 使用*運算子將Members 與Sales Amount跟Order Quantity兩個集合交叉乘積
在SELECT中以WITH 建立導出成員,命名集,計算資料表格。WITH所建立的物件僅限於當次查詢有效。 • WITH [<導出成員的定義>] • [<自訂命名集的定義>] • [<資料格計算的定義>] • 導出成員的定義方式 • MEMBER [<成員名稱>] AS ‘<計算公式>’ • [, SOLVE_ORDER =<解決順序>] • [,CELL_PROPERTY>=<VALUE_EXPRESSION>…] • [,FROMAT_STRING=<顯示格式設定>] 進階的MDX查詢句
展示一綜合範例如下 • WITH • -- 新增導出成員 達成率 • Member [Measures].[達成率] AS • [Measures].[Sales Amount]/ • [Measures].[Sales Amount Quota] • , Format_String =‘Percent’ – 顯示為百分比 • -- 新增導出成員 去年同期達成率Member [Measures].[去年同期達成率]AS {ParallelPeriod([Date].[Calendar].[Calendar Year]), Measures.[達成率]} • , Format_String = ‘Percent’ --顯示為百分比 進階的MDX查詢句
續上之範例如下 • SELECT {[Measures].[Sales Amount], [Measures].[Sales Amount Quota], • [Measures].[達成率], • [Measures].[去年同期達成率] on 0, • {Sales Territory}.[Sales Territory Country].Members on 1 • FROM [Adventure Works] • WHERE • [Date].[Calendar].[Calendar Year].[CY 2004]} 進階的MDX查詢句
進階的MDX查詢句 使用 WITH 所建立的導出成員
進階的MDX查詢句 • NON EMPTY: 查詢非空值之結果 • 假設ML為非空值之ROWS • Select • {[Measures].[Sales Amount]} on 0, • Non Empty [ML] on 1 • From [Adventure Works]
SUBCUBE:若只需要與cube中的一小部分進行互動,可將查詢範圍限制在subcube中,可以改善查詢效能。CREATE SUBCUBE <Subcube 別名> AS <Subcube 運算式> • 範例 • CREATE SUBCUBE [Adventure works] AS • SELECT • {[Measures].[Sales Amount]} on 0, • {[Q3 CY 2003] on 1} • FROM [Adventure work] • Select • {[Measures].[Sales Amount]} on 0, • Non Empty [ML] on 1 • From [Adventure Works] 進階的MDX指令
進階的MDX指令 • Drill Through:一個cube中存放了來源與匯總資料,select可取後匯總資料,而drill through則可以取得來源資料。 • DrillThrough 語法 • DrillThrough [<資料筆數>][<起始筆數>] <MDX SELECT> [<回傳欄位>] • 範例 • DrillThrough • Select • {[十月 30, 2003], [Order Quantity]} on 0, • {[Bikes]} on 1
結論 • OLAP解決了SQL在RDB上彙總資料的彈性與效能問題 • 階層式的多維度CUBE結構,能提供給決策者以Roll-up 或 Drill-down方式分析資料 • 多種儲存結構(ROLAP, MOLAP, HOLAP)滿足效能及即時性的需求 • MDX提供開發者存取CUBE的語言,能直接存取彙總資料,不需要利用SQL彙總交易資料,能發揮OLAP的優點
OLAP階層與量值 • CUBE的結構裡有維度和量值,而維度下有階層,階層下有層級,每個層級下裡有許多成員,其從屬關係如下 維度 成員 階層 成員 層級 成員 量值
OLAP階層與量值│範例 • 以某商品的銷售量的時間維度 為例 成員 時間維度 年 2001 2002 2003 季 Q1 Q2 Q3 Q4 月 JAN. FEB. ….. 日 MON. ….. 銷售量
事實與維度資料 事實資料: 銷售量 維度資料: 銷售年度 維度資料: 車型
星狀綱目 產品維度 ---------------------- ProductId BrandName ProductName SKU 時間維度 ---------------------- TimeId TheYear TheMonth TheDay 銷售事實 ----------------------- ProductId TimeId CustomerId StoreId SalesQty SalesAmount 顧客維度 ---------------------- CustomerId AccountNum Name Address 門市維度 ---------------------- StoreId StoreName StoreType StoreAddress
雪花狀綱目 產品類別維度 ---------------------- ProductClassId ProdSubcategory ProdCategory ProdDepartment 門市區域維度 ---------------------- RegionId SalesCity SalesRegion SalesCountry 產品維度 ---------------------- ProductId BrandName ProductName SKU 門市維度 ---------------------- StoreId StoreName StoreType StoreAddress 銷售事實 ----------------------- ProductId TimeId CustomerId StoreId SalesQty SalesAmount 顧客維度 ---------------------- CustomerId AccountNum Name Address 時間維度 ---------------------- TimeId TheYear TheMonth TheDay
維度資料表的建立 尺寸資料表 --------------- SizeId SizeUnit SizeQty 產品維度資料表 ---------------------- ProductId ProductName ColorName TypeName SizeUnit SizeQty 產品資料表 ----------------- ProductId ProductName ColorId TypeId SizeId 反正規化 顏色資料表 --------------- ColorId ColorName 型別資料表 --------------- TypeId TypeName
塑模步驟三 產品維度 ---------------------- ProductId BrandName ProductName SKU 時間維度 ---------------------- TimeId TheYear TheMonth TheDay 銷售事實 ----------------------- ProductId TimeId CustomerId StoreId SalesQty SalesAmount 顧客維度 ---------------------- CustomerId AccountNum Name Address 門市維度 ---------------------- StoreId StoreName StoreType StoreAddress