Вы находитесь на странице: 1из 102

Universidade Estadual de Maring Centro de Tecnologia Departamento de Informtica

Data Warehouse para Sistemas de Gesto Empresarial

Douglas Rodrigo Ferreira

TFC-09-05

Maring - Paran Brasil

Universidade Estadual de Maring Centro de Tecnologia Departamento de Informtica

Data Warehouse para Sistemas de Gesto Empresarial

Douglas Rodrigo Ferreira

TFC-09-05

Trabalho Final de Curso apresentado ao Curso de Informtica, do Centro de Tecnologia, da Universidade Estadual de Maring. Orientador: Prof. Dra. Maria Madalena Dias

Maring - Paran

2005

Douglas Rodrigo Ferreira

Data Warehouse para Sistemas de Gesto Empresarial

Este exemplar corresponde redao final da monografia aprovada como requisito parcial para obteno do grau de Bacharel em Informtica da Universidade Estadual de Maring, pela banca examinadora formada pelos seguintes membros:

________________________________________ Orientador: Profa. Dra. Maria Madalena Dias Departamento de Informtica, CTC, DIN ________________________________________ Profa. Sarajane Marques Peres Departamento de Informtica, CTC, DIN ________________________________________ Prof. Jucimar de Almeida Mendes Departamento de Informtica, CTC, DIN

Maring, Dezembro de 2005

Universidade Estadual de Maring Departamento de Informtica Av. Colombo 5790, Maring-PR CEP 87020-900 Tel: (44) 2614324 Fax: (44) 2635874

Agradecimentos
Agradeo aos meus amigos que me estimularam a continuar. Agradeo de uma forma especial ao diretor da empresa em que eu trabalho Ademir Sanches Faria que acreditou no meu trabalho e na minha capacidade de chegar at o fim. Presto ainda meus agradecimentos a professora Dra. Maria Madalena Dias que me guiou no desenvolvimento deste trabalho.

Resumo
Atualmente os Sistemas de Gesto Empresarial vem concentrando um grande volume de dados baseados em operaes transacionais realizadas no sistema. Entre esses dados existe uma sries informaes que influenciam na tomada de deciso dos gestores da empresa. Estes sistemas no so capazes de oferecer a flexibilidade e a agilidade para o cruzamento de informaes e levantamento de dados histricos, seja visualizando os dados de uma forma sinttica ou de uma forma detalhada. Desta forma, este trabalho prope o desenvolvimento de um Data Warehouse para um Sistema de Gesto. Data Warehouse um banco de dados contendo dados preparados para facilitar a busca de informaes para o suporte tomada de decises. Esta forma a construo de um DW visa transformar dados brutos operacionais em dados analticos possibilitando definir metas, encontrar objetos de foco, extrair oportunidades, decises sobre estratgias futuras, interpretar comportamentos por meio de dados histricos, entre outras mais necessidades de uma empresa. O objetivo desta proposta a construo de um DW para agilizar o processo de tomada de deciso, e definio de estratgias a partir de determinados comportamentos identificados no Data Warehouse e amparar as aes tomadas em informaes concisas. O resultado deste projeto um DW para gesto empresarial. Alm disto, so geradas vises do DW atravs de ferramentas OLAP como o Microsoft Excel ou o Oracle Discoverer.

Abstract
Currently the Systems of Enterprise Management come concentrating a great volume of data based on operations do business carried through in the system. Between these data it exists series information that influence in the taking of decision of the managers of the company. These systems are not capable to offer to flexibility and the agility for the crossing of information and historical data-collecting, either visualizing the data of one form synthetic or of a detailed form. Of this form, this work considers the development of one Warehouse Date for a System of Management. of decisions. Data Warehouse is a data base contends given prepared to facilitate the search of information for the support to the taking This form the construction of a DW aims at to transform given rude operational into analytical data making possible to define goals, to find focus objects, to extract chances, decisions on future strategies, to interpret behaviors by means of historical data, among others more necessities of a company. The objective of this proposal is the construction of a DW to speed the process of decision taking, and definition of strategies from determined behaviors identified in the Date Warehouse and to support the actions taken in concise information. The result of this project is a DW for enterprise management. Moreover, views of the DW through tools OLAP are generated as the Microsoft Excel or the Oracle Discoverer.

ndice
INTRODUO...............................................................................................................................1 UMA VISO GERAL DE DATA WAREHOUSE.......................................................................2 2.1 CONCEITO DE DATA WAREHOUSE......................................................................................................2 2.2 CARACTERSTICAS DO DATA WAREHOUSE ..........................................................................................2 2.3 MODELAGEM DOS DADOS...................................................................................................................3 2.4 GRANULARIDADE..............................................................................................................................4 2.5 DATA MART....................................................................................................................................4 2.6 AMBIENTE DE DATA WAREHOUSE......................................................................................................5 2.7 MOTIVOS PARA CONSTRUO DE UM DW EM UMA ORGANIZAO.........................................................5 2.8 COMPONENTES DE UM DATA WAREHOUSE..........................................................................................6 2.9 CONSIDERAES FINAIS.....................................................................................................................6 FERRAMENTAS DE APOIO........................................................................................................7 3.1 MATERIAIS E MTODOS....................................................................................................................7 3.2 SGBD ORACLE...............................................................................................................................7 3.3 ORACLE WAREHOUSE BUILDER.........................................................................................................7 3.4 ANALYSIS MANAGER.........................................................................................................................8 3.5 MICROSOFT EXCEL...........................................................................................................................8 3.6 CONSIDERAES FINAIS.....................................................................................................................8 DESENVOLVIMENTO DO DATA WAREHOUSE....................................................................9 4.1 FONTE DE DADOS..............................................................................................................................9 4.2 DEFINIO DA ARQUITETURA..............................................................................................................9 4.3 DEFINIO DA MATRIZ DE BARRAMENTO.........................................................................................10 4.4 DEFINIO DAS TABELAS DE DIMENSES E FATOS.............................................................................10 4.5 DEFINIO DE ETL COM ORACLE WAREHOUSE BUILDER.................................................................12 ANALISANDO OS DADOS DO DATA WAREHOUSE...........................................................32 CONCLUSO ..............................................................................................................................38 REFERNCIAS BIBLIOGRFICAS ........................................................................................39 ARQUIVOS DE IMPORTAO................................................................................................40 A.1 MODELOS DOS ARQUIVOS DE IMPORTAO........................................................................................40 CDIGO FONTE .........................................................................................................................41 B.1 SQL TABELAS EXTERNAS............................................................................................................41 B.2 SQL DIMENSES........................................................................................................................66

B.3 SQL CUBO................................................................................................................................70 B.4 SQL MAPEAMENTOS..................................................................................................................72

Lista de Figuras
FIGURA 1: RELAO DE ARQUIVOS PARA IMPORTAO.............................................9 FIGURA 2: MATRIZ DE BARRAMENTO DO DW.................................................................10 FIGURA 3: FATOS E DIMENSES DO DW............................................................................10 FIGURA 4: ARQUIVOS DE IMPORTAO - OWB...............................................................13 FIGURA 5: ASSISTENTE DE IMPORTAO DE ARQUIVOS - OWB...............................14 FIGURA 6: ASSISTENTE DE IMPORTAO DE ARQUIVOS - OWB...............................15 FIGURA 7: TABELAS EXTERNAS - OWB..............................................................................16 FIGURA 8: PROPRIEDADES DAS TABELAS EXTERNAS - OWB.....................................17 FIGURA 9: DEFINIO DOS NVEIS DAS DIMENSES - OWB.......................................18 FIGURA 10: DEFINIO DOS ATRIBUTOS DOS NVEIS DAS DIMENSES - OWB.. . .19 FIGURA 11: DIMENSO DE PRODUTOS - OWB..................................................................20 FIGURA 12: CHAVES ESTRANGEIRAS DO CUBO - OWB................................................21 FIGURA 13: ATRIBUTOS DO CUBO OWB..........................................................................22 FIGURA 14: CUBO_VENDA - OWB.........................................................................................23 FIGURA 15: MAPEAMENTO DE CLIENTES -OWB.............................................................24 FIGURA 16: MAPEAMENTO DE PRODUTOS - OWB..........................................................24 FIGURA 17: MAPEAMENTO DA DIMENSO TEMPO - OWB...........................................25 FIGURA 18: EDIO DE EXPRESSES - OWB....................................................................26 FIGURA 19: GERENCIADOR DE DISPONIBILIZAO - OWB.........................................27 FIGURA 20: EXECUO DE MAPEAMENTO NO GERENCIADOR DE DISPONIBILIZAO - OWB.....................................................................................................27

FIGURA 21: TABELAS NO ORACLE ENTERPRISE MANAGER.......................................28 FIGURA 22: RESULTADO DE UMA CONSULTA - SQL PLUS WORKSHEET................29 FIGURA 23: INTERFACE - ANALYSIS MANAGER..............................................................30 FIGURA 24: PROCESSAMENTO DE CUBO - ANALYSIS MANAGER..............................31 FIGURA 25: CUBOS OLAP MICROSOFT EXCEL..............................................................32 FIGURA 26: FONTE DE DADOS MICROSOFT EXCEL....................................................32 FIGURA 27: TABELA DINMICA MICROSOFT EXCEL.................................................33 FIGURA 28: DIMENSO TEMPO MICROSOFT EXCEL..................................................34 FIGURA 29: DIMENSO PRODUTOS MICROSOFT EXCEL...........................................35 FIGURA 30: VENDAS POR VENDEDOR EM UM PERODO MICROSOFT EXCEL....36 FIGURA 31: VENDAS DE CLIENTES POR VENDEDOR MS A MS MICROSOFT EXCEL...........................................................................................................................................37

Lista de Tabelas
TABELA 1: DIMENSAO_EMPRESA........................................................................................11 TABELA 2: DIMENSAO_CLIENTEFORNEC.........................................................................11 TABELA 3: DIMENSAO_VENDEDOR.....................................................................................11 TABELA 4: DIMENSAO_TEMPO.............................................................................................11 TABELA 5: DIMENSAO_PRODUTO........................................................................................11 TABELA 6: CUB_COMPRAVENDA.........................................................................................12

