Cubos Virtuais no Mondrian

É dúvida comum de quem está iniciando maiores desafios com Pentaho, querer saber como cruzar dados através de cubos virtuais no Mondrian.

Cubos virtuais oferecem uma maneira elegante de se cruzar dados de cubos diferentes, com granularidades também diferentes. Embora existem alternativas para se implementar isso com processos de ETL persistindo esses cruzamentos, esse artigo visa tão somente esclarecer a saída pelo Mondrian.

Pois bem, sem mais delongas, eu preparei um repositório em https://github.com/marpontes/mondrian-virtualcube-example, que contém todos os arquivos desse tutorial.

Quem for de git, clone, quem for de zip, baixa. Vamos precisar pra execução do tutorial.

Pré-requisitos

  • Pentaho Data Integration – de preferência 6+
  • Running Pentaho BA Server – de preferência 6+
  • PostgreSQL – o script de criação das tabelas é feito para o PostgreSQL, mas você pode adaptar para outros SGBDs que a solução irá funcionar.

Os dados de teste

Preparei para esse exemplo, uma massa de dados muito simples que ilustra dois datamarts com dimensões compartilhadas. Lá vai:

DIMENSÕES ------------------------------------

tempo      (ID, ANO, MES_NUMERO, MES_DESC);
produtos   (ID, LINHA, PRODUTO);
vendedores (ID, NOME);

FATOS ----------------------------------------

vendas  (ID_PRODUTO, ID_TEMPO, ID_VENDEDOR, VALOR_VENDA);
compras (ID_PRODUTO, ID_TEMPO, VALOR_COMPRA);

Passo 01. Carregue os dados

Carga dos dados

  1. Execute o script data/schema.postgres.sql no seu PostgreSQL – ou utilize o Database Explorer do próprio Pentaho Data Integration para executar;
    • Ou adapte esse script para o seu SGBD e execute – pull requests para outros SGBDs são bem vindos no repositório.
  2. Abra a transformação support-etl/load_data_into_db.ktr
  3. Altere as configurações da conexão com o banco de dados de acordo com as variáveis do seu SGBD (host, port, database, usernrame, password);
  4. Execute a transformação;

Passo 02. Prepare o seu BA Server

Conexao

  1. Certifique-se de que o driver JDBC para o banco de dados que você está utilizando já está localizado na pasta tomcat/lib da sua instalação – O driver do PostgreSQL já vem instalada por padrão;
  2. Crie uma conexão – se já não existir – no BA Server – File > Manage Datasources > cogwheel-icon > New Connection;

Passo 03. Publique o Schema

Publicando

  1. Em File > Manage Datasources, clique no ícone de configurações e escolha Import Analysis;
  2. Em Mondrian File, clique no botão marcado com [...] para localizar o arquivo schema/OncaseVirtualCubeExample.xml que está salvo em seu computador
  3. Escolha o DataSource que aponta para o banco de dados que você está utilizando neste exemplo.
  4. Mande importar;

Utilizando a solução

A partir de agora, você deve conseguir ver três cubos no seu OLAP player:

  • Vendas
  • Compras
  • Vendas x Compras

Visualizando

Vendas x Compras é um cubo virtual que cruza informações de Vendas e de Compras.

Todas as dimensões utilizadas nesse cubo virtual estão presentes nos dois cubos. Eu mantive assim para simplificar a compreensão dods que estão iniciando.

Se você estiver planejando adicionar ao cubo virtual, dimensões que não estão presentes em todos os cubos, você deve:

  1. No cubo virtual, esconder (visible="false") as medidas dos cubos que não têm todas as dimensões;
  2. Fazer uso dessas dimensões que estão escondidas através de membros calculados da seguinte maneira:
    ValidMeasure ([Measures].[My hidden measure])
    

Essa fórmula vai fazer com que a sua medida (aquela que não tem todas as dimensões) ficar sempre visível, forçando com que a dimensão não existente seja considerada no seu topLevel, dentro da tupla onde a medida está contida.

Mas utilize com cuidado: http://jira.pentaho.com/browse/MONDRIAN-2280. Sempre que for utilizar essa ValidMeasure(), certifique-se de sempre adicionar à sua visão analítica uma medida que tem a tupla completa.

Marcello Pontes
Analytics Architect & Front-ender at Oncase |