O que é um “INDICADOR”?

Publicado: 18 de março de 2015 em Diversos

Super post criador por meu digníssimo colega e super Profissional da área de BI e Banco de dados Rodrigo Scarmeloto , vale a pena dar uma conferida. Veja mais matérias interessantes sobre Inteligência de negócios em http://rodrigoscarmeloto.wordpress.com

Inteligência de Negócio

 Indicadores ou “Balanced Score Cards”, como são conhecidos nas grandes empresas, é um representante da quantitativa dentro de uma empresa, o que isso quer dizer, um indicador representa uma unificação de alguns dados pertinentes a algum assunto que a empresa deseja verificar.

 Vamos usar como exemplo um atendimento telefônico de uma empresa, eles querem saber quantas pessoas ligaram mais de uma vez por qualquer motivo, o indicador aqui chamará “RE-CHAMADA” o que eles precisarão buscar: todas as ligações, números das pessoas que ligaram e se estes números aparecem mais de uma vez em sua pesquisa e se foi pelo mesmo motivo, como pode perceber o indicador e uma somatória de dados, e assim se compõe o indicador.

E o que fazer com o indicador criado?

 No nosso caso o indicador “re-chamada”, assim que eu tiver o número em mãos e cruzar com mês, cidades e bairro, por exemplo, posso saber…

Ver o post original 148 mais palavras

Ebook SQL Server na faixa!!

Publicado: 12 de setembro de 2014 em Diversos

Pessoal esta semana meu professor divulgou um post com link  para download de um ebook muito bom, sobre SQL Server , Vale a pena conferir.

Segue abaixo o link de acesso: http://www.gustavosantade.com/ebook-gratis/comment-page-1/#comment-4547

Este post é dedicado para aquelas pessoas que estão iniciando com Solr e estão esbarrando em questões de agrupamento de documentos. Pensando nisso resolvi abordar este tema, e mostrar como realizar agrupamento de dados de maneira simples e prática.

Quanto as configurações do Solr vou deixar para um outro post pois não é o foco neste momento, até porque se você está lendo este post provavelmente já realizou tal configuração J.

Agora vamos pensar em um problema que poderia ser resolvido com agrupamentos e para isso pense na seguinte questão:
E se eu tivesse que obter exatamente 3 registros por categoria em uma coleção de muitas categorias com milhares de registros?

Veja abaixo uma consulta comum do Solr que geralmente é utilizada.

Consulta sem agrupamento
http://localhost:8983/solr/select?q=*.*&start=0&rows=3&fl=id,title,category&wt=json&indent=true

Retorno

{
“responseHeader”:{
“status”:0,
“QTime”:91,
“params”:{
“fl”:”id,title,category”,
“indent”:”true”,
“start”:”0″,
“q”:”*:*”,
“wt”:”json”,
“rows”:”3″}},
“response”:{“numFound”:7707700,”start”:0,”docs”:[
{
“id”:”9855549″,
“category”:Esporte},
{
“id”:”9855540″,
“category”:Política},
{
“id”:”9855539″,
“category”:Tecnologia}]
}}

Note que a consulta não resolveu nosso problema, então vamos incrementar adicionando os recursos de agrupamento

Parâmetros básicos que iremos utilizar

Parâmetros adicionados

Tipo

Descrição

&rows=X integer Indica quantos grupos devem ser analisados
&group=true Boolean Habilita o recurso de agrupamento
&group.field=CAMPO_PARA_AGRUPAR string Usado para definir qual campo deverá ser utilizado para agrupar os resultados
&group.limit=X integer Indica a quantidade de valores que devem ser retornados para cada grupo em rows

Adicionando os parâmetros acima ficaremos com a seguinte consulta abaixo: http://localhost:8983/solr/select?q=*.*&start=0&rows=3&fl=id,title,category&wt=json&indent=true&group=true&group.field=categoria&group.limit=3

Veja abaixo como ficou o retorno, note que os Ids são distintos, ou seja exatamente o que estávamos buscando para resolver a questão levantada.