Lista de siglas

DW DM ETL OLAP SGBD SQL OWB CASE

Data Warehouse Data Mart Extrao, Transformao e Carga On-Line Analytic Processing Sistema Gerenciador de Banco de Dados Struct Query Language Oracle Warehouse Builder Computer-Aided Software Engineering

Captulo 1

Introduo

Com a ampla utilizao de sistemas transacionais nas empresas, as sistematizaes dos processos vm ocorrendo gradualmente, integrando os sistemas organizacionais administrativos e operacionais com sistemas de informao. No entanto, os sistemas transacionais nem sempre atendem a demanda exigida pelas necessidades da rea de gesto da informao. Nas empresas que necessitam de informaes para definies e estratgias de trabalho, so encontrados problemas claros na falta de um sistema de apoio deciso. Muitas vezes a tomada de deciso baseada em achismos, expondo ainda mais as decises a erros. O processo de extrao das informaes tende a aumentar geometricamente de acordo com a complexidade e a granularidade das informaes, podendo tornar inviveis certos levantamentos de dados. A viso para a explorao das informaes totalmente baseada no conhecimento dos gestores. Mesmo com levantamento de informaes, nem sempre so obtidas informaes precisas, no garantindo segurana para realizao das anlises. Os sistemas transacionais so baseados nos ciclos da operao; um sistema de faturamento, por exemplo, pode ter um ciclo mensal de venda. Em alguns casos, devido a esta situao, estes sistemas no oferecem um suporte adequado consulta de dados histricos. Estes problemas podem retardar o crescimento das empresas pela no explorao de segmentos identificados por um Data Warehouse, tornando-as menos competitivas. Diante de todos estes problemas, identificou-se ento a necessidade da construo de um DW para servir como base de dados de sistemas de apoio deciso.

Captulo 2

Uma viso geral de Data Warehouse

2.1 Conceito de Data Warehouse Um Data Warehouse (DW) um banco de dados contendo dados extrados do ambiente de produo da empresa, que foram selecionados, transformados e otimizados para processamento de consulta. Ambiente de Data Warehouse combina mtodos e ferramentas destinados ao suporte deciso com uma modelagem de dados que permite gerenciar e controlar uma quantidade de dados robusta. O DW oferece uma fcil navegao entre dados resumidos e dados primitivos, provendo ao usurio a capacidade de aprofundar-se num determinado tpico, investigando nveis de agregao menores ou mesmo o prprio dado primitivo, que muitas vezes pode vir a ser essencial para a tomada de deciso. Logo, o DW o processo de integrao de dados corporativos de uma empresa em um nico repositrio, a partir do qual os usurios finais podem, facilmente, realizar consultas, gerar relatrios e fazer anlises. Um DW um ambiente de suporte tomada de deciso que alavanca os dados armazenados em diferentes fontes e os organiza e entrega aos tomadores de decises da empresa (Singh, 2001). 2.2 Caractersticas do Data Warehouse O DW possui as seguintes caractersticas (Inmon, 1997): Orientado por assuntos: um DW sempre armazena dados importantes sobre temas especficos da organizao e conforme o interesse das pessoas que iro utiliz-lo; Integrado: um DW deve ser capaz de integrar dados provenientes de fontes de dados distintas para obter uma representao nica;

Variante no tempo: os dados so dependentes do tempo. A cada mudana ocorrida na base de dados operacional, uma nova entrada deve ser criada no DW, a fim de representar essa mudana. Dessa forma garante-se o histrico das alteraes ocorridas nos dados. Esta caracterstica pode ser exemplificada com as mudanas de endereo de um cliente. Em uma poca as vendas para o cliente foram realizadas em um endereo, em outra poca, ele pode ter mudado o seu endereo.

No voltil: uma vez que o dado inserido no DW, ele no pode ser modificado ou excludo. Sempre que houver atualizao do mesmo, um novo item de dado criado para representar essa mudana.

2.3 Modelagem dos dados Um dos assuntos mais crticos na construo de um DW a compreenso dos dados. A criao de um modelo de dados o melhor caminho para entender os dados. O DW utiliza a modelagem dimensional como uma tcnica que suporta o ambiente para anlise multidimensional dos dados. O objetivo no projeto do modelo de um DW deixlo com um fcil entendimento, simples para se carregar com dados operacionais e trazer resultados de consultas o mais rpido possvel. Modelagem dimensional a tcnica em que o modelo proporciona uma representao do banco de dados consistente com o modo que o usurio visualiza e navega pelo DW, combinando tabelas com dados histricos em sries temporais, cujo contexto descrito atravs de tabelas de dimenses. A modelagem dimensional tem como conceito, trs elementos principais: Fatos: Um fato uma coleo de dados. Cada fato representa um item de negcio, uma transao ou um evento de negcio. Os fatos so utilizados para fazer a anlise sobre a empresa, ou a instituio. Fato tudo aquilo que reflete a evoluo dos negcios do dia-a-dia de uma organizao (MACHADO, 2000). Dimenses: Dimenses so os elementos que participam de um fato, como por exemplo: tempo, localizao e cliente. A dimenso pode ser organizada de maneira hierrquica, sendo constituda de vrios nveis.

Medidas: As medidas so os atributos numricos que representam um fato. Cada medida constituda pela combinao de dimenses que esto em um fato. Um exemplo de medida o nmero de publicaes de um determinado autor em um ano.

O modelo dimensional permite a visualizao de dados na forma de um cubo, onde cada dimenso do cubo representa o contexto de um determinado fato e a interseco entre as dimenses representa as medidas. Matematicamente, o cubo possui apenas trs dimenses. Entretanto, no modelo dimensional, a metfora do cubo pode possuir quantas dimenses forem necessrias para representar um determinado fato (MACHADO, 2000). Por este motivo, este modelo tambm chamado de modelo multidimensional. Dentre os modelos de dados dimensionais, o mais comum o modelo estrela. O modelo estrela possui uma entidade central denominada tabela de fatos e um conjunto de entidades menores, as tabelas de dimenses, relacionadas com a tabela de fatos. 2.4 Granularidade A granularidade est relacionada com o nvel de detalhe em que sero armazenados os dados no DW, sendo que ela inversamente proporcional ao nvel de detalhe, ou seja, quanto maior a granularidade menor o nvel de detalhe. A granularidade afeta o desempenho das consultas e o volume dos dados tendo, portanto, uma grande importncia para o projeto. Nenhum outro aspecto de projeto ter importncia se a granularidade no for conduzida de forma apropriada e se o particionamento no for cuidadosamente projetado e implementado (Inmon, 1997). O nvel de granularidade deve ser definido no incio do projeto, mas muito difcil determinar esta granularidade, sendo que geralmente a melhor soluo consiste em estruturas com alguns nveis de granularidade. Geralmente utilizada a opo de mltiplos nveis de granularidade, em que se parte de um baixo nvel de granularidade, passando por nveis intermedirios at um alto nvel de granularidade. 2.5 Data Mart Data Mart um subconjunto de dados do DW que permite o acesso descentralizado das informaes. O DW relaciona a empresa toda, permitindo uma viso global do negcio, enquanto que o Data Mart direcionado a um departamento ou a uma rea especfica do negcio. 4

Como o Data Mart direcionado a uma rea especfica do negcio, o volume de dados bem menor que no DW e sua implementao bem mais rpida e a um custo mais baixo em relao a um DW. 2.6 Ambiente de Data Warehouse A tecnologia de Data Warehousing considerada por todos os autores como a evoluo natural do Ambiente de Apoio Deciso. Sua crescente utilizao pelas empresas est relacionada necessidade do domnio de informaes estratgicas para garantir respostas e aes rpidas assegurando a competitividade de um mercado altamente competitivo e mutvel. Dentre os fatores que contriburam para essa absoro, merecem destaque: os avanos tecnolgicos, as mudanas organizacionais e estruturais nos negcios, a abertura de mercados e a globalizao da economia. Com o advento da tecnologia de Data Warehousing, os Ambientes de Apoio Deciso passaram a ser denominados Ambientes de Data Warehouse. Este novo ambiente contm como repositrios principais os Data Marts que, por sua vez, compem o denominado Data Warehouse. O principal objetivo do Data Warehouse disponibilizar informaes para apoio a decises da empresa. A construo de um Data Warehouse exige a transferncia e transformao dos dados existentes em sistemas corporativos, utilizados nas operaes dirias de controle e operaes, para uma base de dados independente que ficar disponibilizada para os usurios e mantida por meio de processo diferenciado dos sistemas em operao transacional normais. 2.7 Motivos para construo de um DW em uma organizao Segundo Singh (2001), os motivos para a construo de um DW em uma organizao podem ser: Vrias plataformas de hardware e de software; Constantes alteraes nos sistemas transacionais corporativos;

Dificuldade acentuada na recuperao de dados histricos em perodos superiores ao ano atual de operaes; Existncia de sistemas pacotes de fornecedores diferentes; Falta de padronizao e integrao dos dados existentes nos diversos sistemas; Carncia de documentao e segurana no armazenamento dos dados;

2.8 Componentes de um Data Warehouse O DW possui os seguintes componentes (KIMBALL, 2002): Sistemas transacionais de origem: so os sistemas de origem dos dados da empresa. Data Staging Area: A rea de estgio dos dados do DW uma rea de armazenamento para a realizao de processos de transformao ETL (ExtractTransformation-Load). A rea de estgio dos dados abrange tudo entre os sistemas operacionais de origem e a rea de apresentao de dados. Apresentao dos dados: A rea de apresentao dos dados o local em que os dados ficam organizados, armazenados e tambm onde os data marts ficam integrados e tornam-se disponveis para serem consultados diretamente pelos usurios. Ferramentas de acesso a dados: Ferramentas OLAP (On-Line Analytical Processing), que permitem anlise e gerenciamento dos dados atravs dos cubos de uma forma visual. 2.9 Consideraes Finais Neste captulo foi apresentada uma viso geral sobre Data Warehousing, bem como suas principais caractersticas, conceitos para modelagem, motivos para construo e os principais componentes.

