6.3 Strategies for improving the information systems
6.3.1 Cultivation approach for integrating HIS
O Mondrian [6,10] é um projeto open source inspirado num produto não comercial: o Microsoft Analysis Services. Este produto contém a linguagem MDX [8,13] como extensão do SQL para business intelligence e XMLA baseado em XML como interface de comunicação. O Mondrian é um engine OLAP implementado em JAVA e que corre num web server como o Tomcat ou o Jboss.
O Mondrian permite definir schemas dos cubos de dados que no fundo é um ficheiro de XML que determina a estrutura lógica de como os dados das tabelas de base de dados relacional aparecem no cubo. Esta camada permite a criação de campos virtuais que não existem no modelo físico, como por exemplo medidas calculadas. Permite também a possibilidade de alterar nomes dos campos e definir hierarquias. Pode ser vantajoso numa situação em que com a mesma DW como ponto de partida, pode-se criar vários cubos orientados às necessidades de diferentes utilizadores, aproximando-os do vocabulário e estrutura de dados que estão mais habituados.
O Mondrian contém muitos projetos associados que cresceram em torno dele como por exemplo o Jpivot, Olap4J, Ctools, etc.
9.1 Instalação
Sendo um projeto open source existem várias releases e branches (ver no gitHub https://github.com/pentaho/mondrian). As versões que contêm o Jpivot já integrado e o ficheiro “mondian.war” são as melhores como será explicado adiante.
O Mondrian pode ser deployed num servidor aplicacional ou ser utilizado através de outras aplicações web. A forma mais rápida e comoda é colocar o ficheiro “mondrian.war” existente na release na pasta “webapps” do Tomcat e fazer restart ao serviço. A integração com o Jpivot permite verificar se a instalação foi bem sucedida ou acedendo ao endreço (http://<servidor>:8080/mondrian/). Deverá apresentar uma lista com várias opções de teste baseadas no DW de demostração chamado “foodMart”.
72
Como o Mondrian irá aceder a uma base de dados em MySql, é preciso fazer o
download do driver “com.mysql.jdbc.driver” e colocar o ficheiro “Mysql.jar” na
diretoria “lib” do projecto.
O próximo passo será criar o schema em XML.
9.2 Schemas do cubo de dados
A definição do schema segue uma notação própria especificada na documentação. São definidas as dimensões com os respetivos atributos e suas hierarquias. Estes atributos mapeiam com os campos de BD. É definida a tabela de factos e medidas. Pode-se criar mais medidas com tipos de agregação diferente
Estes schemas em XML têm uma sintaxe muito precisa e as mensagens de erro são muito opacas. Felizmente a Pentaho desenvolveu uma ferramenta para ajudar a construir estes ficheiros: o schema workbench. Para tirar total proveito desta ferramenta, pode-se preencher os dados de conexão à base de dados acedendo ao item de menu “Tools”. Esta opção permite mapear corretamente o schema com os campos da BD no DW. De referir que é comum ocorrer um problema quando se executa este programa (mondrian.sh para Linux e mondrian.bat para Windows) relacionado com o driver JDBC do Mysql. Para o resolver ou se cria uma diretoria “drivers” e se coloca o ficheiro do driver “Mysql.jar” ou corrige-se o script.
73
Apesar de esta ferramenta ajudar bastante na construção do schema, não efetua qualquer tipo de validação de estrutura e sintaxe do documento, sendo bastante fácil de cometer erros que depois são difíceis de depurar. Para mitigar estes problemas, é aconselhável inserir uma dimensão de cada vez e começar com as mais simples. A construção é explicada com algum detalhe na documentação da ferramenta e também existem alguns vídeos elucidativos no youtube que auxiliam nesta tarefa.
Ao fazer “new schema” irá criar um ficheiro só com o elemento “schema” em que se pode dar um nome mais inteligível. O primeiro passo será criar as dimensões. Em cada uma existem várias opções, mas as mais importantes consistem em associar a tabela de BD, os campos e definir as hierarquias. Para cada hierarquia define-se os níveis “Levels” em que se mapeia com o respetivo campo na BD. A ordem com que esses níveis são criados vai definir a sequência da hierarquia. A um nível se pode adicionar “properties” que seriam campos informativos. Por exemplo, numa hierarquia da dimensão utilizador Departamento => Grupo => Utilizador, faz sentido acrescentar os campos “Nacionalidade”,”Género”, etc como properties no nível “utilizador”. O problema é que na maioria das ferramentas analíticas que foram usadas estas properties são ignoradas. A resolução deste problema passou por criar mais hierarquia com esses campos.
74
O próximo passo é criar um cubo dentro do schema associando a tabela de factos e criar dimensões associando-as às dimensões criadas anteriormente. Pode parecer uma redundância, mas para um universo em que existam vários cubos que usam as mesmas dimensões conformadas (e tabelas de factos diferentes) só é preciso defini-las uma única vez. Finalmente, define-se no cubo as medidas, associando o campo da tabela de factos e o tipo de agregação (sum, avg, count). Foi criado uma medida chamada “contagem” que não mapeia diretamente a nenhum campo da tabela de factos na BD fazendo um
count das ocorrências. Também é possível criar dimensões calculadas e ainda formatar
valores. Para a medida “tempo gasto” que é minutos, tentou-se formatar da forma “x h y m” no schema, mas sem sucesso. Esta formatação é possível de fazer diretamente na
query de MDX (ver Anexo F– Formatar tempo gasto no MDX )
9.3 Configuração
Depois de criar os schemas é necessário definir os data sources que ligam os
schemas ao DW físico com uma ligação de BD. É útil colocar a funcionar o Jpivot para
fazer testes e verificar se o schema em XML está correto. Deve-se copiar o ficheiro do schema para /WEB-INF/queries/ e alterar os ficheiros /WEB-INF/queries/Mondrian.jsp e /WEB-INF/queries/mondrianXMLA.jsp: Atributos de jp:mondrianQuery Valor jdbcDriver Com.mysql.jdbc.Driver jdbcUrl Jdbc:mysql://<servidorBD>/<database>?user=<username>&password=<pass> catalogUri /WEB-INF/queries/<ficheiro_schema>.xml Tabela 37- Atributos a preencher em jp:mondrianQuery
Dentro do elemento <jp:mondrianQuery> deverá estar uma query MDX válida. No contexto deste projeto poderia ser:
<jp:mondrianQueryid=”query01” jdbcDriver=”com.mysql.jdbc.Driver”
jdbcUrl=”jdbc:mysql://localhost/db_DW?user=xxxxx&password=yyyyy”
catalogUri=”/WEB-INF/queries/pedidosMart.xml” connectionPooling=”false”>
select {[Measures].[Tempo Gasto], [Measures].[Acompanhamentos]} ON COLUMNS, Hierarchize({([Data].[Todos], [Operacao].[Todos])}) ON ROWS
from [Pedidos]
75 Acedendo ao endereço:
http://<servidor>:8080/mondrian/testpage.jsp?query=mondrian
Deverá aparecer uma página da ferramenta Jpivot e a query definida anteriormente como a de omissão. Este é o ponto de partida para proceder a eventuais afinações do ficheiro do schema até estar tudo em condições de passar a usar outras ferramentas.
76