quarta-feira, 4 de novembro de 2015

Comandos para efetuar Backup PostgreSQL: normal, compactado e apenas da estrutura

Comandos para efetuar Backup PostgreSQL: normal, compactado e apenas da estrutura.
Obs. Os comandos devem ser executados quando Windows utilizando prompt e dentro da pasta ”c:\Program Files <x86>\PostgreSQL\9.4\bin” ou localizar a pasta “PostgreSQL\9.4\bin”. Já quando Linux precisamos apenas abrir o terminal e executar os comandos.

Backup Normal
------------------------------------
Criar backup: pg_dump –h 127.0.0.1 -U postgres -v bancodedados > caminho_para_salvar_o_arquivo

Para restaurar: psql -h 127.0.0.1 -U postgres -v -d bancodedados < localdoarquivo
------------------------------------


Backup Compactado
------------------------------------
Criar backup:  pg_dump –h 127.0.0.1 -U postgres -v -Fc bancodedados  > local_do_arquivo

Para restaurar: pg_restore –h 127.0.0.1 -U postgres -v -d bancodedados -Fc local_do_arquivo


Backup apenas da estrutura do banco
------------------------------------
Criar backup: pg_dump –h 127.0.0.1 -U postgres -s bancodedados > local_do_arquivo

Para restaurar: psql –h 127.0.0.1 -U postgres -s bancodedados < local_do_arquivo
------------------------------------


Para maiores informações podemos consultar a documentação PostgreSQL: http://pgdocptbr.sourceforge.net/pg80/backup.html

quinta-feira, 29 de outubro de 2015

Upload de arquivos através da API Rest usando import-export.bat e .sh – Pentaho 5

Para importar ou exportar um arquivo para um diretório no Pentaho 5 podemos usar o import-export no Windows o .bat e no Linux .sh.

Um exemplo de importação:
import-export.bat --import --url=http://localhost:8080/pentaho --username=admin --password=password --charset=UTF-8 --path=/public --file-path=d:\teste.html --overwrite=true --permission=true --retainOwnership=true

Obs. O comando acima pode ser executado como teste no prompt do Windows ou no terminal do Windows, posteriormente podemos criar uma rotina agendada de execução no sistema operacional.

Detalhes importantes:
 --file-path: diretório do arquivo a ser enviado;
--path: diretório de destino do arquivo;
--username: usuário
--password: senha
--charset: codificação

Para maiores informações podemos consultar a documentação da Pentaho no link:


quinta-feira, 15 de outubro de 2015

Kettle Enviando SMS através da API LocaSMS R$ 0,02 cada SMS (30 mensagens gratuitas para testes)

O objetivo desse post é demonstrar o processo de envio de SMS através do Kettle(Data Integration Pentaho).

Para esta tarefa vamos utilizar a API da LocaSMS onde o custo é R$ 0,02 cada SMS, mas para testarmos as funcionalidades a empresa disponibiliza 30 SMS grátis ao criar uma conta.

Criar uma conta no LocaSMS através do Link:
Após criar a conta você recebera via sms a senha para utilização e o usuário é o numero do seu telefone DD99999999

2º Criar uma Transformação no Kettle adicionando os steps:
- Generate Rows;
- Modified Java Script Value;
- HTTP Client;
Logo após devemos ligar todos os steps.
3º No Step Generate Rows vamos criar e definir os valores para os campos:
- usuario: que é o código de área(2 dígitos)+ o número do seu celular: DD99999999;
- senha: é enviada por sms após criar a conta;
- mensagem: mensagem a ser enviada, lembrando que os espaços devem ser preenchidos com %20, e alguns caracteres especiais podem dar problema.
- numerodestino: DDD(com 2 dígitos) + número de destino;
Ficando assim:

4º No Step Modified Java Script Value montamos a url para enviar o SMS através de uma função javascript:

var url_final = 'http://209.133.196.250/painel/api.ashx?action=sendsms&lgn='+usuario+'&pwd='+senha+'&msg='+mensagem+'&numbers='+numerodestino;

5º No Step HTTP Client enviamos a URL que é o parâmetro url_final onde efetuará o envio do SMS.

Segue link para download da transformação apresentada"EnviaLocaSMS.ktr":

Link da locaSMS onde apresenta o manual da API utilizada:



sexta-feira, 9 de outubro de 2015

sexta-feira, 2 de outubro de 2015

Pentaho Usando Google Maps - uma Rota com vários Markers em volta

Continuando o exemplo Google maps: 

Podemos criar diversos markers, informando ícones distintos para cada marker.