Captulo 3

Ferramentas de apoio
3.1 Materiais e Mtodos Para o desenvolvimento de um DW necessrio um SGBD (Sistema Gerenciador de Banco de Dados) para armazenar e gerenciar os dados, ferramentas CASE (ComputerAided Software Engineering) e ETL para o projeto e povoamento do DW. Para analisar os dados foram utilizadas ferramentas OLAP. Neste trabalho foram utilizados o SGBD Oracle, a ferramenta CASE e ETL Oracle Warehouse Builder (OWB), o Microsoft Excel como ferramenta OLAP sendo que para o funcionamento desta ltima ferramenta necessrio ter o Microsoft SQL Server Analysis Manager. A seguir algumas consideraes sobre estas ferramentas. 3.2 SGBD Oracle Este SGBD possui muitos recursos que do um amplo suporte tarefa de gerenciamento dos dados de um ambiente operacional, como tambm na construo de um ambiente analtico. Ele possui utilitrios para extrair dados das origens, recursos para transformar estes dados e para carreg-los no DW. Ele tambm oferece recursos para agilizar o acesso aos dados, fazer backup e manter a segurana no DW. 3.3 Oracle Warehouse Builder O Oracle Warehouse Builder (OWB) um aplicativo de mltiplas camadas: interface com o usurio, gerador de cdigo, integradores, interface de aplicativo Java e o repositrio de metadados. Juntas essas camadas formam um produto ETL integrado que auxilia na construo e na manuteno do DW. A integrao do OWB com o SGBD Oracle permite que ele opere diferentemente de outras ferramentas ETL. Primeiramente, o OWB gera scripts que trazem os dados para o SGBD e, ento, explora seus recursos gerando cdigo PL/SQL para ajud-lo a transformar e carregar 7

os dados no DW. O SGBD Oracle tem seu prprio mecanismo de transformao, com a vantagem de um carregamento otimizado. A interface do OWB foi desenvolvida em Java, sendo portanto a mesma ferramenta para qualquer SO (OracleWB, 2003). 3.4 Analysis Manager O Analysis Manager um software do Microsoft SQL Server. No entanto funciona independentemente do SGBD Microsoft, sendo compatvel com vrios outros SGBDs. O Analysis Manager tem como funo gerar e disponibilizar um cubo OLAP entre outras mais funes. 3.5 Microsoft Excel O Microsoft Excel possui recursos para conexo com fontes de dados OLAP, possui ainda recursos como tabela e grfico dinmicos para visualizao dos cubos.

3.6 Consideraes Finais Muitos fornecedores de solues para DWs procuram oferecer todas as ferramentas de forma integrada. A vantagem que o desenvolvimento com esse tipo de ferramenta geralmente realizado em torno de um repositrio de metadado, tornando o projeto e a manuteno do sistema muito mais simplificado. A desvantagem quanto ao desenvolvimento do projeto ficar a merc de nico fornecedor, sendo que muitas vezes as solues oferecidas para determinada etapa do projeto podem no ser as melhores se comparadas as existentes no mercado. Neste trabalho optou-se por utilizar as ferramentas da Oracle para SGBD e ETL pela qualidade das ferramentas. No entanto para o servidor OLAP e ferramenta de consulta foi utilizado as ferramentas da Microsoft, devido a alta popularidade e facilidade de uso do Microsoft Excel.

Captulo 4

Desenvolvimento do Data Warehouse


4.1 Fonte de dados Os dados foram extrados de uma base de dados do sistema de uma distribuidora de materiais de construo. O sistema da distribuidora (SGE) mantido pela empresa Id Brasil Sistemas. Os arquivos de dados utilizam extenso dbf, no entanto, eles foram formatados na extenso csv (texto separado por ponto e vrgula) para a importao pelo Oracle Warehouse Builder. A Figura 1 mostra a relao dos arquivos do SGE que foram utilizados: Arquivo db051.dbf db055.dbf db056.dbf db057.dbf db063.dbf db072.dbf db079.dbf db204.dbf db059.dbf db083.dbf db084.dbf Descrio Tabela de produtos Tabela de clientes Tabela de subgrupo de produto Tabela de grupo de subgrupo Tabela de fornecedores Tabela de marcas de produtos Tabela de notas fiscais Tabela de produtos da nota Tabela de regio Tabela de vendedores Tabela de empresas
Figura 1: Relao de arquivos para importao

4.2 Definio da arquitetura Para a definio da arquitetura, inicialmente foi definida a matriz de barramento e posteriormente a definio das tabelas de fato e de dimenses.

4.3 Definio da Matriz de Barramento Atravs das informaes obtidas nas tabelas do SGE foi definida ento a matriz de barramento para a elaborao do DW, representada na Figura 2. Empresa X X Cliente X Fornecedor Vendedor X X
Figura 2: Matriz de Barramento do DW.

Venda Compra

Tempo X X

Produto X X

4.4 Definio das Tabelas de Dimenses e Fatos A Figura 3 mostra o Modelo Entidade-Relacionamento do DW definido e as Tabelas 1,2,3,4,5 e 6 relacionam os atributos, e suas caractersticas, das tabelas de dimenso e de fato do DW.
DER PROJETO DW
Dimensao_ClienteFornec PK ChaveClienteFornec RazaoSocial Fantasia TipoPessoa Regiao Endereco Bairro Cidade Estado TipoCli Classificacao

Dimensao _Tempo PK ChaveTempo Dia Mes Ano

Fato_CompraVenda

FK4 FK1 FK5 FK3 FK2

Dimensao_Produto PK ChaveProduto Produto CodMarca Marca CodSubGrupo SubGrupo CodGrupo Grupo

ChaveEmpresa ChaveClienteFornec ChaveVendedor ChaveTempo ChaveProduto Qtde PrecoVCDesc PrecoCompra Desconto ValorTotal Ascresc ValorUnit PrazoMedio MargemLucro TipoReg

Dimensao_Vendedor PK ChaveVendedor Vendedor

Dimensao_Empresa PK ChaveEmpresa RazaoSocial Cidade Estado

Figura 3: Fatos e dimenses do DW.

10

Tabela 1: Dimensao_Empresa Nome da Coluna Tipo ChaveEmpresa NUMBER RazaoSocial VARCHAR Cidade VARCHAR Estado VARCHAR Tabela 2: Dimensao_ClienteFornec Nome da Coluna Tipo ChaveClienteFornec NUMBER RazaoSocial Fantasia TipoPessoa Regiao Endereo Bairro Cidade TipoCli Classificao VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR

Tamanho 50 40 02 Tamanho 50 50 01 40 50 40 40 01 01

Descrio Identificador da empresa (Sequencial) Razo social da empresa Cidade da empresa Estado da empresa Descrio Identificador de cliente e fornecedor (Sequencial) Razo social Fantasia Tipo de pessoa [F]isica, [J]uridica Regio do cliente Endereo Bairro Cidade [C]liente, [F]ornecedor [R]uim, Re[g]ular, [B]om, [E]xcelente

Tabela 3: Dimensao_Vendedor Nome da Coluna Tipo Tamanho ChaveVendedor NUMBER Vendedor VARCHAR 50 Tabela 4: Dimensao_Tempo Nome da Coluna Tipo ChaveTempo DATE Dia NUMBER Ms NUMBER Ano NUMBER

Descrio Identificador do vendedor (Sequencial) Nome do vendedor

Tamanho

Descrio Identificador de tempo Nmero do dia do ms Nmero do ms do ano Ano

Tabela 5: Dimensao_Produto Nome da Coluna Tipo Tamanho ChaveProduto NUMBER Produto VARCHAR 40 CodMarca NUMBER Marca VARCHAR 40 CodSubGrupo NUMBER SubGrupo VARCHAR CodGrupo NUMBER Grupo VARCHAR

Descrio Identificador do produto (Sequencial) Descrio do produto Cdigo da marca Descrio da marca Cdigo do SubGrupo Descrio do SubGrupo Cdigo do grupo Descrio do grupo

11

Tabela 6: Cub_CompraVenda Nome da Coluna Tipo ChaveEmpresa NUMBER ChaveClienteFornec ChaveVendedor ChaveTempo ChaveProduto Qtde PrecoVCDesc PrecoCompra Desconto ValorTotal Acresc ValorUnit PrazoMedio MargemLucro TipoReg NUMBER NUMBER DATE NUMBER FLOAT FLOAT

Tamanho

FLOAT FLOAT FLOAT FLOAT FLOAT NUMBER FLOAT VARCHAR 01

Descrio Identificador da empresa (FK Dimenso) Identificador de cliente e fornecedor (FK Dimenso) Identificador do vendedor (FK Dimenso) Identificador de tempo (FK Dimenso) Identificador do produto (FK Dimenso) Quantidade de venda do produto Preo de venda com desconto e acrscimo Preo de compra do produto Valor do desconto ValorUnit * Qtde Valor de acrscimo na venda Valor unitrio de venda do produto Nmero do prazo mdio Margem de lucro do produto [C]ompra, [V]enda

4.5 Definio de ETL com Oracle Warehouse Builder Com o Oracle Warehouse Builder deve-se inicialmente importar todos os arquivos que sero utilizados para o DW, o OWB oferece um Wizard para a importao dos arquivos. Neste wizard pode ser definido todos os parmetros do arquivo, como separao de campos, tipo de dados, mascara de formatao etc. A Figura 4 mostra a relao dos arquivos que sero manipulados para importao.

12

Figura 4: Arquivos de importao - OWB.

As Figuras 5 e 6 mostram a interface do assistente de importao dos arquivos do OWB.

13

Figura 5: Assistente de importao de arquivos - OWB.

14

Figura 6: Assistente de importao de arquivos - OWB.

Aps a importao dos arquivos devem ser criadas as tabelas externas a partir dos arquivos importados. O Oracle visualiza as tabelas externas como uma tabela comum permitindo a realizao de comandos SQL utilizando recursos avanados como Joins, Unions etc., conforme pode ser visto nas Figuras 7 e 8.

15

Figura 7: Tabelas externas - OWB.

16

Figura 8: Propriedades das tabelas externas - OWB.

