terça-feira, 25 de novembro de 2014

DICA: Utilizando várias áreas de assunto numa mesma consulta sem utilizar o UNION

Bem pessoal, hoje irei mostrar um dica bem simples, porém bem útil quando temos mais de uma área de assunto e dimensões comuns entre elas. Para utilizar este recurso basta as dimensões e fatos estarem na mesma área de negócio do administrator, assim como a imagem abaixo destaca:



Note que temos apenas uma área de negócio e várias áreas de assunto na camada de apresentação. Com esta configuração podemos utilizar duas áreas de assunto numa mesma consulta. Ok, vamos ao answer!!!

1 - Acesse o BI e crie uma nova Analise:



2 - Selecione uma área de assunto:



3 - Clique no botão de adicionar a área de assunto:



4 - Selecione as áreas de assunto desejadas:



Pronto áreas de assuntos adicionadas, agora você já pode usar as diversas áreas de assunto que deseje!

ATENÇÃO: PARA UM MELHOR DESEMPENHO UTILIZE NESSAS CONSULTAS APENAS AS DIMENSÕES COMUNS ENTRE AS ÁREAS DE ASSUNTO EVITANDO DOR DE CABEÇA OU ERROS. CASO DESEJE UTILIZAR DIMENSÕES QUE NÃO SÃO COMUNS A TODAS ÁREAS DE ASSUNTO, VOCÊ PODE TER UMA DOR DE CABEÇA COM MÉTRICAS QUE NÃO SE LIGAM A ESSAS DIMENSÕES, POR TANTO USE COM MODERAÇÃO ESSAS DIMENSÕES QUE NÃO SÃO COMUNS ENTRE AS ÁREAS DE ASSUNTO!

segunda-feira, 3 de novembro de 2014

DICA: Limpar o cache pela administração do Presentation

Hoje iremos falar como limpar o cache de consultas do OBIEE sem ter que entrar no Administration. É uma forma bem simples de "purgar" o cache de consultas. Para limpa-lo basta executar o comando “call SAPurgeAllCache()” na tela “Executar Instrução SQL” de acordo com a sequência abaixo:

1 – Clique em Administração:



2 – Clique no link “Executar Instrução SQL”



3 – Digite o comando “call SAPurgeAllCache()” e clique em “Executar Instrução SQL”, ao final da execução deve aparecer uma tela como esta:



PRONTO O CACHE JÁ FOI PURGADO!!!

Sabemos que há outras maneiras de limpar o cache, porém acredito essa ser uma boa alternativa visto que pelo próprio browser conseguimos fazer a limpeza, isso funciona bem quando não temos muito acesso ao RPD. Concluindo esta dica fico disponível para tirar quaisquer dúvidas e esclarecimentos.

Até a próxima!

segunda-feira, 27 de outubro de 2014

DICA: Desabilitar o cache de uma Análise no OBIEE

Caros leitores, sabemos que no OBIEE nós podemos cachear as consultas habilitando um check no EM, porém em cada analise nós temos a opção de forçar que a mesma não utilize tal cache, para isto basta ir na aba “Avançado” da analise e marcar a check abaixo do XML e selecionar a combo “Atualização parcial” com o valor de “Relatório Inteiro”. As alterações devem estar de acordo com a imagem abaixo:



Após a configuração, mandar aplicar e retornar aos critérios. Pronto o cache desta analise já está desabilitado!

quarta-feira, 15 de outubro de 2014

ETL para retorna o endereço com coordenadas pelo CEP e número

Este post tem o objetivo de mostrar através de consultas aos sites do correiocontrol e do google maps como retornar os campos de endereço e sua georeferência, passando apenas os parâmetros de CEP e número. Para este post foi utilizado a ferramenta Pentaho Data Integration (PDI), ferramenta que pode ser baixada sem custo na versão da comunidade. Let’s Go!!!


Baixe o PDI no endereço: http://community.pentaho.com/projects/data-integration/. O único pré-requisito para executar o pentaho é ter um JDK instalado na sua máquina. O PDI vem compactado e não precisa de instalação descompacte em uma pasta e execute o arquivo “Spoon.bat” (no Windows) ou “Spoon.sh” (no Linux) localizado no raiz da pasta descompactada.



Irá abrir a tela de login dos repositórios do pentaho, como o objetivo desse post não é demonstrar a utilização de recursos do pentaho, vamos focar apenas no que o post se propõem, portanto clique no botão cancelar para abrir a ferramenta:



Esta é a tela inicial do Pentaho:



Clique no menu "File-> Novo -> Transformação", irá abrir uma nova aba ao lado da aba Bem Vindo, chamada “Transformação 1” de acordo com a tela:



Pronto, uma vez o ambiente ok, “vamu bota pá muê“, como diz o matuto!

Caso não esteja na aba “Design” no canto superior esquerdo, abaixo do menu, clique na mesma, pois é nessa aba que selecionamos os objetos que irão fazer a mágica que queremos. Já na aba “Design” clique na pasta “Input” e arraste o objeto “Generate Rows” para o centro da página assim como na imagem:



Dê dois cliques em cima do objeto arrastado para abrir a tela de configuração deste objeto, nela vamos configurar os campos cep e número; deixe-os com o tipo: String. Na coluna valor adicione um cep e um número válidos de sua escolha. Altere o valor do campo “Limit” para 1. Por questões de organização renomeie o nome do objeto para “Entrada do CEP”, após essas configurações as propriedades desse objeto deve estar igual a imagem:



O próximo objeto é o “Modified Java Script Value” para montar a URL que vai acessar os correios adicionando o parâmetro cep do passo anterior. Para ligar os dois objetos pressione a tecla “Shift”, clique sobre o objeto “Entrada do CEP” e arraste o mouse até o objeto “Modified Java Script Value” enquanto você arrasta o pentaho vai exibindo uma seta. A localização desse objeto é na pasta “Scripting”. Abaixo segue a tela mostrando a localização e a ligação entre os objetos da transformação.



Abra o objeto do Java Script e adicione o seguinte texto:

var cep_correiocontrol = 'http://cep.correiocontrol.com.br/'+cep+'.json';


Este objeto recebe conteúdo javascript, neste caso o utilizamos para adicionar uma variável “cep_correiocontrol” ao fluxo, este passo poderia ser executado de outras maneiras, e com outros objetos, escolhi o objeto javascript por ficar mais simples. Após unir os objetos clique no botão “Get variables” e note que ele adicionará um campo “cep_correiocontrol” do tipo string de acordo com a imagem abaixo, por questão de organização altere o campo “Step Name” para “URL CorreioControl”:



O próximo passo é fazer a chamada HTTP que retorna o JSON com o endereço do CEP, o objeto utilizado para isso é o “HTTP Client” que está localizado na pasta “Lookup”, adicione o mesmo ao fluxo já existente, ligando com o objeto “URL CorreioControl”. De um duplo clique no objeto adicionado para abrir as propriedades do mesmo e marque o check “Accept URL From field”. No campo “URL Field name” selecione o campo do passo anterior “cep_correiocontrol”. Mude para 0 os campos “Connection timeout”, “Socket timeout” e “Connection close wait time”. Caso a sua rede tenha proxy configure-o nos dois últimos campos da tela. Por questões de organização altere o nome do objeto para “Consulta CEP” ao final deste passo devemos ter as seguintes configurações:



Agora vamos tratar o JSON retornado pelo objeto HTTP Client, selecionamos o objeto “JSON Input” dentro da pasta “Input”, adicione e o ligue ao fluxo. Após inseri-lo ao fluxo edite suas propriedades e as deixe de acordo com as imagens.

Na aba “File” marque a opção “Source is defined in a field”, e no campo “Get source from field” escolha o campo “result”:



Na aba “Fields” adicione as linhas:

Name Path Type
bairro $..bairro String
logradouro $..logradouro String
cep $..cep String
uf $..uf String
localidade $..localidade String


A tela deverá ficar como a imagem a baixo:



As demais abas desse objeto não serão utilizadas nesse ETL. Com esse passo nós adicionamos ao fluxo os campos: bairro, logradouro, uf e localidade. Por questões de organização altere o nome do objeto para “Endereço em Json” e conclua clicando em “Ok”. Agora nosso fluxo deve ter essa aparência:



Ok, agora já conseguimos pegar os dados do CEP, falta ainda capturar a georeferência deste cep, vamos lá, adicione outro objeto javascript ao fluxo. Só para lembrar ele está na pasta “Scripting”. Nas propriedades do objeto adicione o seguinte JS (este JS remove caracteres indesejados e prepara o endereço para consultar ao Google Maps)


//Script here
var endereco = logradouro +', '+numero +', ' + localidade;

endereco = removeDiacritics(endereco);
endereco = endereco.replace(/ /gi, '%20');