Para isso precisamos alterar o JavaScript do Mapa passando arrays de latitude e longitude, informamos os ícone para serem utilizados(se não informar irá utilizar o padrão), e também informamos o que será listado no clique do marker:


var map;
var directionsDisplay;

var directionsService = new google.maps.DirectionsService();

function initialize() {
debugger;
directionsDisplay = new google.maps.DirectionsRenderer();
var latlng = new google.maps.LatLng(-18.8800397, -47.05878999999999);

    var options = {
        zoom: 5,
center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    map = new google.maps.Map(document.getElementById("mapa"), options);
directionsDisplay.setMap(map);
directionsDisplay.setPanel(document.getElementById("trajeto-texto"));



if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function (position) {

pontoPadrao = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
map.setCenter(pontoPadrao);

var geocoder = new google.maps.Geocoder();

geocoder.geocode({
"location": new google.maps.LatLng(position.coords.latitude, position.coords.longitude)
            },
            function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
$("#txtEnderecoPartida").val(results[0].formatted_address);
}
            });
});
}
}

function attachSecretMessage(marker, secretMessage) {
  var infowindow = new google.maps.InfoWindow({
    content: secretMessage
  });

  marker.addListener('click', function() {
    infowindow.open(marker.get('map'), marker);
  });
}

initialize();

$("form").submit(function(event) {

event.preventDefault();

var enderecoPartida = $("#txtEnderecoPartida").val();
var enderecoChegada = $("#txtEnderecoChegada").val();

var request = {
origin: enderecoPartida,
destination: enderecoChegada,
//waypoints: [{location: 'Rodoviária, Curitiba'}, {location: 'Mercado, Festival'}],
travelMode: google.maps.TravelMode.DRIVING
};

directionsService.route(request, function(result, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(result);
}
});

});

$("");

$(function(){

var array_marker1 = [
  [' João da Silva - Brigadeiro frango 892 Curitiba PR', -25.429818707550634, -49.28400590000001],
  [' Carlos Almeida - Visconde de Guarapuava 150 Curitiba PR', -25.42701120754971, -49.243870000000015],
  ['Jean Francisco da Silva - Cruz Machado 32 Curitiba PR', -25.42956425755057, -49.27301109999996],
  ['Mauricio da Silva - Sete de Setembro 43 Curitiba PR',-25.43604810755275, -49.26236740000002],
  ['Joana Braga - Chile 3343 Curitiba PR', -25.452987707558535, -49.27117620000001],
  ['Julio Silveira - Iguacu 87 Curitiba PR', -25.43969965755398, -49.26268485000003],
  ['Marlene Mattos - Francisco Rocha 832 Curitiba PR', -25.438911307553735, -49.29122834999998],
  ['Joaquim Padilha - Silva Jardim 2232 Curitiba PR', -25.44501495755579, -49.281739000000016],
  ['Junior Fonseca - José Loureiro 678 Curitiba PR', -25.43124715755116, -49.26620034999996],
  ['Patricia da Paz - Praça Ozorio 23 Curitiba PR', -25.432811457551686, -49.27505959999996],
  ['Fernando Pedrosa - Visconde de Nacar 54 Curitiba PR', -25.444558307555685, -49.28864414999998],
  ['Kelvin Jeison - visconde de guarapuava 750 Curitiba PR', -25.44636735755626, -49.27561355],
  ['Sem Nome - R. Des. Motta, 750 - Água Verde, Fazendinha/Portão, Curitiba - PR', -25.43742330755322, -49.26142370000002],
  ['Paulo Coelho - Av. Silva Jardim, 13-29 - Rebouças, Matriz, Curitiba - PR, Brasil', -25.43742330755322, -49.26142370000002],
  
  ];
  
  

for (i = 0; i < array_marker1.length; i++) {  
//alert (array_marker1[i]);
  marker = new google.maps.Marker({
position: new google.maps.LatLng(array_marker1[i][1], array_marker1[i][2]),
    title: array_marker1[i].toString(),
icon: 'img/marker1.png', //define o ícone
    map: map
  });
  attachSecretMessage(marker, array_marker1[i].toString()); 
}


var array_marker2 = [
  [' 001 - Pablo da Costa - André de Barros 87 Curitiba PR', -25.436006957552745, -49.27170760000001],
  [' 002 - Vicente Machado Curitiba PR', -25.433630157551953, -49.27784125000005],
  [' 003 - Alfredo Bufren 98 Curitiba PR',-25.428608807550226, -49.26821755000003],
  ['  004 - Av. Vicente Machado, 2293-2327 - Centro, Santa Felicidade, Curitiba - PR, 80440-020, Brasil',-25.4417465075547, -49.29811749999999],
  [' 005 - Rua do Herval Curitiba PR', -25.432087407551446, -49.25545505000002],
  ];

for (i = 0; i < array_marker2.length; i++) {  
  marker = new google.maps.Marker({
position: new google.maps.LatLng(array_marker2[i][1], array_marker2[i][2]),
    title: array_marker2[i].toString(),
icon: 'img/marker2.png', //define o icone
    map: map
  });
  attachSecretMessage(marker, array_marker2[i].toString()); 
}

var array_marker3 = [
  [' CT 1 - Brigadeiro Franco 1050 Curitiba PR', -25.434307407552133, -49.28192419999999],
  [' CT 2 - Engenheiro Rebouças 430 Curitiba PR', -25.443225357555207, -49.26313204999997],
  [' CT 3 - Senador Souza Neves 874 Curitiba PR', -25.43131000755113, -49.248787400000026],
  
  ];

for (i = 0; i < array_marker3.length; i++) {  
  marker = new google.maps.Marker({
position: new google.maps.LatLng(array_marker3[i][1], array_marker3[i][2]),
    title: array_marker3[i].toString(),
icon: 'img/marker3.png', // define o icone
    map: map
  });
  attachSecretMessage(marker, array_marker3[i].toString()); 
}

var enderecoPartida = "Engenheiro rebouças 650 Curitiba PR";
        var enderecoChegada = "Brigadeiro Franco 654 Curitiba PR";
   
var request = {
origin: enderecoPartida,
destination: enderecoChegada,
   //waypoints: [{location: 'Brigadeiro Franco 354 Curitiba PR'}, {location: 'Getulio Vargas 354 Curitiba PR'}],
travelMode: google.maps.TravelMode.DRIVING
};
directionsService.route(request, function(result, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(result);

}
});
});