A seguir, devem ser criadas as dimenses que sero utilizadas pelo cubo. na criao das dimenses j deve ser definido seus respectivos nveis e as hierarquias. As Figuras 9, 10 e 11 mostram as interfaces do OWB para a criao das dimenses e definio de suas propriedades.

17

Figura 9: Definio dos nveis das dimenses - OWB

18

Figura 10: Definio dos atributos dos nveis das dimenses - OWB.

19

Figura 11: Dimenso de produtos - OWB.

Aps a criao das dimenses deve ser criado o cubo referenciando as dimenses que sero utilizadas, conforme pode ser visto nas Figuras 12, 13 e 14.

20

Figura 12: Chaves estrangeiras do cubo - OWB.

21

Figura 13: Atributos do cubo OWB.

22

Figura 14: Cubo_venda - OWB.

Aps a definio das dimenses, das tabelas externas e dos cubos, deve ser criado o processo de mapeamento, que responsvel pela alimentao do DW e transformao dos dados. Os mapeamentos foram divididos para cada dimenso e cubo. Para o mapeamento da dimenso de clientes foi realizado juno com as tabelas de cidade e de regio. No mapeamento da dimenso de produtos foi necessrio realizar juno com as tabelas de subgrupo, grupo e marca. O mapeamento de tempo foi extrado da tabela externa de vendas, inicialmente foi realizado um filtro para datas no nulas, posteriormente, foi inserido o desduplicador (distinct) para no carregar datas iguais da tabela, estas datas foram ordenadas em ordem ascendente e foi utilizado tambm expresses para que ano, ms e dia fossem desmembrados. As Figuras 15 e 16 mostram graficamente a realizao das junes necessrias. 23

Figura 15: Mapeamento de clientes -OWB

Figura 16: Mapeamento de produtos - OWB.

24

As Figuras 17 e 18 mostram como o atributo data foi transformado e carregado na tabela de dimenso Tempo.

Figura 17: Mapeamento da dimenso tempo - OWB.

25

Figura 18: Edio de expresses - OWB.

Com todos os mapeamentos definidos deve-se ento utilizar o Gerenciador de Disponibilizao que tem como funo criar fisicamente no banco de dados a estrutura definida no OWB, tambm possvel realizar a execuo dos mapeamentos. As Figuras 19 e 20 mostram o gerenciador de disponibilizao.

26

Figura 19: Gerenciador de disponibilizao - OWB.

Figura 20: Execuo de mapeamento no Gerenciador de disponibilizao - OWB.

27

Aps a execuo dos mapeamentos possvel ver no Banco de dados a importao e o processamento realizado pelo OWB, pelo SQL* PLUS e pelo Oracle Enterprise Manager. A Figura 21 mostra o OEM e a Figura 22 mostra o resultado de um select na dimenso de Produtos.

Figura 21: Tabelas no Oracle Enterprise Manager.

28

Figura 22: Resultado de uma consulta - SQL Plus worksheet.

Nesta fase o DW j est povoado, faltando portando a criao do Cubo OLAP para consulta. Para isto ser utilizado Analisys Manager que Servidor OLAP utilizado pelo Microsoft Excel. Aps a configurao do Analisys Manager para funcionamento com o Oracle devem ser realizados os seguintes passos: Carregar as dimenses e os cubos que sero utilizados; Referenciar todas as dimenses utilizadas pelo cubo; Processar o cubo;

A Figura 23 mostra a interface do Analysis Manager.

29

Figura 23: Interface - Analysis Manager.

A Figura 24 mostra o processamento do cubo.

30

Figura 24: Processamento de cubo - Analysis Manager.

Aps o processamento o cubo j pode ser consultado pelo Microsoft Excel.

31

Captulo 5

Analisando os dados do Data Warehouse


A anlise das informaes existentes no DW foram realizadas no Microsoft Excel, utilizando tabela dinmica. Deve ser configurado inicialmente qual cubo OLAP ser utilizado na importao de dados externos do Microsoft Excel conforme as Figuras 25 e 26.

Figura 25: Cubos OLAP Microsoft Excel.

Figura 26: Fonte de dados Microsoft Excel.

32

Aps a configurao do cubo OLAP ser disponibilizado uma tabela dinmica, e uma lista de campos disponveis para realizao das consultas. Uma tabela dinmica divide a visualizao dos campos em: campos de pgina (cabealho), campos de linha e campos de coluna. Nesta etapa possvel compreender o porqu do nome de cubo, pois os dados podem ser visualizados em vrias dimenses. A Figura 27 mostra a tabela dinmica sem nenhum campo inserido.

Figura 27: Tabela dinmica Microsoft Excel.

As dimenses de tempo e produto podem ser visualizadas de forma hierrquica, dos dados resumidos at o mais detalhado. Esta estrutura permite uma fcil navegao entre informaes resumidas e detalhadas, podendo selecionar um ano ou um dia na tabela de tempo para visualizao das vendas, como mostra a Figura 28 e 29.

33

Figura 28: Dimenso Tempo Microsoft Excel.

34

Figura 29: Dimenso Produtos Microsoft Excel.

Arrastando os campos para a tabela dinmica possvel montar as consultas das formas mais variadas, o exemplo abaixo ilustra uma consulta de vendas por vendedor mensal, o outro exemplo uma consulta de vendas por vendedor de clientes ms a ms.

35

Figura 30: Vendas por vendedor em um perodo Microsoft Excel.

36

Figura 31: Vendas de clientes por vendedor ms a ms Microsoft Excel.

37

Concluso
Este trabalho objetivou a construo de um ambiente de apoio a tomada de deciso de gesto empresarial, aumentando assim a capacidade de extrao de informao e reconhecimento dos dados. A maior contribuio deste trabalho o conhecimento da tecnologia de Data Warehousing e a identificao de um segmento de trabalho a ser explorado. Durante o desenvolvimento deste projeto surgiram muitos problemas e dificuldades. A primeira das dificuldades foi instalar e configurar as ferramentas necessrias para o desenvolvimento, gerenciamento e utilizao do ambiente. Outra dificuldade surgiu na fase de desenvolvimento do DW. A etapa mais crtica dessa fase foi a de extrao dos dados da base de dados operacional, devido a erros na formatao dos arquivos para importao. Por meio deste trabalho pde-se adquirir muita experincia no desenvolvimento de sistemas de apoio tomada de deciso, bem como no aperfeioamento do conhecimento de algumas ferramentas e aprendizado de outras. Com relao a trabalhos futuros que possam complementar o que foi desenvolvido, destacam-se: A adio de novos assuntos ao Data Warehouse como financeiro e estoque. Criao de uma rotina de atualizao do DW. Melhorias nas dimenses.

38

Referncias Bibliogrficas

(Machado, 2000)

MACHADO, Felipe N. R. Projeto de Data Warehouse Uma viso Multidimensional, Ed. rica: So Paulo, 2000.

(Inmon, 1997)

INMON, W. H. Como Construir o Data Warehouse, Ed. Campus: Rio de Janeiro, 1997.

(Kimball, 2002)

KIMBALL, Ralph; MARGY, Ross. The Data Warehouse Toolkit Guia Completo para Modelagem Dimensional, Ed. Campus: Rio de Janeiro, 2002

(Singh, 2001)

SINGH, Harry S. Data Warehouse - Conceitos, Tecnologias, Implementaco e Gerenciamento, Ed. Makron Books: So Paulo, 2001.

(OracleWB, 2003)

Oracle Warehouse Builder Users Guide. Na Oracle Technical White Paper. Julho, 2003

39

Apndice A

Arquivos de importao
A.1 Modelos dos arquivos de importao
2,2720,20040401,3,"V",5100,4.000,22.99000,17.980,0.000,"X" 2,5016,20040401,7,"V",494,30.000,0.84600,0.576,0.000,"X" 2,5016,20040401,7,"V",1561,24.000,0.20800,0.141,0.000,"X" 2,5016,20040401,7,"V",1562,24.000,0.26000,0.177,0.000,"X" 2,5016,20040401,7,"V",1564,48.000,0.53400,0.364,0.000,"X" 2,5016,20040401,7,"V",1904,5.000,2.63100,1.778,0.000,"X" 2,5016,20040401,7,"V",2128,5.000,4.17500,2.821,0.000,"X" 2,5016,20040401,7,"V",2875,3.000,2.79000,2.097,0.000,"X" 2,5016,20040401,7,"V",4041,6.000,0.42000,0.280,0.000,"X" 2,5016,20040401,7,"V",4091,6.000,0.34700,0.228,0.000,"X" 2,5016,20040401,7,"V",4451,100.000,0.18400,0.120,0.000,"X" 2,5016,20040401,7,"V",55210,1.000,60.35700,44.056,0.000,"X" 2,5016,20040401,7,"V",55211,1.000,60.35700,44.056,0.000,"X" 2,5016,20040401,7,"V",71008,1.000,25.77000,21.560,0.000,"X" 2,5016,20040401,7,"V",72002,1.000,7.99000,5.100,0.000,"X" 2,3662,20040401,3,"V",5555,1.000,56.58800,40.400,0.000,"X" 2,3662,20040401,3,"V",50042,30.000,0.30300,0.206,0.000,"X" 2,313,20040401,2,"V",1024,12.000,7.49000,5.670,0.000,"X" 2,313,20040401,2,"V",4155,10.000,6.99000,5.480,0.000,"X" 2,313,20040401,2,"V",91015,12.000,0.97900,0.680,0.000,"X" 2,313,20040401,2,"V",91023,24.000,0.99000,0.712,0.000,"X" 2,313,20040401,2,"V",91112,12.000,0.95000,0.660,0.000,"X" 2,313,20040401,2,"V",91137,12.000,0.96500,0.670,0.000,"X" 2,313,20040401,2,"V",91155,12.000,0.97800,0.679,0.000,"X" 2,313,20040401,2,"V",91171,24.000,0.98200,0.687,0.000,"X" 2,1123,20040401,2,"V",211,180.000,0.20500,0.133,0.000,"X" 2,1123,20040401,2,"V",1048,1.000,21.27100,14.372,0.000,"X" 2,1123,20040401,2,"V",1224,12.000,2.81000,1.899,0.000,"X" 2,1123,20040401,2,"V",2355,12.000,1.83100,1.237,0.000,"X" 2,1123,20040401,2,"V",4119,12.000,1.86900,1.263,0.000,"X" 2,1123,20040401,2,"V",50070,12.000,1.83800,1.450,0.000,"X" 2,1123,20040401,2,"V",51007,10.000,8.52500,5.760,0.000,"X" 2,1123,20040401,2,"V",61059,6.000,6.39000,5.030,0.000,"X"