var url_final = 'http://maps.google.com/maps/api/geocode/xml?sensor=false&address=' + endereco;

function removeDiacritics (str) {

  var defaultDiacriticsRemovalMap = [
    {'base':'A', 'letters':/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},
    {'base':'AA','letters':/[\uA732]/g},
    {'base':'AE','letters':/[\u00C6\u01FC\u01E2]/g},
    {'base':'AO','letters':/[\uA734]/g},
    {'base':'AU','letters':/[\uA736]/g},
    {'base':'AV','letters':/[\uA738\uA73A]/g},
    {'base':'AY','letters':/[\uA73C]/g},
    {'base':'B', 'letters':/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},
    {'base':'C', 'letters':/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},
    {'base':'D', 'letters':/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},
    {'base':'DZ','letters':/[\u01F1\u01C4]/g},
    {'base':'Dz','letters':/[\u01F2\u01C5]/g},
    {'base':'E', 'letters':/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},
    {'base':'F', 'letters':/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},
    {'base':'G', 'letters':/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},
    {'base':'H', 'letters':/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},
    {'base':'I', 'letters':/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},
    {'base':'J', 'letters':/[\u004A\u24BF\uFF2A\u0134\u0248]/g},
    {'base':'K', 'letters':/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},
    {'base':'L', 'letters':/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},
    {'base':'LJ','letters':/[\u01C7]/g},
    {'base':'Lj','letters':/[\u01C8]/g},
    {'base':'M', 'letters':/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},
    {'base':'N', 'letters':/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},
    {'base':'NJ','letters':/[\u01CA]/g},
    {'base':'Nj','letters':/[\u01CB]/g},
    {'base':'O', 'letters':/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},
    {'base':'OI','letters':/[\u01A2]/g},
    {'base':'OO','letters':/[\uA74E]/g},
    {'base':'OU','letters':/[\u0222]/g},
    {'base':'P', 'letters':/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},
    {'base':'Q', 'letters':/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},
    {'base':'R', 'letters':/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},
    {'base':'S', 'letters':/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},
    {'base':'T', 'letters':/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},
    {'base':'TZ','letters':/[\uA728]/g},
    {'base':'U', 'letters':/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},
    {'base':'V', 'letters':/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},
    {'base':'VY','letters':/[\uA760]/g},
    {'base':'W', 'letters':/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},
    {'base':'X', 'letters':/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},
    {'base':'Y', 'letters':/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},
    {'base':'Z', 'letters':/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},
    {'base':'a', 'letters':/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},
    {'base':'aa','letters':/[\uA733]/g},
    {'base':'ae','letters':/[\u00E6\u01FD\u01E3]/g},
    {'base':'ao','letters':/[\uA735]/g},
    {'base':'au','letters':/[\uA737]/g},
    {'base':'av','letters':/[\uA739\uA73B]/g},
    {'base':'ay','letters':/[\uA73D]/g},
    {'base':'b', 'letters':/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},
    {'base':'c', 'letters':/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},
    {'base':'d', 'letters':/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},
    {'base':'dz','letters':/[\u01F3\u01C6]/g},
    {'base':'e', 'letters':/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},
    {'base':'f', 'letters':/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},
    {'base':'g', 'letters':/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},
    {'base':'h', 'letters':/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},
    {'base':'hv','letters':/[\u0195]/g},
    {'base':'i', 'letters':/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},
    {'base':'j', 'letters':/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},
    {'base':'k', 'letters':/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},
    {'base':'l', 'letters':/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},
    {'base':'lj','letters':/[\u01C9]/g},
    {'base':'m', 'letters':/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},
    {'base':'n', 'letters':/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},
    {'base':'nj','letters':/[\u01CC]/g},
    {'base':'o', 'letters':/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},
    {'base':'oi','letters':/[\u01A3]/g},
    {'base':'ou','letters':/[\u0223]/g},
    {'base':'oo','letters':/[\uA74F]/g},
    {'base':'p','letters':/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},
    {'base':'q','letters':/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},
    {'base':'r','letters':/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},
    {'base':'s','letters':/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},
    {'base':'t','letters':/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},
    {'base':'tz','letters':/[\uA729]/g},
    {'base':'u','letters':/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},
    {'base':'v','letters':/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},
    {'base':'vy','letters':/[\uA761]/g},
    {'base':'w','letters':/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},
    {'base':'x','letters':/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},
    {'base':'y','letters':/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},
    {'base':'z','letters':/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}
  ];

  for(var i=0; i<defaultDiacriticsRemovalMap.length; i++) {
    str = str.replace(defaultDiacriticsRemovalMap[i].letters, defaultDiacriticsRemovalMap[i].base);
  }

  return str;

}