Explicações:
 icon: 'img/marker3.png' = se não informar (comentar a linha) é usado o padrão do google maps, no pentaho pode criar uma pasta chamada Google dentro do diretorio: 
c:\opt\biserver-ce\pentaho-solutions\system\common-ui\resources\js\google\img\, dentro dessa pasta 'img' podemos adicionar todos os ícones e depois efetuar o apontamento no Js da seguinte forma:
 icon: '/pentaho/content/common-ui/resources/js/google/marker3.png',

function attachSecretMessage= é usada para apresentar os dados ao clicar sobre o marker.

Para conseguir ícones conforme a necessidade e de forma gratuita pode-se utilizar alguns sites, este link apresenta alguns:




quarta-feira, 16 de setembro de 2015

Google Maps Pentaho - Exemplo Ctools CDE criando rota entre endereço de partida e endereço de chegada.

Existem várias maneiras de utilizar o Google Maps com o Pentaho, uma delas vou apresentar abaixo.
Um exemplo básico de como apresentar a rota entre endereço de partida e endereço de chegada:
                     Obs. Os endereços apresentados são apenas para demonstração do mapa.
Para fazer isso criamos primeiramente no CDE no “Layout Panel”  uma linha-> uma coluna -> com html:

Depois no Components Panel => Scripts => JavaScript Function adicionamos a função:

Segue link para download dos arquivos cdfde e wcdf do exemplo:
https://drive.google.com/file/d/0B0TaKq3jquzndUtfT1Q2Zy1fV0E/view?usp=sharing 

Para o correto funcionamento é necessário ter o arquivo estilo.css que deve estar no caminho:
- \biserver-ce\pentaho-solutions\system\common-ui\resources\js\google\stilo.css
o conteudo do stilo.css desse exemplo é:
* { margin: 0; padding: 0; font-family: Arial, Helvetica, sans-serif; font-size: 14px }
#site { width: 960px; margin: 10px auto 0 auto }
fieldset { border: 0 }
legend { font-weight: bold; margin-bottom: 10px }
label { display: block; margin-bottom: 2px }
form div { margin-bottom: 10px }
h1 { text-align: center; font-size: 18px }
input { width: 500px; padding: 5px }
input[type=submit] { padding: 5px 10px; width: auto }
#mapa { width: 950px; height: 500px;float: left;left: 0px}
#trajeto-texto { width: 300px; height: 400px; float: right; overflow: scroll } 

Link para download do stilo.css:
https://drive.google.com/file/d/0B0TaKq3jquznbDBKdlBVNHNFUVk/view?usp=sharing 