40

Apndice B

Cdigo Fonte
B.1 SQL Tabelas externas WHENEVER SQLERROR EXIT FAILURE;

CREATE TABLE "EXT_DB051" ( "C_001" NUMBER, "C_002" VARCHAR2(40), "C_003" NUMBER, "C_004" NUMBER, "C_006" VARCHAR2(5), "C_007" VARCHAR2(5), "C_008" NUMBER, "C_009" VARCHAR2(5), "C_010" VARCHAR2(5), "C_011" VARCHAR2(5), "C_012" VARCHAR2(5), "C_013" VARCHAR2(5), "C_015" VARCHAR2(5), "C_016" VARCHAR2(5), "C_018" VARCHAR2(5), "C_019" VARCHAR2(5), "C_020" VARCHAR2(5), "C_021" VARCHAR2(5), "C_022" VARCHAR2(5), "C_023" VARCHAR2(5), "C_024" VARCHAR2(5), "C_025" VARCHAR2(5), 41

"C_026" VARCHAR2(5), "C_027" VARCHAR2(5), "C_028" VARCHAR2(5), "C_029" VARCHAR2(5), "C_030" VARCHAR2(5), "C_031" VARCHAR2(5), "C_032" VARCHAR2(6), "C_034" VARCHAR2(5), "C_035" VARCHAR2(5), "C_036" VARCHAR2(5), "C_042" NUMBER, "C_043" VARCHAR2(5), "C_044" NUMBER) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY BASE_CONECTOR ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252 STRING SIZES ARE IN BYTES BADFILE BASE_CONECTOR:'PROD_ERRO.TXT' NODISCARDFILE LOGFILE BASE_CONECTOR:'PROD_LOG.TXT' FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' AND '"' NOTRIM ( "C_001" , "C_002" , "C_003" , "C_004" , "C_006" , 42

"C_007" , "C_008" , "C_009" , "C_010" , "C_011" , "C_012" , "C_013" , "C_015" , "C_016" , "C_018" , "C_019" , "C_020" , "C_021" , "C_022" , "C_023" , "C_024" , "C_025" , "C_026" , "C_027" , "C_028" , "C_029" , "C_030" , "C_031" , "C_032" , "C_034" , "C_035" , "C_036" , "C_042" , "C_043" , "C_044" ) ) LOCATION ( 43

BASE_CONECTOR:'DB051.csv' ) ) REJECT LIMIT UNLIMITED NOPARALLEL ;

CREATE TABLE "EXT_DB053" ( "C_001" NUMBER, "C_002" VARCHAR2(40), "C_003" VARCHAR2(18), "C_004" VARCHAR2(18), "C_005" VARCHAR2(37), "C_006" VARCHAR2(13), "C_007" VARCHAR2(7), "C_008" VARCHAR2(2)) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY BASE_CONECTOR ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252 STRING SIZES ARE IN BYTES BADFILE 'PROD_ERRO.TXT' NODISCARDFILE LOGFILE 'PROD_LOG.TXT' FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' AND '"' NOTRIM ( 44

"C_001" , "C_002" , "C_003" , "C_004" , "C_005" , "C_006" , "C_007" , "C_008" ) ) LOCATION ( BASE_CONECTOR:'DB053.csv' ) ) REJECT LIMIT UNLIMITED NOPARALLEL ; CREATE TABLE "EXT_DB054" ( "C_001" NUMBER, "C_002" VARCHAR2(40), "C_003" VARCHAR2(39), "C_004" VARCHAR2(40), "C_005" VARCHAR2(21), "C_006" VARCHAR2(29), "C_007" VARCHAR2(5), "C_008" VARCHAR2(17), "C_009" VARCHAR2(15), "C_010" VARCHAR2(18), "C_011" VARCHAR2(16), "C_012" VARCHAR2(10), "C_013" VARCHAR2(30), 45

"C_014" NUMBER, "C_015" VARCHAR2(5), "C_016" VARCHAR2(5), "C_018" VARCHAR2(5), "C_019" VARCHAR2(18), "C_020" VARCHAR2(36), "C_021" VARCHAR2(5), "C_022" VARCHAR2(23), "C_023" VARCHAR2(5), "C_024" VARCHAR2(20), "C_025" VARCHAR2(13), "C_026" VARCHAR2(5), "C_027" VARCHAR2(5), "C_028" VARCHAR2(28), "C_029" VARCHAR2(18), "C_030" VARCHAR2(5), "C_031" VARCHAR2(5), "C_032" VARCHAR2(5), "C_033" VARCHAR2(8), "C_034" VARCHAR2(5)) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY BASE_CONECTOR ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252 STRING SIZES ARE IN BYTES BADFILE 'PROD_ERRO.TXT' NODISCARDFILE LOGFILE 'PROD_LOG.TXT' SKIP 1 FIELDS TERMINATED BY ';' 46

OPTIONALLY ENCLOSED BY '"' AND '"' NOTRIM ( "C_001" , "C_002" , "C_003" , "C_004" , "C_005" , "C_006" , "C_007" , "C_008" , "C_009" , "C_010" , "C_011" , "C_012" , "C_013" , "C_014" , "C_015" , "C_016" , "C_018" , "C_019" , "C_020" , "C_021" , "C_022" , "C_023" , "C_024" , "C_025" , "C_026" , "C_027" , "C_028" , "C_029" , "C_030" , "C_031" , 47

"C_032" , "C_033" , "C_034" ) ) LOCATION ( BASE_CONECTOR:'DB054.csv' ) ) REJECT LIMIT UNLIMITED NOPARALLEL ; CREATE TABLE "EXT_DB055" ( "C_001" NUMBER, "C_002" VARCHAR2(1), "C_003" VARCHAR2(40), "C_004" VARCHAR2(40), "C_005" VARCHAR2(40), "C_007" VARCHAR2(30), "C_008" VARCHAR2(5), "C_009" VARCHAR2(15), "C_010" VARCHAR2(15), "C_011" VARCHAR2(18), "C_012" VARCHAR2(15), "C_013" VARCHAR2(5), "C_014" VARCHAR2(1), "C_015" VARCHAR2(10), "C_016" VARCHAR2(30), "C_017" VARCHAR2(5), "C_018" VARCHAR2(8), "C_019" VARCHAR2(5), 48

"C_020" VARCHAR2(9), "C_021" VARCHAR2(36), "C_022" VARCHAR2(10), "C_025" VARCHAR2(7), "C_026" VARCHAR2(37), "C_029" NUMBER, "C_030" NUMBER, "C_037" VARCHAR2(5), "C_038" VARCHAR2(5), "C_039" VARCHAR2(5), "C_040" VARCHAR2(5), "C_041" VARCHAR2(5), "C_050" VARCHAR2(5), "C_062" VARCHAR2(20), "C_063" VARCHAR2(20), "C_064" VARCHAR2(20), "C_065" VARCHAR2(20), "C_072" VARCHAR2(5), "C_073" VARCHAR2(7), "C_074" VARCHAR2(10), "C_075" VARCHAR2(7), "C_076" VARCHAR2(9), "C_077" VARCHAR2(7), "C_078" NUMBER, "C_079" VARCHAR2(5), "C_080" VARCHAR2(5), "C_083" VARCHAR2(5), "C_088" VARCHAR2(5), "C_089" VARCHAR2(5), "C_090" VARCHAR2(46), "C_091" NUMBER, "C_092" VARCHAR2(10), "C_093" VARCHAR2(5), 49

"C_094" VARCHAR2(9), "C_095" VARCHAR2(10), "C_096" VARCHAR2(5), "C_097" VARCHAR2(1)) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY BASE_CONECTOR ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252 STRING SIZES ARE IN BYTES BADFILE 'PROD_ERRO.TXT' NODISCARDFILE LOGFILE 'PROD_LOG.TXT' FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' AND '"' NOTRIM ( "C_001" , "C_002" , "C_003" , "C_004" , "C_005" , "C_007" , "C_008" , "C_009" , "C_010" , "C_011" , "C_012" , "C_013" , "C_014" , "C_015" , 50

"C_016" , "C_017" , "C_018" , "C_019" , "C_020" , "C_021" , "C_022" , "C_025" , "C_026" , "C_029" , "C_030" , "C_037" , "C_038" , "C_039" , "C_040" , "C_041" , "C_050" , "C_062" , "C_063" , "C_064" , "C_065" , "C_072" , "C_073" , "C_074" , "C_075" , "C_076" , "C_077" , "C_078" , "C_079" , "C_080" , "C_083" , "C_088" , "C_089" , 51

"C_090" , "C_091" , "C_092" , "C_093" , "C_094" , "C_095" , "C_096" , "C_097" ) ) LOCATION ( BASE_CONECTOR:'DB055.csv' ) ) REJECT LIMIT UNLIMITED NOPARALLEL ;

WHENEVER SQLERROR EXIT FAILURE;

CREATE TABLE "EXT_DB056" ( "C_001" NUMBER, "C_002" VARCHAR2(11)) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY BASE_CONECTOR ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252 STRING SIZES ARE IN BYTES 52

BADFILE BASE_CONECTOR:'GRUPO_ERRO.TXT' NODISCARDFILE LOGFILE BASE_CONECTOR:'GRUPO_LOG.TXT' SKIP 1 FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' AND '"' NOTRIM ( "C_001" , "C_002" ) ) LOCATION ( BASE_CONECTOR:'DB056.csv' ) ) REJECT LIMIT UNLIMITED NOPARALLEL ;

CREATE TABLE "EXT_DB063" ( "C_001" NUMBER, "C_002" NUMBER, "C_003" VARCHAR2(35)) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY BASE_CONECTOR ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252 53