Após a inclusão deste texto, clique no botão “Get variables” para adicionar as variáveis ao fluxo, porém deixe apenas a variável url_final, removendo as outras variáveis. Renomeie o JS para “URL Maps”. No final o objeto terá essa aparência:



Clique em Ok e vamos ao próximo passo. Vamos agora fazer a consulta ao Google Maps passando a String “url_final” que montamos no passo anterior. Escolha novamente o objeto “HTTP Client” e o configure de acordo com a imagem abaixo, não esquecendo de mudar o nome do objeto para “Consulta MAPS”:



O retorno do google é em formato de XML, iremos utilizar o objeto “Get data from XML” encontrado dentro da pasta “Input”, ligue-o ao fluxo. Renomeio para “Coordenadas”. Faça as seguintes configurações:




  • Na aba “File”: marque o campo “XML source is defined in a field” e escolha no campo “get XML source from a field” o campo “result_1”.







  • Na aba “Content”: no campo Loop XPath adicione o texto /GeocodeResponse/result/geometry/location.







  • E por último na aba “Fields”: adicione os campos:


  • Name XPath Element Result type Type
    lat lat Node Value of String
    lng lng Node Value of String




    Pronto com isso já conseguimos pegar as coordenadas do seu endereço. Para concluir o processo vamos escolher os campos que queremos e depois criar um arquivo de texto com o resultado. Para escolher os campos que queremos salvar adicione ao fluxo o objeto chamado “Select values” que está contido na pasta “Transform”. Após adiciona-lo ao fluxo clique em “Get fields to select”, o pentaho irá trazer todos os campos que estão no fluxo, desde o cep e o número fornecidos para consulta até os resultados dos objetos HTTP Cliente, portanto, retire do fluxo as colunas que não desejar removendo as colunas e deixando-as de acordo com a imagem:



    Por fim escolha o objeto “Text file output” na pasta “Output” e o insira no fluxo.
    Na aba “File” clique no botão “Navega” para escolher o endereço onde o txt será salvo e o nome do arquivo.



    Na aba “Fields” clique em “Obtem campos” para pegar os campos que serão salvos no txt e clique em Ok para concluir.



    Ok, tudo pronto, hora de salvar o arquivo e testar. Para salvar sua transformação clique no meu “File -> Save”, e salve sua transformação em um local desejado dando um nome para a mesma, no meu caso escolhi o nome “ETL_ENDERECO_CEP”. No final de tudo a transformação ficou com essa aparência:



    Para rodar vá no menu "Action->Run". Na tela que abriu clique em "Launch". O resultado final deve ser a tela abaixo:



    Bom é isso, ficamos por aqui sobre esse assunto, qualquer dúvida ou sugestão é só dizer!

    terça-feira, 14 de outubro de 2014

    Integração do Google Charts com a Narrativa do OBIEE

    Esta postagem tem o objetivo de integrar o OBIEE ao Google Charts, para a utilização de alguns tipos de gráficos que o BI 11g não contempla, por exemplo o gráfico da diferença:



    Este gráfico tem a função de fazer comparações entre dois conjuntos de dados, por exemplo, ele é ideal para comparação entre períodos diferentes. Vale salientar que a biblioteca do google está no site do google, portanto a visualização só será possível com acesso a internet. Feitas as considerações vamos ao que interessa! A nossa integração será feita com o gráfico de diferença, já que este recurso não está disponível atualmente no BI. Para começar selecione os parâmetros desejados dentro do BI como na imagem a seguir:



    Em seguida vamos para a tela de resultados para adicionar uma narrativa:



    Vamos editar a narrativa para começar a brincadeira, a narrativa é composta de três campos de texto o prefixo, a narrativa e o sufixo. Entendam que a parte que inserimos as referências dos dados vindos do BI sempre estarão no campo de texto central, a narrativa, pois a mesma é responsável pelo loop dos dados. No campo prefixo devemos adicionar o seguinte texto; observe os comentários feitos!!!:

    <!-- Insere a biblioteca do google charts na nossa narrativa -->
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">

    <!-- Chama o load do google através da função "drawChart" -->
    google.load("visualization", "1.1", {packages:["corechart"],callback:drawChart});

    <!-- A função "drawChart" por sua vez tem o objetivo de além de preencher duas lista que serão comparadas (listNew e listOld, nesse caso), também carrega o gráfico desejado num componente HTML-->
    function drawChart() {

    var listNew = [];
    var listOld = [];

    <!-- Após o carregamento da lista precisamos passar as mesmas para o google charts atrevés do objeto DataTable, observe a quantidade de colunas de cada lista e o tipo de cada coluna, pois se algo estiver errado a nossa integração não irá dar certo! -->
     var dataNew = new google.visualization.DataTable();
      dataNew.addColumn({ type: 'string', label: 'ANO' });
      dataNew.addColumn({ type: 'number', label: 'QTD NOVO' });

     var dataOld = new google.visualization.DataTable();
      dataOld.addColumn({ type: 'string', label: 'ANO' });
      dataOld.addColumn({ type: 'number', label: 'QTD ANTIGO' });

    Agora iremos para o campo Narrativa, para preencher as nossas listas; observe os comentários feitos!!!:

    <!-- Nesta etapa vamos preencher as listas. Se algum campo for string adicionar o apostrofo antes e depois do parâmetro como no exemplo do campo @1. Para campos numéricos temos que tomar cuidado com o padrão regional do BI, pois o google charts por default está configurado para o padrão americano, caso o servidor de BI esteja configurado com a pt-BR (Brasileiro), alterar a formatação das colunas numéricas para retirar as casas decimais -->
    listNew.push(['@1',@2]);
    listOld.push(['@1',@3]);

    Por último preenchemos o campo sufixo com o seguinte conteúdo; mais uma vez, observe com atenção os comentários feitos!!!:
    <!-- Adiciona as listas nos dataTables dataNew e dataOld-->
    dataNew.addRows(listNew);
    dataOld.addRows(listOld);

    <!-- Esta opção é responsável por personalizar seu gráfico vale a pena ler um pouco mais sobre esse item para saber até onde você pode ir com a integração, no nosso caso vamos apenas colocar o título do gráfico -->
    var options = { title: 'Teste' };

    <!-- Cria o tipo do gráfico que será exibido na tela, no nosso caso de Coluna, passando o objeto HTML que receberá nosso gráfico, aqui o objeto span com o id = piechart_diff -->
    var chartDiff = new google.visualization.ColumnChart(document.getElementById('piechart_diff'));

    <!-- Está linha computa a diferença entre os dois dataTables que foram setados acima, gerando um conjunto único de dados-->
    var diffData = chartDiff.computeDiff(dataOld, dataNew);

    <!-- Passa pra o nosso gráfico o conjunto de dados único e as options que setamos-->
    chartDiff.draw(diffData, options);
     }
    </script>
    <!-- Objeto HTML que irá exibir o conteúdo do gráfico -->
    <span id='piechart_diff' style='width: 450px; display: inline-block'></span>


    Bom com o final desse texto já conseguimos visualizar o nosso gráfico de diferença, conclua a narrativa. Afim de evitar algum problema mude a formatação das colunas numéricas para a seguinte configuração:


    Pode ser que em alguns casos você não consiga visualizar a nossa narrativa, então clique na imagem para mostrar a visualização como seria exibida no painel, isto basta pra visualizar a nossa integração. Se mesmo assim o gráfico não aparecer, por favor repita os passos pois algo deve está errado. Observe a formatação das colunas numéricas pois ela é uma grande candidata a dar problemas na nossa integração. Abaixo temos o resultado da nossa integração:


    Caso queria alterar o tipo de gráfico mude a linha:
    var chartDiff = new google.visualization.ColumnChart(document.getElementById('piechart_diff'));

    Para:
    var chartDiff = new google.visualization.PieChart(document.getElementById('piechart_diff'));

    Este gerará um gráfico de Pizza com a diferença:


    Você ainda pode alterar para um gráfico de barras horizontais alterando para:
    var chartDiff = new google.visualization.BarChart(document.getElementById('piechart_diff'));


    Com isso concluímos este post da integração do OBIEE com o Google Charts, espero ter ajudado a nossos leitores a entender um pouco mais sobre esta integração, para maiores conhecimentos e dúvidas sobre as opções sobre este gráfico segue o link do Google Charts para este tipo de gráfico: Diff Charts - Google Charts. Qualquer dúvida é só perguntar estarei sempre disposto a tentar sanar sa dúvidas, vamos aprendendo uns com os outros!

    Obrigado e até o próximo post!

    segunda-feira, 13 de outubro de 2014