360 likes | 554 Views
Oracle OLAP Option ( Да споделим опита ). Ина Найденова , ТехноЛогика inaydenova@techologica.com. Oracle OLAP. Oracle Express Platform : Express Server Express Administrator Oracle Express Objects и др. Oracle Olap Option : Olap Analytical Engine като част от RDBMS Oracle
E N D
Oracle OLAP Option( Да споделим опита ) Ина Найденова, ТехноЛогика inaydenova@techologica.com
Oracle OLAP • Oracle Express Platform: • Express Server • Express Administrator • Oracle Express Objectsи др. • OracleOlap Option: • Olap Analytical Engine каточаст от RDBMS Oracle • Analytic Workspaces, OLAP DML, SQL Interface to OLAP • Analytic Workspace Java API • BI Beans and Java OLAP API • AWM, OLAP Worksheet • OracleBI Discoverer Plus OLAP, OracleBI Spreadsheet Add-In
Какво използвахме? • Цели: • да създадем аналитично пространство с подходящ многодименсионнен модел • да заредим данните в дефинираните кубовете • да дадем на клиентите въможност да анализират данните • Използвани средства за целта: • Analytic Workspace Manager • OracleBI Discoverer Plus OLAP • OracleBI Spreadsheet Add-In
Аналитичното пространство • Може да се създаде чрез: • Analytic Workspace Manager (AWM) • OracleBI Warehouse Builder (OWB) • AW XML API • OLAP DML / DBMS_AW • AW може да се ползва от: • BI tools на Oracle • SQL • OLAP APIs
Analytic Workspace Manager • AWМможе работи в 2 режима: Model View – представя многодименсионния модел на даните (т.нар. Standard form) Object View – едно ниво по-надолу, имаме допълнителни обекти, с които работи OLAP engine-а • Последна версия 10.2
Levels All time All 2005 2006 Year Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Quarter Month … M1 M2 M3 M1 M2 M3 Day D2 D3 … D31 D1 D2 D3 … … D1 D30 Елементи на Дименсионения Модел (Model View) • Основни елементи на логическия многодименсионнен модел: • Метрики • Дименсии • Йерархии • Нива • Атрибути • Кубове
Стъпки при израждане на ДМ с AWM 1) Установяване на връзка и създаване на празен AW • създава се таблица AW$aw_name • права за достъп до аналитичното пространство • копиране на аналитично пространство (dbms_aw.aw_copy)
Стъпки при израждане на ДМ с AWM 2) Съдаване на дименсите: - нивата • йерархиите • атрибутите • mapping на дименсиите • зареждане на дименсионните данни
Стъпки при израждане на ДМ с AWM 3) Създаване на кубове: • “рехав” (sparse)и по кои дименсии • как ще агрегираме данните • дали да е компресиран • дали да е разделен на дялове
Съхранение на многодименсионните данни
Компресията - ограничения • По компресиранитедименсии трябва да бъдат агрегирани всички нива (не може да използвате skip-level) • По компресираните дименсии може да се използва само SUM оператор • Не може да дефинирате променлива едновременно с нормален композитен индекс и компресиран композитен индекс • Не може да имаме повече от една променлива в компресиран куб *
Логическо разделяне на дялове • Работим с по-малки метрики • Ако имаме повече от 1 CPU, AWM и AW/XML Java API използват паралелизъм за да се използват пълноценно всичките CPUs • Ако използвате Multi-Write възможностите на 10g, може да имате много сесии, които да променят отделните дялове • По-лесно се добавят и изтриват части от куба, фрагметация е по-малка • Ако използвате компресия, агрегациите се правят на ниво дял
Стъпки при израждане на ДМ с AWM 4) Създаване на метрика
Стъпки при израждане на ДМ с AWM 5) Зареждане наметрика
DEFINE [program_name] PROGRAM PROGRAM ARGUMENT p_prod_level integer ALLSTAT SQL DECLARE CRS_ALLIANZ_CLNUM CURSORFOR - SELECT - RPERIOD_ID,- CLFORMNT_ID, - .... FROM [source_name] - WHERE prod_level = :p_prod_level - GROUP BY - RPERIOD_ID,- ... ROLLUP(CLFORMNT_ID) SQL OPEN CRS_ALLIANZ_CLNUM SQL IMPORT CRS_ALLIANZ_CLNUM INTO - :MATCH MONTHS - :MATCH CLIENT_FOR_MONTHS - ... :MATCH TB_ALLIANZ_CLIENTS_NUM_STORED SQL CLOSE CRS_ALLIANZ_CLNUM SQL CLEANUP UPDATE COMMIT SHOW JOINCHARS ('TB_CLNUM - LEVEL ' p_prod_level ' LOADED!') END
Object View • Дименсиите – имаме дименсии за елементите, нивата и др., релации за йерархичните отношения • Атрибутите – в променливи • Метриките – във формули и променливи • Правилата за агрегиране – в aggregation maps и valuesets
Object View – Formulas DEFINE DEMO_CLNUM FORMULA INTEGER <list of dimensions> EQ aggregate ( DEMO_CLNUM_STORED using OBJ771105059 )
Aggregation Maps DEFINE [name] AGGMAPAGGMAP RELATION MONTHS_PARENTREL PRECOMPUTE(ALL) OPERATOR NOAGG RELATION SALES_CHANNELS_PARENTREL PRECOMPUTE(SCHL_AGG_VSET1) OPERATOR SUM RELATION PRODUCTS_PARENTREL PRECOMPUTE(PROD_AGG_VSET1) OPERATOR SUM RELATION CONTRACT_COUNT_PARENTREL PRECOMPUTE(CONTRACT_COUNT_LEVELREL 'CONTR_COUNT_L1') OPERATOR SUM RELATION CLIENT_STATE_PARENTREL PRECOMPUTE(CLIENT_STATE_LEVELREL 'CLIENT_STATE_L2') OPERATOR SUM …END
All L1 E1 L1 E2 L2 E1 L2 E2 … … L2 Ek … … L3 E2 … … L3 Em … L4 E1 ... … … Можем ли сами даси направим “компресия”? • За даден период [tk,tm] имаме неадитивни дименсии, в чиито йерархии имаме възли само с 1 наследник Искаме OLAP engine-а точно за тези възли да използва обощения “on the fly”
Можем ли сами даси направим “компресия”? • Нуждаем се от коректен aggregation map, който да се опреснява при всяко зареждане на данните • Например: дименсиите канали на продажба и продукти са неадитивни, но в SCHL_AGG_VSET1 и PROD_AGG_VSET1 се съдържат всички елементи освен възлите с един единствен наследник
Можем ли сами даси направим “компресия”? DEFINE F_NAME FORMULA INTEGER EQ IF MONTHS GE '2003-JAN' AND MONTHS LT '2004-JAN' THEN aggregate(MEASURE_STORED using AGG_MAP1) ELSE IF MONTHS GE '2005-JAN' AND MONTHS LT '2006-JAN' THEN aggregate(MEASURE_STORED using AGG_MAP2) ELSE aggregate(MEASURE_STORED using AGG_MAP3)
SQL достъп до многодименсионните масиви • CREATE TYPE row_obj AS OBJECT ( • column_first datatype, • column_next datatype, • column_n datatype); • CREATE TYPE table_obj AS TABLE OF row_obj; • SELECT * • FROM TABLE ( • OLAP_TABLE • ( 'analytic_workspace', • 'table_obj', • 'olap_command', • 'limit_map‘ • ) ) • MODEL • DIMENSION BY(dimensions, gids) • MEASURES(measures, attributes, rowtocell) • RULES UPDATE SEQUENTIAL ORDER();
Други • Полезни изгледи: All_olap2_aw_XXXX V$AW_XXXX • Имплицитна смяна на текущото AW • Отделно temporary таблично пространство за OLAP потребителите • Проблеми с освобождаването на паметта selectsum(dbas.bytes)/1024/1024 as mb fromuser_lobs dbaljoinuser_segments dbas using (segment_name)where dbal.column_name = 'AWLOB' and dbal.table_name ='AW$ALLIANZDW'; select sum(length(AWLOB)) from AW$ALLIANZDW;
Time: May, Client Type: Private person, … Time: April 2006,…. въвВарна, Стара Загора и Бургас няма застрахователни офиси Услуги свързани с банковия бизнес
В заключение • Много е направено, но и има още какво да се желае • Работи се в нова посока: Oracle BI Suite базиран на Siebel Analytics платформата