Nesse exemplo básico não existe consulta ao banco de dados (DW) via MDX ou SQL.
Quando necessário efetuar consultas:
-Será necessário adicionar os data Sources (mdx over modrianJndi ou Sql OverJndi) no Data Source Panel;
- Também adicionar componente Query no componentes Panel qual irá passar o parâmetro do resultado da consulta do data source. Esse parâmentro que é o endereço pode ser passado para a função javascript no lugar de:
-  $("#txtEnderecoPartida").val(); 
-  e $("#txtEnderecoChegada").val();

Blogs de referências utilizadas
- Blog Princiweb: http://www.princiweb.com.br/blog/programacao/google-apis/google-maps-api-v3-criando-rotas-entre-multiplos-pontos.html

- Blog Fernando Felix do Nascimento Junior: https://fjacademic.wordpress.com/2011/07/29/exemplo-google-maps-no-pentaho/


Documentação oficial da API do Google Maps:
https://developers.google.com/maps/documentation/javascript/directions?hl=pt-br 

terça-feira, 15 de setembro de 2015

Cursos Gratuitos HTML,CSS, JavaScript e jQuery - Linguagens usadas nos Dashboards Ctools

Para desenvolver dashboards otimizados, eficientes, interativos e bonitos é necessário dominar as linguagens: HTML, CSS, JavaScript, jQuery, que são aplicadas na ferramenta Ctools.

Como dica a CodeCademy oferece de forma gratuita os cursos online: HTML, CSS, JavaScript, jQuery e outros. Acredito que pode ajudar muito no aprendizado.
Link:

segunda-feira, 14 de setembro de 2015

Pentaho 6.0 – Preview

Foi disponibilizada a nova versão "Pentaho 6 - Preview" no dia 10/09/2015 através do link:

A nova versão promete diversas inovações, alterações, correções, que em breve serão relatadas.

domingo, 23 de agosto de 2015

Kettle Retorna Latitude e Longitude passando Endereço: CEP e número - Google Maps e CorreioControl

Situação: Preciso usar GeoMap, mas no cadastro de clientes não tenho a latitude e longitude, preciso passar o endereço e preciso que retorne a latitude e a longitude.

Solução: Através do post do profissional Sérgio Cavalcante criei uma rotina no PDI que informando o CEP e o número resulta na latitude e longitude, sendo que consulta primeiramente o correiocontrol e depois o google maps.

Link do Blog do Sérgio Cavalcante:


Link para Download da Transformação de exemplo "Retorna_Latitude_Longitude.ktr" qual utiliza o CEP e o número como base, usando o correiocontrol e google maps(API):

https://drive.google.com/file/d/0B0TaKq3jquznRXVDaE1WejByZjg/view?usp=sharing 

Link download da Transformação de exemplo "Retorna_Latitude_Longitude_ClientesApenas_Google.ktr" qual utiliza dos parâmetros: rua, número, bairro,cidade, estado, usando apenas o google maps como consulta(API):

quarta-feira, 19 de agosto de 2015

Problema Ctools CDE componente “Multiple Select Component” Hyuds não oculta(não fecha)

Problema: na versão Ctools CDE 15.06.30 o componente “Multiple Select Component” Hyuds abre mas não fecha (não oculta).

Solução: solucionamos o problema com ajuda do profissional Marcello Pontes através do Grupo Yahoo "Pentaho Brasil" que orientou a usar o github dele(link abaixo) alterando o arquivo  cdf-core/cdf/js-lib/hynds/jquery.multiselect.js

sexta-feira, 14 de agosto de 2015

Função MDX ParallelPeriod - Retornar o mês do ano anterior, o mês anterior desse ano

O objetivo desse post é apresentar a função MDX ParallelPeriod, para calcular períodos por exemplo: Mês Anterior, Ano Anterior, ou quantos anos, meses precisar.

A função ParallelPeriod retorna um membro de um período anterior na mesma posição relativa como um membro especificado.
ParallelPeriod( [ Level_Expression [ ,Index [ , Member_Expression ] ] ] )

Para obter o Mês Anterior:
ParallelPeriod([Periodo].[2015].[1], 1, [Periodo].[2015].[1])

Para obter o mesmo Mês do Ano anterior:
ParallelPeriod([Periodo].[2015].[1], 12, [Periodo].[2015].[1])

Para obter o periodo de 6 meses atrás:
ParallelPeriod([Periodo].[2015].[1], 6, [Periodo].[2015].[1])

Para maiores detalhes pode ser consultado o site da Microsoft que explica de forma detalhada com exemplos a função ParallelPeriod:


Operadores MDX Pentaho