STRING SIZES ARE IN BYTES BADFILE 'GRUPO_ERRO.TXT' NODISCARDFILE LOGFILE BASE_CONECTOR:'VENDEDOR_LOG.TXT' FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' AND '"' NOTRIM ( "C_001" , "C_002" , "C_003" ) ) LOCATION ( BASE_CONECTOR:'DB063.csv' ) ) REJECT LIMIT UNLIMITED NOPARALLEL ; CREATE TABLE "EXT_DB065" ( "C_001" NUMBER, "C_002" VARCHAR2(38), "C_003" NUMBER) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY BASE_CONECTOR ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252 54

STRING SIZES ARE IN BYTES BADFILE BASE_CONECTOR:'SUBGRUPO_ERRO.TXT' NODISCARDFILE LOGFILE BASE_CONECTOR:'SUBGRUPO_LOG.TXT' FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' AND '"' NOTRIM ( "C_001" , "C_002" , "C_003" ) ) LOCATION ( BASE_CONECTOR:'DB065.csv' ) ) REJECT LIMIT UNLIMITED NOPARALLEL ; CREATE TABLE "EXT_DB067" ( "C_001" NUMBER, "C_002" VARCHAR2(22)) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY BASE_CONECTOR ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252 STRING SIZES ARE IN BYTES 55

BADFILE BASE_CONECTOR:'MARCA_ERRO.TXT' NODISCARDFILE LOGFILE BASE_CONECTOR:'MARCA_LOG.TXT' SKIP 1 FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' AND '"' NOTRIM ( "C_001" , "C_002" ) ) LOCATION ( BASE_CONECTOR:'DB067.csv' ) ) REJECT LIMIT UNLIMITED NOPARALLEL ;

CREATE TABLE "EXT_DB072" ( "C1" NUMBER, "C2" VARCHAR2(15), "C3" VARCHAR2(1), "C4" VARCHAR2(1), "C6" NUMBER, "C7" NUMBER, "C8" DATE, "C11" FLOAT(126) , "C12" FLOAT(126) , 56

"C15" FLOAT(126) , "C16" FLOAT(126) , "C19" FLOAT(126) , "C20" FLOAT(126) , "C21" FLOAT(126) , "C22" NUMBER, "C23" VARCHAR2(1), "C25" VARCHAR2(1), "C26" NUMBER, "C28" FLOAT(126) , "C30" NUMBER, "C31" NUMBER, "C32" VARCHAR2(20), "C33" FLOAT(126) , "C35" VARCHAR2(8), "C36" NUMBER, "C37" VARCHAR2(1), "C38" FLOAT(126) , "C39" FLOAT(126) , "C40" FLOAT(126) , "C42" FLOAT(126) , "C43" VARCHAR2(20), "C45" VARCHAR2(30), "C46" NUMBER, "C47" VARCHAR2(3), "C48" VARCHAR2(5), "C49" NUMBER, "C50" NUMBER, "C51" NUMBER, "C52" NUMBER, "C53" FLOAT(126) , "C54" FLOAT(126) , "C55" VARCHAR2(1), 57

"C56" VARCHAR2(1), "C57" NUMBER, "C58" NUMBER, "C59" VARCHAR2(3), "C60" VARCHAR2(8), "C61" NUMBER, "C62" NUMBER, "C63" VARCHAR2(1), "C64" VARCHAR2(8), "C65" VARCHAR2(1), "C66" NUMBER, "C67" FLOAT(126) , "C68" VARCHAR2(8), "C69" FLOAT(126) , "C70" FLOAT(126) , "C71" FLOAT(126) , "C72" VARCHAR2(1), "C73" NUMBER, "C74" VARCHAR2(1), "C75" FLOAT(126) , "C76" VARCHAR2(1), "C77" VARCHAR2(4)) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY BASE_CONECTOR ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252 STRING SIZES ARE IN BYTES BADFILE BASE_CONECTOR:'VDA_ERRO.TXT' NODISCARDFILE LOGFILE BASE_CONECTOR:'VDA_LOG.TXT' FIELDS 58

TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' AND '"' NOTRIM ( "C1" , "C2" , "C3" , "C4" , "C6" , "C7" , "C8" CHAR DATE_FORMAT DATE MASK "yyyymmdd" DEFAULTIF "C8"=BLANKS, "C11" , "C12" , "C15" , "C16" , "C19" , "C20" , "C21" , "C22" , "C23" , "C25" , "C26" , "C28" , "C30" , "C31" , "C32" , "C33" , "C35" , "C36" , "C37" , "C38" , "C39" , 59

"C40" , "C42" , "C43" , "C45" , "C46" , "C47" , "C48" , "C49" , "C50" , "C51" , "C52" , "C53" , "C54" , "C55" , "C56" , "C57" , "C58" , "C59" , "C60" , "C61" , "C62" , "C63" , "C64" , "C65" , "C66" , "C67" , "C68" , "C69" , "C70" , "C71" , "C72" , "C73" , "C74" , 60

"C75" , "C76" , "C77" ) ) LOCATION ( BASE_CONECTOR:'DB072.TXT' ) ) REJECT LIMIT UNLIMITED NOPARALLEL ;

CREATE TABLE "EXT_DB079" ( "C1" NUMBER, "C3" VARCHAR2(1), "C4" NUMBER, "C5" FLOAT(126) , "C6" FLOAT(126) , "C7" FLOAT(126) , "C8" FLOAT(126) , "C9" VARCHAR2(8), "C11" VARCHAR2(1), "C12" FLOAT(126) , "C13" NUMBER, "C14" VARCHAR2(1), "C16" VARCHAR2(1), "C17" FLOAT(126) , "C18" NUMBER, "C19" FLOAT(126) , "C20" VARCHAR2(1), 61

"C21" NUMBER, "C22" NUMBER, "C23" VARCHAR2(3), "C24" VARCHAR2(3), "C25" FLOAT(126) , "C26" NUMBER, "C27" FLOAT(126) , "C28" VARCHAR2(3), "C30" FLOAT(126) , "C31" VARCHAR2(1), "C32" NUMBER, "C33" FLOAT(126) , "C34" FLOAT(126) , "C35" FLOAT(126) , "C36" FLOAT(126) , "C37" FLOAT(126) , "C38" FLOAT(126) , "C39" VARCHAR2(1), "C40" VARCHAR2(3), "C41" FLOAT(126) ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY BASE_CONECTOR ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252 STRING SIZES ARE IN BYTES BADFILE BASE_CONECTOR:'VDA_PROD_ERR.TXT' NODISCARDFILE LOGFILE BASE_CONECTOR:'VDA_PROD_LOG.TXT' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' AND '"' 62

NOTRIM ( "C1" , "C3" , "C4" , "C5" , "C6" , "C7" , "C8" , "C9" , "C11" , "C12" , "C13" , "C14" , "C16" , "C17" , "C18" , "C19" , "C20" , "C21" , "C22" , "C23" , "C24" , "C25" , "C26" , "C27" , "C28" , "C30" , "C31" , "C32" , "C33" , "C34" , "C35" , 63

"C36" , "C37" , "C38" , "C39" , "C40" , "C41" ) ) LOCATION ( BASE_CONECTOR:'DB079.TXT' ) ) REJECT LIMIT UNLIMITED NOPARALLEL ;

CREATE TABLE "EXT_DB089" ( "C_001" NUMBER, "C_002" VARCHAR2(32), "C_003" NUMBER) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY BASE_CONECTOR ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252 STRING SIZES ARE IN BYTES BADFILE 'VDA_PROD_ERR.TXT' NODISCARDFILE LOGFILE 'VDA_PROD_LOG.TXT' SKIP 1 64

FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' AND '"' NOTRIM ( "C_001" , "C_002" , "C_003" ) ) LOCATION ( BASE_CONECTOR:'DB089.csv' ) ) REJECT LIMIT UNLIMITED NOPARALLEL ; CREATE TABLE "EXT_DB204" ( "C_001" NUMBER, "C_002" VARCHAR2(25)) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY BASE_CONECTOR ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252 STRING SIZES ARE IN BYTES BADFILE 'VDA_PROD_ERR.TXT' NODISCARDFILE LOGFILE 'VDA_PROD_LOG.TXT' SKIP 1 65

FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' AND '"' NOTRIM ( "C_001" , "C_002" ) ) LOCATION ( BASE_CONECTOR:'DB204.csv' ) ) REJECT LIMIT UNLIMITED NOPARALLEL ; B.2 SQL Dimenses WHENEVER SQLERROR EXIT FAILURE; CREATE TABLE "DIM_TEMPO" ( "ANO_ANO" NUMBER, "DIA_DIA" NUMBER, "DIA_ID" DATE, "MES_MES" NUMBER) PARALLEL LOGGING ; ALTER TABLE "DIM_TEMPO" ADD CONSTRAINT "TEMP_NIVELDIA_UK" UNIQUE( 66

"DIA_ID"); CREATE DIMENSION "DIM_TEMPO" LEVEL "NIVELANO" IS "DIM_TEMPO"."ANO_ANO" LEVEL "NIVELDIA" IS "DIM_TEMPO"."DIA_ID" LEVEL "NIVELMES" IS "DIM_TEMPO"."MES_MES" HIERARCHY "HIERARQ_TEMPO"( "NIVELDIA" CHILD OF "NIVELMES" CHILD OF "NIVELANO" ) ATTRIBUTE "NIVELDIA" DETERMINES ("DIA_DIA" ) ; WHENEVER SQLERROR EXIT FAILURE;

CREATE TABLE "DIM_PROD" ( "GR_GRUPO" VARCHAR2(40), "GR_ID" NUMBER, "PR_ID" NUMBER, "PR_MARCA" VARCHAR2(40), "PR_NOMEPRODUTO" VARCHAR2(40), "SG_ID" NUMBER, "SG_SUBGRUPO" VARCHAR2(40)) PARALLEL LOGGING ; ALTER TABLE "DIM_PROD" ADD CONSTRAINT "PROD_PRODUTO_UK1" UNIQUE( "PR_ID");