{
“responseHeader”:{
“status”:0,    “QTime”:425,    “params”:{      “group.ngrous”:”false”,      “fl”:”id,title,category”,      “indent”:”true”,      “start”:”0″,      “q”:”*:*”,
“group.limit”:”3″,
“group.field”:”category”,
“group”:”true”,
“wt”:”json”,
“rows”:”3″}},
“grouped”:{
“category”:{
“matches”:7707700,
“groups”:[{
“groupValue”:2249,
“doclist”:{“numFound”:86434,”start”:0,”docs”:[
{
“id”:”9855549″,
category”:Esporte},
{
“id”:”9855070″,
category”:Esporte },
{
“id”:”9854768″,
category”:Esporte }]
}},
{
“groupValue”:2408,
“doclist”:{“numFound”:240541,”start”:0,”docs”:[
{
“id”:”9855540″,
category”:Política},
{
“id”:”9855539″,
category”:Política},
{
“id”:”9855538″,
category”:Política}]
}},
{
“groupValue”:2253,
“doclist”:{“numFound”:16234,”start”:0,”docs”:[
{
“id”:”9855526″,
category”:Tecnologia},
{
“id”:”9855525″,
category”:Tecnologia},
{
“id”:”9481634″,
category”:Tecnologia}]
}}]}}}

Enfim, agora é só usar a imaginação e colocar a mão na massa.

NOTA: Existem muitos outros parâmetros de grupos que podem ser utilizados para ajudar no seu dia a dia e que podem ser visualizados AQUI . Em breve irei disponibilizar como realizar a implantação do mesmo em JAVA e PHP.

Iniciando a vida com BigData – mongoDB

Publicado: 27 de agosto de 2013 em Diversos

Ola pessoal to na área novamente!

Navegando por ai encontrei um ótimo artigo para quem quer se aventurar no mundo BigData, é um ótimo artigo para quem esta no HelloWord “Pegou” BDHelloWorld 😛 .

Este artigo fala sobre o mongoDB e para quem esta iniciando nesta área é uma ótima alternativa,  e ainda conta com versões para Windows, Linux, Max OS X e Solaris. Tenha uma boa leitura

Segue abaixo o link e parabéns ao  pelo ótimo artigo.

ACESSOhttp://www.itexto.net/devkico/?p=682

Pentaho Kettle – INSERT / UPDATE

Publicado: 23 de agosto de 2013 em Diversos

Pessoal tenho visto por ai  um monte de gente com dúvidas sobre o que faz cada opção do STEP  INSERT / UPDATE do Pentaho Kettle, componente este responsável por inserir ou atualizar dados em um banco de dados de destino.

Por esta razão coloco aqui o componente devidamente mapeado para ajudar a galera , se ainda houver dúvidas me avise,:-), vou ver se pouco a pouco coloco todos os componentes mapeados , assim a galera fica por dentro😉

Segue :

TEMPLATE_PENTAHO

.

Neste post irei demonstrar como executar um Prepared Statements para atribuir valores a variáveis dinamicamente, estou assumindo que saiba o que é um Stored Procedure e seus recursos, caso não saiba o que estou falando recomendo ler este ARTIGO, caso queira saber mais sobre Prepared Statement leia ESTE.

Cenário:

Um certa condição IF precisa saber que ação tomar para inserir registros em uma tabela de destino, porém antes de executar precisa averiguar o último registro da tabela de destino, se for vazio ou nulo significa que não há registros e precisa pegar o primeiro registro da origem, atribuir em uma variável de start e inserir os registros a partir do início. Coisas de ETL kkkkkk

Agora a questão que fica no ar é: Como farei para atribuir um valor de uma variável com dados da origem, se estou executando um SELECT para atribuir a uma variável já ativa no caso IDStartCon2 ???

Para isso uma das soluções seria atribuir o valor do SELECT em uma variável de usuário usando o INTO, mas outra questão aparece. L Como executar e retornar o valor para a próxima linha e continuar o código?

Bom para isso usuremos o Prepared Statement. (Referências lá no início lembra? )

O trecho de código de exemplo abaixo comentando irá ajudar a esclarecer todos os questionamentos levantados