Nos links abaixo da Microsoft obtemos os operadores aceitos pelo MDX(Microsoft) que é parecido com os usados no Pentaho. Clicando sobre o operador você é direcionado ao site da Microsoft, onde a Microsoft explica cada operador e depois apresenta um exemplo prático:
·         -- (Comentário)
·         - (Exceção)
·         - (Negativo)
·         - (Subtração)
·         (Produto cruzado)
·         (Multiplicação)
·         / (Divisão)
·         ^ (Potência) (MDX)
·         /*...*/ (Comentário)
·         // (Comentário)
·         : (Intervalo)
·         + (Adição)
·         + (Positivo)
·         + (União)
·         < (Menor que)
·         <= (Menor que ou Igual a)
·         (Diferente de)
·         = (Igual a)
·         (Maior que)
·         >= (Maior que ou igual a)
·         AND
·         IS
·         NOT
·         OR
·         XOR


Funções MDX Pentaho

No link abaixo da Microsoft obtemos todas as funções aceitas pelo MDX(Microsoft) que é parecido com o usado no Pentaho, a maioria das funções funcionam no Pentaho(pelo menos as que eu usei e testei): 

O link é: 

Muito interessante esse link, clicando no menu a esquerda sobre a função existe uma explicação das funcionalidades e um exemplo prático de utilização. 

As funções apresentadas no link são(clicando sobre os itens abaixo você abre cada função no site da Microsoft):
·         AddCalculatedMembers
·         Aggregate
·         AllMembers
·         Ancestor
·         Ancestors
·         Ascendants
·         Avg
·         Axis
·         BottomCount
·         BottomPercent
·         BottomSum
·         CalculationCurrentPass
·         CalculationPassValue
·         Instrução CASE
·         Children
·         ClosingPeriod
·         CoalesceEmpty
·         Correlation
·         Count (Dimensão)
·         Count (Níveis de hierarquia)
·         Count (Conjunto)
·         Count (Tupla)
·         Cousin
·         Covariance
·         CovarianceN
·         Crossjoin
·         Current
·         CurrentMember
·         CurrentOrdinal
·         CustomData
·         DataMember
·         DefaultMember
·         Descendants
·         Dimension
·         Dimensions
·         Distinct
·         DistinctCount
·         Dividir
·         DrilldownLevel
·         DrilldownLevelBottom
·         DrilldownLevelTop
·         DrilldownMember
·         DrilldownMemberBottom
·         DrilldownMemberTop
·         DrillupLevel
·         DrillupMember
·         Error
·         Except
·         Exists (MDX)
·         Extract
·         Filter
·         FirstChild
·         FirstSibling
·         Generate
·         Head
·         Hierarchize
·         Hierarchy
·         IIf
·         Instr
·         Intersect
·         IsAncestor
·         IsEmpty
·         IsGeneration
·         IsLeaf
·         IsSibling
·         Item (Membro)
·         Item (Tupla)
·         KPIGoal
·         KPIStatus
·         KPITrend
·         KPIWeight
·         KPICurrentTimeMember
·         KPIValue
·         Lag
·         LastChild
·         LastPeriods
·         LastSibling
·         Lead
·         Leaves
·         Level
·         Levels
·         LinkMember
·         LinRegIntercept
·         LinRegPoint
·         LinRegR2
·         LinRegSlope
·         LinRegVariance
·         LookupCube
·         Max
·         MeasureGroupMeasures
·         Median
·         Members (Conjunto)
·         Membros (cadeia de caracteres)
·         MemberToStr
·         MemberValue
·         Min
·         Mtd
·         Name
·         NameToSet
·         NextMember
·         NonEmpty
·         NonEmptyCrossjoin
·         OpeningPeriod
·         Order
·         Ordinal
·         ParallelPeriod
·         Parent
·         PeriodsToDate
·         Predict
·         PrevMember
·         Propriedades
·         Qtd
·         Rank
·         RollupChildren
·         Root
·         SetToArray
·         SetToStr
·         Siblings
·         Stddev
·         StddevP
·         Stdev
·         StdevP
·         StripCalculatedMembers
·         StrToMember
·         StrToSet
·         StrToTuple
·         StrToValue
·         Subset
·         Sum
·         Tail
·         Esse
·         ToggleDrillState
·         TopCount
·         TopPercent
·         TopSum
·         TupleToStr
·         Union
·         UniqueName
·         UnknownMember
·         Unorder
·         UserName
·         ValidMeasure
·         Value
·         Var
·         Variance
·         VarianceP
·         VarP
·         VisualTotals
·         Wtd
·         Ytd