67

CREATE DIMENSION "DIM_PROD" LEVEL "GRUPO" IS "DIM_PROD"."GR_ID" LEVEL "SUBGRUPO" IS "DIM_PROD"."SG_ID" LEVEL "PRODUTO" IS "DIM_PROD"."PR_ID" HIERARCHY "HIERARQ_PROD"( "PRODUTO" CHILD OF "SUBGRUPO" CHILD OF "GRUPO" ) ATTRIBUTE "GRUPO" DETERMINES ("GR_GRUPO" ) ATTRIBUTE "SUBGRUPO" DETERMINES ("SG_SUBGRUPO" ) ATTRIBUTE "PRODUTO" DETERMINES ("PR_MARCA","PR_NOMEPRODUTO" ) ; WHENEVER SQLERROR EXIT FAILURE;

CREATE TABLE "DIM_EMPRESA" ( "EMP_CIDADE" VARCHAR2(30), "EMP_ESTADO" VARCHAR2(2), "EMP_FANTASIA" VARCHAR2(40), "EMP_ID" NUMBER, "EMP_RAZAO" VARCHAR2(40)) PARALLEL LOGGING ; ALTER TABLE "DIM_EMPRESA" ADD CONSTRAINT "EMP_EMPRESA_UK" UNIQUE( "EMP_ID"); CREATE DIMENSION "DIM_EMPRESA" LEVEL "EMPRESA" IS "DIM_EMPRESA"."EMP_ID" 68

ATTRIBUTE "EMPRESA" DETERMINES ("EMP_CIDADE","EMP_ESTADO","EMP_FANTASIA","EMP_RAZAO" ) ; WHENEVER SQLERROR EXIT FAILURE;

CREATE TABLE "DIM_CLIENTES" ( "CLI_BAIRRO" VARCHAR2(30), "CLI_CLASSIFICACAO" VARCHAR2(20), "CLI_ENDERECO" VARCHAR2(40), "CLI_FANTASIA" VARCHAR2(40), "CLI_ID" NUMBER, "CLI_RAZAO" VARCHAR2(40), "CLI_TIPOPESSOA" VARCHAR2(1), "CLI_CIDADE" VARCHAR2(40), "CLI_ID_CI" NUMBER, "CLI_ID_RE" NUMBER, "CLI_REGIAO" VARCHAR2(40)) PARALLEL LOGGING ; ALTER TABLE "DIM_CLIENTES" ADD CONSTRAINT "CLI_CLIENTE_UK1" UNIQUE( "CLI_ID"); CREATE DIMENSION "DIM_CLIENTES" LEVEL "CLIENTE" IS "DIM_CLIENTES"."CLI_ID" ATTRIBUTE "CLIENTE" DETERMINES ("CLI_BAIRRO","CLI_CIDADE","CLI_CLASSIFICACAO","CLI_ENDERECO","CLI_

69

FANTASIA","CLI_ID_CI","CLI_ID_RE","CLI_RAZAO","CLI_REGIAO","CLI_TIPOP ESSOA" ) ;

WHENEVER SQLERROR EXIT FAILURE;

CREATE TABLE "DIM_VENDEDOR" ( "VENDEDOR_ID" NUMBER, "VENDEDOR_VENDEDOR" VARCHAR2(40)) PARALLEL LOGGING ; ALTER TABLE "DIM_VENDEDOR" ADD CONSTRAINT "VEND_VENDEDOR_UK" UNIQUE( "VENDEDOR_ID"); CREATE DIMENSION "DIM_VENDEDOR" LEVEL "VENDEDOR" IS "DIM_VENDEDOR"."VENDEDOR_ID" ATTRIBUTE "VENDEDOR" DETERMINES ("VENDEDOR_VENDEDOR" ) ; B.3 SQL Cubo WHENEVER SQLERROR EXIT FAILURE;

CREATE TABLE "CUBO_VENDA" ( 70

"CLI_ID" NUMBER, "DIA_ID" DATE, "EMP_ID" NUMBER, "PR_ID" NUMBER, "QTDE" FLOAT(126) , "VALORTOTAL" FLOAT(126) , "VALORUNIT" FLOAT(126) , "VENDEDOR_ID" NUMBER) PARALLEL LOGGING ; ALTER TABLE "CUBO_VENDA" ADD CONSTRAINT "FK_CUBO_VENDA_44931" FOREIGN KEY ( "PR_ID") REFERENCES "DIM_PROD"("PR_ID"); ALTER TABLE "CUBO_VENDA" ADD CONSTRAINT "FK_CUBO_VENDA_45074" FOREIGN KEY ( "VENDEDOR_ID") REFERENCES "DIM_VENDEDOR"("VENDEDOR_ID"); ALTER TABLE "CUBO_VENDA" ADD CONSTRAINT "FK_CUBO_VENDA_45084" FOREIGN KEY ( "EMP_ID") REFERENCES "DIM_EMPRESA"("EMP_ID"); ALTER TABLE "CUBO_VENDA" ADD CONSTRAINT "FK_CUBO_VENDA_56603" FOREIGN KEY ( "DIA_ID") REFERENCES "DIM_TEMPO"("DIA_ID"); ALTER TABLE "CUBO_VENDA" ADD 71

CONSTRAINT "FK_CUBO_VENDA_65230" FOREIGN KEY ( "CLI_ID") REFERENCES "DIM_CLIENTES"("CLI_ID"); B.4 SQL Mapeamentos CREATE OR REPLACE PACKAGE "MAP_CLI" AS sql_stmt VARCHAR2(32767); get_abort BOOLEAN := FALSE; get_trigger_success BOOLEAN := TRUE; get_errors NUMBER(22) := 0; get_status NUMBER(22) := 0; -- Status variable for Batch cursors "DIM_CLIENTES_1_St" BOOLEAN; -- Function Main -- Entry point in package "MAP_CLI" FUNCTION Main RETURN NUMBER; END "MAP_CLI"; / CREATE OR REPLACE PACKAGE BODY "MAP_CLI" AS ---------------------------------------------------------------------------- Function "DIM_CLIENTES_1_Bat" -- performs batch extraction -- Returns TRUE on success -- Returns FALSE on failure --------------------------------------------------------------------------FUNCTION "DIM_CLIENTES_1_Bat" RETURN BOOLEAN IS BEGIN 72

EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML'; BEGIN INSERT /*+ APPEND PARALLEL(DIM_CLIENTES, DEFAULT, DEFAULT) */ INTO "DIM_CLIENTES" ("CLI_BAIRRO", "CLI_CLASSIFICACAO", "CLI_ENDERECO", "CLI_FANTASIA", "CLI_ID", "CLI_RAZAO", "CLI_TIPOPESSOA", "CLI_CIDADE", "CLI_ID_CI", "CLI_ID_RE", "CLI_REGIAO") (SELECT "EXT_DB055"."C_007" "C_007", "EXT_DB055"."C_097" "C_097", "EXT_DB055"."C_005" "C_005", "EXT_DB055"."C_004" "C_004", "EXT_DB055"."C_001" "C_001", "EXT_DB055"."C_003" "C_003", "EXT_DB055"."C_002" "C_002", "EXT_DB204"."C_002" "C_002_2", "EXT_DB204"."C_001" "C_001_2", "EXT_DB089"."C_001" "C_001_1", "EXT_DB089"."C_002" "C_002_1" FROM "EXT_DB055" "EXT_DB055", "EXT_DB089" "EXT_DB089", 73

"EXT_DB204" "EXT_DB204" WHERE ( "EXT_DB055"."C_029" = "EXT_DB089"."C_001" ) AND ( "EXT_DB055"."C_030" = "EXT_DB204"."C_001" ) ); COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; COMMIT; RETURN FALSE; END; COMMIT; RETURN TRUE; END "DIM_CLIENTES_1_Bat";

FUNCTION Main RETURN NUMBER IS get_batch_status BEGIN -- Initialize all batch status variables "DIM_CLIENTES_1_St" := FALSE; BOOLEAN := TRUE;

"DIM_CLIENTES_1_St" := "DIM_CLIENTES_1_Bat"; RETURN get_status; END Main; END "MAP_CLI"; / CREATE OR REPLACE PACKAGE "MAP_EMPRESAS" AS sql_stmt VARCHAR2(32767); 74

get_abort BOOLEAN := FALSE; get_trigger_success BOOLEAN := TRUE; get_errors NUMBER(22) := 0; get_status NUMBER(22) := 0; -- Status variable for Batch cursors "DIM_EMPRESA_St" BOOLEAN; -- Function Main -- Entry point in package "MAP_EMPRESAS" FUNCTION Main RETURN NUMBER; END "MAP_EMPRESAS"; / CREATE OR REPLACE PACKAGE BODY "MAP_EMPRESAS" AS ---------------------------------------------------------------------------- Function "DIM_EMPRESA_Bat" -- performs batch extraction -- Returns TRUE on success -- Returns FALSE on failure --------------------------------------------------------------------------FUNCTION "DIM_EMPRESA_Bat" RETURN BOOLEAN IS BEGIN EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML'; BEGIN INSERT /*+ APPEND PARALLEL(DIM_EMPRESA, DEFAULT, DEFAULT) */ INTO "DIM_EMPRESA" 75

("EMP_CIDADE", "EMP_ESTADO", "EMP_FANTASIA", "EMP_ID", "EMP_RAZAO") (SELECT "EXT_DB053"."C_007" "C_007", "EXT_DB053"."C_008" "C_008", "EXT_DB053"."C_003" "C_003", "EXT_DB053"."C_001" "C_001", "EXT_DB053"."C_002" "C_002" FROM "EXT_DB053" "EXT_DB053" ); COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; COMMIT; RETURN FALSE; END; COMMIT; RETURN TRUE; END "DIM_EMPRESA_Bat";

FUNCTION Main RETURN NUMBER IS get_batch_status BEGIN -- Initialize all batch status variables "DIM_EMPRESA_St" := FALSE; BOOLEAN := TRUE;

"DIM_EMPRESA_St" := "DIM_EMPRESA_Bat"; 76