— Recebendo o ultimo ID da tabela de destino (Imagine que seja o SELECT do seu ambiente )
SET v_ultima_id=(SELECT MAX(factClipDetailsIDFROM mos_index_bi WHERE factOttID=v_mos_indexType AND factSourceID=v_mos_indexSource AND  factYearID=yearNumber);

— AVERIGUANDO SE VALOR É VÁLIDO
  IF (v_ultima_id IS NULL OR v_ultima_id=THEN
     — AQUI ACONTECE A MÁGICA (USAREMOS A VARIÁVEL v_IDStartCon2 COMO APOIO PARA MONTAR A QUERY DINAMICAMENTE E ATRIBUIR O VALOR …
     — GERADO A VARIAVEL DE USUARIO @v_IDStart2 PROVIDA DO MENOR VALOR DA TABELA DE ORIGEM E USUANDO O INTO DENTRO DO SELECT PARA       

         — ATRIBUIR O VALOR.
     SET v_IDStartCon2= (‘select MIN(ID) INTO @v_IDStart2 from Relaciones WHERE TIPO <> ”P”’);

        — AQUI ESTOU PREPARANDO PARA EXECUTAR A CONSULTA
     PREPARE STMT1 FROM v_IDStartCon2;

        — AQUI IREI EXECUTAR A CONSULTA PARA RECEBER O RESULTADO EM @v_IDStart2
     EXECUTE STMT1;    

        — PRONTO JA TEM A A VARIÁVEL EM MEMÓRIA PRONTA PARA USAR COMO QUISER😉
        SET v_ultima_id=@v_IDStart2;
        SET v_ultima_id2=@v_IDStart2 + v_IDIncremental;        

END IF;

É isso ai galera qualquer duvida , avisa!

 

É ai pessoal, neste post vou falar sobre dois comandos que podem ajudar a vida de muita gente e que por incrível que pareça é bem pouco conhecido, principalmente para quem está iniciando na área. Trata-se dos comandos de comparação do T-SQL o Except e o Intersect, estes dois comandos realizam a comparação de valores distintos entre 2 tabelas e é extremamente útil.

A sintaxe do comando retirada do site oficial ( http://technet.microsoft.com/pt-br/library/ms188055(v=sql.100).aspx) :

{ <query_specification> | ( <query_expression> ) }
{ EXCEPT | INTERSECT }
{ <query_specification> | ( <query_expression> ) }

Traduzindo

SELECT x,y FROM Z
EXCEPT OU INTERSECT
SELECT x,y FROM W

Bom para que possam entender melhor vou preparar um cenário de teste e ir explicando passo a passo:

Primeiro passo, estou criando 2 tabelas temporárias apenas para ilustrar os testes, fiz o mais simples possível para que possam entender os dados posteriormente.

— CRIAÇÃO DO CENÁRIO DE TESTE

— TABELA TEMPORÁRIA B
create table #A (
 ID 
int not null identity(1,1) primary key
,nome varchar(50)
,salario Money
);

GO

— TABELA TEMPORÁRIA B
create 
table #B (
 ID int not null identity(1,1) primary key
,nome varchar(50)
,salario money
);

Agora vou realizar alguns inserts , afim de realizar a comparação dos dados

— INSERTS NECESSÁRIOS TABELA #A

INSERT INTO #A values (‘MARCELO’,345.49);
INSERT INTO #A values (‘BEATRIZ’,185.49);
INSERT INTO #A values (‘JUAREZ’,745.49);
INSERT INTO #A values (‘JOSE’,3345.49);

GO

— INSERTS NECESSÁRIOS TABELA #B

INSERT INTO #B values (‘JOSE’,3345.49);
INSERT INTO #B values (‘JOAO’,2345.49);
INSERT  INTO #B values (‘JUAREZ’,745.49);

 

Analisando os dados a seguir e imaginando que fossem 30.000 registros, poderíamos nos perguntar:

  1. Quais são os dados distintos entre a tabela #A e tabela #B ?
  2. Quais valores distintos presentes nas  tabelas #A e  #B ?

Para responder exatamente estas questões é que entram em ação os comandos Except e Intersect onde :

EXCECPT: Retorna os dados distintos da tabela #A e que não existam na tabela #B.
INTERSECT: Retorna os valores distintos entre nas tabelas #A e #B.

Na prática:

A Tabela #A possui:

MARCELO    345,49
BEATRIZ    185,49
JUAREZ    745,49
JOSE    3345,49

A Tabela #B possui:

JOSE    3345,49
JOAO    2345,49
JUAREZ    745,49

Logo :

SELECT NOME,SALARIO FROM #A
EXCEPT
SELECT NOME,SALARIO FROM #B

 Devo ter como resultado os valores de #A que não estão em #B como podem ver abaixo

EXCEPT
BEATRIZ    185,49
MARCELO    345,49

Agora caso eu execute:

SELECT NOME,SALARIO FROM #A
INTERSECT
SELECT NOME,SALARIO FROM #B

Devo ter como resultado os valores que distintos que apareçam tanto na tabela #A quanto na #B como podem ver abaixo

INTERSECT
JOSE    3345,49
JUAREZ    745,49

OBS: Estes comandos foram introduzidos no SQL Server a partir da versão 2008 J

 

É isso ai galera, espero que possa ter ajudado a esclarecer as dúvidas e até a próxima …