RETURN get_status; END Main; END "MAP_EMPRESAS"; / CREATE OR REPLACE PACKAGE "MAP_PROD" AS sql_stmt VARCHAR2(32767); get_abort BOOLEAN := FALSE; get_trigger_success BOOLEAN := TRUE; get_errors NUMBER(22) := 0; get_status NUMBER(22) := 0; -- Status variable for Batch cursors "DIM_PROD_St" BOOLEAN; -- Function Main -- Entry point in package "MAP_PROD" FUNCTION Main RETURN NUMBER; END "MAP_PROD"; / CREATE OR REPLACE PACKAGE BODY "MAP_PROD" AS ---------------------------------------------------------------------------- Function "DIM_PROD_Bat" -- performs batch extraction -- Returns TRUE on success -- Returns FALSE on failure --------------------------------------------------------------------------FUNCTION "DIM_PROD_Bat" RETURN BOOLEAN IS

77

BEGIN EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML'; BEGIN INSERT /*+ APPEND PARALLEL(DIM_PROD, DEFAULT, DEFAULT) */ INTO "DIM_PROD" ("GR_GRUPO", "GR_ID", "PR_ID", "PR_MARCA", "PR_NOMEPRODUTO", "SG_ID", "SG_SUBGRUPO") (SELECT "EXT_DB056"."C_002" "C_002_2", "EXT_DB056"."C_001" "C_001_2", "EXT_DB051"."C_001" "C_001", "EXT_DB067"."C_002" "C_002_3", "EXT_DB051"."C_002" "C_002", "EXT_DB051"."C_004" "C_004", "EXT_DB065"."C_002" "C_002_1" FROM "EXT_DB051" "EXT_DB051", "EXT_DB065" "EXT_DB065", "EXT_DB056" "EXT_DB056", "EXT_DB067" "EXT_DB067" WHERE ( "EXT_DB051"."C_004" = "EXT_DB065"."C_001" ) AND ( "EXT_DB065"."C_003" = "EXT_DB056"."C_001" ) AND ( "EXT_DB051"."C_044" = "EXT_DB067"."C_001" ) ); COMMIT; 78

EXCEPTION WHEN OTHERS THEN ROLLBACK; COMMIT; RETURN FALSE; END; COMMIT; RETURN TRUE; END "DIM_PROD_Bat";

FUNCTION Main RETURN NUMBER IS get_batch_status BEGIN -- Initialize all batch status variables "DIM_PROD_St" := FALSE; BOOLEAN := TRUE;

"DIM_PROD_St" := "DIM_PROD_Bat"; RETURN get_status; END Main; END "MAP_PROD"; / CREATE OR REPLACE PACKAGE "MAP_TEMPO" AS sql_stmt VARCHAR2(32767); get_abort BOOLEAN := FALSE; get_trigger_success BOOLEAN := TRUE; get_errors NUMBER(22) := 0; get_status NUMBER(22) := 0; -- Status variable for Batch cursors 79

"DIM_TEMPO_St" BOOLEAN; -- Function Main -- Entry point in package "MAP_TEMPO" FUNCTION Main RETURN NUMBER; END "MAP_TEMPO"; / CREATE OR REPLACE PACKAGE BODY "MAP_TEMPO" AS ---------------------------------------------------------------------------- Function "DIM_TEMPO_Bat" -- performs batch extraction -- Returns TRUE on success -- Returns FALSE on failure --------------------------------------------------------------------------FUNCTION "DIM_TEMPO_Bat" RETURN BOOLEAN IS BEGIN EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML'; BEGIN INSERT /*+ APPEND PARALLEL(DIM_TEMPO, DEFAULT, DEFAULT) */ INTO "DIM_TEMPO" ("ANO_ANO", "DIA_DIA", "DIA_ID", "MES_MES") (SELECT 80

WB_CAL_YEAR(("SORT"."C_008$0")) "ANO", WB_DAY_OF_MONTH(("SORT"."C_008$0")) "DIA", "SORT"."C_008$0" "C_008", WB_CAL_MONTH_OF_YEAR(("SORT"."C_008$0")) "MES" FROM (SELECT ("SORT_INPUT_SUBQUERY"."C_008$1") "C_008$0" FROM (SELECT "DEDUP"."C_008$2" "C_008$1" FROM (SELECT DISTINCT "EXT_DB072"."C_008" "C_008$2" FROM "EXT_DB072" "EXT_DB072" WHERE ( "EXT_DB072"."C_008" IS NOT NULL )) "DEDUP" ) "SORT_INPUT_SUBQUERY" ORDER BY ("SORT_INPUT_SUBQUERY"."C_008$1") ASC) "SORT" ); COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; COMMIT; RETURN FALSE; END; COMMIT; RETURN TRUE; END "DIM_TEMPO_Bat";

FUNCTION Main RETURN NUMBER IS get_batch_status BEGIN -- Initialize all batch status variables "DIM_TEMPO_St" := FALSE; 81 BOOLEAN := TRUE;

"DIM_TEMPO_St" := "DIM_TEMPO_Bat"; RETURN get_status; END Main; END "MAP_TEMPO"; / CREATE OR REPLACE PACKAGE "MAP_VENDEDOR" AS sql_stmt VARCHAR2(32767); get_abort BOOLEAN := FALSE; get_trigger_success BOOLEAN := TRUE; get_errors NUMBER(22) := 0; get_status NUMBER(22) := 0; -- Status variable for Batch cursors "DIM_VENDEDOR_St" BOOLEAN; -- Function Main -- Entry point in package "MAP_VENDEDOR" FUNCTION Main RETURN NUMBER; END "MAP_VENDEDOR"; / CREATE OR REPLACE PACKAGE BODY "MAP_VENDEDOR" AS ---------------------------------------------------------------------------- Function "DIM_VENDEDOR_Bat" -- performs batch extraction -- Returns TRUE on success -- Returns FALSE on failure 82

--------------------------------------------------------------------------FUNCTION "DIM_VENDEDOR_Bat" RETURN BOOLEAN IS BEGIN EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML'; BEGIN INSERT /*+ APPEND PARALLEL(DIM_VENDEDOR, DEFAULT, DEFAULT) */ INTO "DIM_VENDEDOR" ("VENDEDOR_ID", "VENDEDOR_VENDEDOR") (SELECT "EXT_DB063"."C_001" "C_001", "EXT_DB063"."C_003" "C_003" FROM "EXT_DB063" "EXT_DB063" ); COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; COMMIT; RETURN FALSE; END; COMMIT; RETURN TRUE; END "DIM_VENDEDOR_Bat";

FUNCTION Main RETURN NUMBER IS get_batch_status BEGIN 83 BOOLEAN := TRUE;

-- Initialize all batch status variables "DIM_VENDEDOR_St" := FALSE;

"DIM_VENDEDOR_St" := "DIM_VENDEDOR_Bat"; RETURN get_status; END Main; END "MAP_VENDEDOR"; / CREATE OR REPLACE PACKAGE "MAP_CUBO_VENDA" AS sql_stmt VARCHAR2(32767); get_abort BOOLEAN := FALSE; get_trigger_success BOOLEAN := TRUE; get_errors NUMBER(22) := 0; get_status NUMBER(22) := 0; -- Status variable for Batch cursors "CUBO_VENDA_St" BOOLEAN; -- Function Main -- Entry point in package "MAP_CUBO_VENDA" FUNCTION Main RETURN NUMBER; END "MAP_CUBO_VENDA"; / CREATE OR REPLACE PACKAGE BODY "MAP_CUBO_VENDA" AS ---------------------------------------------------------------------------- Function "CUBO_VENDA_Bat" 84

-- performs batch extraction -- Returns TRUE on success -- Returns FALSE on failure --------------------------------------------------------------------------FUNCTION "CUBO_VENDA_Bat" RETURN BOOLEAN IS BEGIN EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML'; BEGIN INSERT /*+ APPEND PARALLEL(CUBO_VENDA, DEFAULT, DEFAULT) */ INTO "CUBO_VENDA" ("CLI_ID", "DIA_ID", "EMP_ID", "PR_ID", "QTDE", "VALORTOTAL", "VALORUNIT", "VENDEDOR_ID") (SELECT "EXT_DBVDA"."CLIFOR" "CLIFOR", "EXT_DBVDA"."EMISS" "EMISS", "EXT_DBVDA"."EMP" "EMP", "EXT_DBVDA"."PROD" "PROD", "EXT_DBVDA"."QTDE" "QTDE", "EXT_DBVDA"."VALUNIT" * "EXT_DBVDA"."QTDE" "VALTOT", "EXT_DBVDA"."VALUNIT" "VALUNIT", "EXT_DBVDA"."VENDEDOR" "VENDEDOR" FROM "EXT_DBVDA" "EXT_DBVDA", 85

"DIM_PROD" "DIM_PROD", "DIM_CLIENTES" "DIM_CLIENTES" WHERE ( "EXT_DBVDA"."TIPOREG" = 'V' ) AND ( "EXT_DBVDA"."PROD" = "DIM_PROD"."PR_ID" ) AND ( "EXT_DBVDA"."CLIFOR" = "DIM_CLIENTES"."CLI_ID" ) ); COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK; COMMIT; RETURN FALSE; END; COMMIT; RETURN TRUE; END "CUBO_VENDA_Bat";

FUNCTION Main RETURN NUMBER IS get_batch_status BEGIN -- Initialize all batch status variables "CUBO_VENDA_St" := FALSE; BOOLEAN := TRUE;

"CUBO_VENDA_St" := "CUBO_VENDA_Bat"; RETURN get_status; END Main; END "MAP_CUBO_VENDA"; /

86

Maring, 06 de Dezembro de 2004 Coordenao de Trabalho Final de Curso de Informtica Departamento de Informtica Centro de Tecnologia Universidade Estadual de Maring

Encaminhamos, em anexo, a monografia intitulada Data Warehouse para Sistemas de Gesto Empresarial para avaliao desta coordenao. ___________________________ Aluno: Douglas Rodrigo Ferreira

___________________________________________ Orientador: Prof. Dra. Maria Madalena Dias

87

Вам также может понравиться