telecomHall BR

 

Hunter KPI (Base Tables)

terça-feira, 13 de julho de 2010 20:00:00 Categories: Access Base de Dados Hunter KPI
Rate this Content 1 Votes

Quando falamos em KPI ou em Análise de Performance, o que logo nos vem à cabeça? Embora a resposta a essa pergunta seja particular a cada pessoa, podemos pensar de forma genérica em um relatório: uma tabela, um gráfico, um mapa ou até mesmo uma combinação de todos.

 

 

Independentemente de qual seja o formato desse relatório, é correto afirmarmos que ele serve para nos informar uma comparação de indicadores. Esta comparação pode ser em relação a uma valor fixo, ou relativa a uma outra grandeza, entre outros. Esses seriam os algorítmos utilizados.

Mas hoje vamos ver um passo anterior, mas muito importante, e que é essencial para a geração de qualquer relatório – o uso de tabelas base para armazenamento de dados, e posterior consultas e análises.

 

Objetivo

A partir de tabelas de dados de contadores (Excel, Texto, etc.) importar os dados para tabelas acumulativas de performance.

Em outras palavras, começar a criação do módulo base KPI, onde a partir de suas tabelas conheceremos diversos algorítimos que auxiliam bastante nas análises.

Observação: não confunda com o que foi apresentado no módulo Hunter KPI (Intro). Na ocasião, aprendemos como importar um arquivo do excel, com dados de contadores, para uma tabela do banco de dados. Hoje vamos um pouco mais além, e sempre que os dados de contadores brutos forem importados, acumularemos os dados em um repositório (tabelas base). De qualquer forma não se preocupe. Acompanhe o tutorial e ficará claro no final.

Nota: Na grande maioria dos tutoriais temos os arquivos relacionados, e que são enviados para os Assinantes.

  • Se você é um Assinante, por favor verifique em seu e-mail o arquivo recebido para este tutorial, e utilize o suporte para qualquer dúvida ou problema que encontrar.
    • Blog_018_Hunter_KPI_(Base_Tables).zip.
  • Se você é um Membro comum e tem acesso apenas ao tutorial escrito, aprenderá sempre conceitos muito importantes que com certeza vão lhe ajudar em seus próprios desenvolvimentos. Leia e comprove em cada novo tutorial.
    • Se você deseja contribuir de alguma forma, a maneira mais simples é tornar-se um Assinante.

A nossa audiência vai de estudantes a profissionais experientes. Por isso pedimos um pouco de compreensão e tolerância se alguns dos conceitos hoje apresentados forem básicos para você. Além disso, todos os tutoriais, códigos e programas estão num processo contínuo de edição. Isso significa que se encontrarmos algum erro, por exemplo, de gramática ou ortografia, tentaremos corrigi-lo o mais rápido possível. Também gostaríamos de receber o seu feedback, nos informando de erros encontrados ou passagens que ficaram confusas e merecem ser reescritas.

 

 

Estrutura de Arquivos

Mais uma vez, não há necessidade de criarmos nenhum outro diretório. Vamos trabalhar com o módulo Hunter KPI. Não precisamos criar nenhum novo diretório hoje pois estamos trabalhando com um módulo existente – KPI (1).

 

Essa estrutura, bem como seus arquivos já foram criados em tutorial anterior.

 

 

Tabelas Base

Entendemos como tabelas base do módulo KPI aquelas tabelas onde acumulamos dados de performance. O acumulo dos dados é realizado através de procedimentos automatizados que permitam acumular os dados em tabelas padronizadas.

Para adiantar um pouco o nosso lado, e não perder tempo hoje com outros assuntos como criação de tabelas, etc, considere que já temos criadas 3 tabelas base.

Além disso, hoje ainda não utilizaremos a prática recomendada que é manter as tabelas em bancos de dados separados. Vamos fazer tudo nesse banco de dados (importar os arquivos, criar as tabelas, consultas, etc...), pois hoje estamos aprendendendo o processo, e quanto menos opções de confundir a nossa cabeça melhor.

 

 

Configurações e Inicializações

Existem diversas formas de realizar os processos automáticos. A mais simples, porém a menos indicada, é escrever todos os comandos e configurações diretamente no código. É a prática menos indicada porque sempre que você tiver que alterar qualquer dado, como por exemplo o diretório onde estão os seus dados de entrada, você precisará editar o código.

Outras formas são através do carregamento dos dados iniciais a partir de um arquivo e/ou tabela. Nos nossos módulos optamos por essa segunda forma: transportamos quase todas variáveis para tabelas auxiliares. Dessa forma, para mudar por exemplo o diretório de saída, basta mudar o valor na tabela auxiliar.

 

Uma outra vantangem deste procedimento é que podemos ter várias funções e procedimentos no nosso código. E digitarmos diretamente os valores em nosso código – isso se chama de hard-coding – podemos ter problemas para alterar em todos os locais. (É claro, podemos usar o Encontrar -> Substituir; mas isso já foge da nossa busca das melhores soluções, e até nesse caso, se as ocorrências forem muitas, vamos gastar tempo com issso).

Mas só para não complicar, também não usaremos isso hoje – voltamos a reforçar que estamos preocupados em que você entenda o processo. Depois fica fácil aprender as melhorias.

 

Homogeneização

Já falamos disso antes, mas vale a pena lembrar também a importância da homogeneização dos dados, ou seja, definir indicadores que seja comuns, independente de qual seja a tecnologia ou o fornecedor dos equipamentos. A forma mais fácil de entender isso é com o mais padrão de todos os indicadores – o tráfego. Ou seja, nossa tabela contém um indicador para Tráfego, seja ele GSM, UMTS ou outro.

 

 

Granularidade dos Dados, pra quê?

Também um fator importante que veremos nas tabelas acumulativas é que é interessante acumular os dados em todas as granularidades. Por exemplo, teremos uma tabela acumulativa com os principais indicadores a nível de setor (CELL), mas também teremos uma tabela com esses mesmos indicadores agrupados por BSC/RNC e também por Rede (NET). A figura abaixo mostra as três tabelas, com as três granularidades mostradas (CELL, BSC e NET).

 

Mas porque isso? É claro que podemos fazer consultas sobre a nossa tabela principal, com os dados de cada setor. Porém, a medida que a quantidade de dados acumulada vai crescendo, também vai ficando mais demorada a execução de uma consulta. O Access tem o poder de lidar com milhares e milhares de dados ao mesmo tempo, mas se vamos ter um relatório que usa os dados de forma mais agrupada, por que não deixar os mesmos já prontos?

 

Periodicidade

A periodicidade também é um item que vamos levar em conta. Sem nos estendermos mais em conceitos téoricos por hoje, vamos trabalhar com uma periodicidade de 1 hora, ou seja, para cada grupo de contadores, o valor representará as contagens durante exatamente uma hora. Isso não impede porém que os dados sejam armazenados em demais periodiciades, como por exemplo, podemos ter uma tabela com os dados acumulados numa periodicidade de 1 dia. Isso vai fica mais claro com o tempo, agora apenas saiba que os nossos dados foram coletados na OSS com periodicidade padrão de uma hora.

 

Dados de Entrada

Como você esta acostumado, antes de começarmos vamos definir alguns dados fictícios para serem usados no nosso exemplo de hoje. Antes porém, vale a pena fazermos uma observação sobre os dados de entrada.

Seria muito bom se os dados de entrada que utilizamos no nosso trabalho viessem todos num formato padrão, seja Texto ou Excel, e que estes dados estivessem no formato pronto para importá-los. Mas não é isso que acontece.

Os dados geralmente tem um formato padrão, como por exemplo com a inserção de um cabeçalho com informações que para o nosso caso são indesejáveis. Por exemplo, um formato de saída como o mostrado abaixo, com um cabeçalho (1). É preciso fazer um tratamento antes – excluir as linhas indesejadas - antes de importar.

 

Mas o nosso trabalho pode ser ainda maior. A fonte de dados pode ficar bastante complexa, dependendo de onde estamos obtendo os nossos dados. Não é raro encontrarmos dados de entrada no formato mostrado abaixo, onde os mesmos vão sendo apresentados sequencialmente, ou seja, precisam de um tratamento maior agora, a fim de colocar o mesmo no formato desejado para importação.

 

A ferramenta Hunter está preparada para importar dados de entrada nos formatos acima, e em qualquer um novo formato que porventura surja. Para isso, utilizamos um módulo que veremos em breve: o Hunter Parser.

Um parser é um aplicativo que pega os dados em um determinado formato bruto, e transforma esses dados para um formato desejado. Utilizando o parser nos dados de entrada acima, tais quais eles vem de OSS comerciais, temos os dados de entrada no formato tabular.

 

 

Não vamos nos preocupar agora com o parser, e vamos assumir que os dados exportados da nossa OSS já estão no formato tabular, e basta importá-los. Nota: como falamos, não se preocupe, em breve estaremos demonstrando como realizar esse mesmo procedimento utilizando o formato de arquivo específico.

Então, continuando, temos uma série de arquivos exportados, com os contadores mostrados na seguintes contadores:

 

A periodicidade dos nossos dados é horária, assim, no caso do arquivo com a data igual a 11/07/2010 00:00:00 significa dizer que são os dados coletados de 00 a 01 hora do dia 11/07/2010. Ou seja, o arquivo tem dados de uma hora.

Para demonstrar o processo automatizado, vamos supor que você tenha logado na OSS em alguns horários e tenha baixado os dados. Vamos considerar que temos então 3 arquivos:

 

  • counters_100711_00-08h.xls: com dados de 0 a 8 da manhã;
  • counters_100711_09-12h.xls: com dados de 9 às 12 horas da manhã;
  • counters_100711_12-00h.xls: com os dados de 12 da tarde até o fim do dia.

Observe que se juntarmos os 3 arquivos teremos então uma única tabela com dados das 24 horas. Não mão, nós sabemos como fazer isso. Mas nosso objetivo é aprender como fazer esse processo de forma totalmente automatizada. Então vamos continuar.

Mas agora surge um problema: e se os arquivos tiverem dados duplicados, os nossos dados ficarão duplicados? Em outras palavaras, suponhamos que por distração, os dois primeiros arquivos tenham dados de 8 às 9 horas da manhã.

Ou melhor, se você tivesse apendando os dados dos arquivos num só, na mão mesmo, como você faria? Provavelmente abriria o primeiro, colaria nele os dados do segundo e do terceiro, e salvaria com um novo nome final, não é mesmo?

Pois bem, saiba que os dados duplicados iriam ficar lá, e provavelmente o seu relatório do somatório do tráfego do dia ficaria errado!

Existem formas de validação para expurgar os dados repetidos, no Excel por exemplo podemos aplicar uma tabela dinâmica e buscar todos os campos. No nosso procedimento, importando os dados para um banco de dados, vamos ver como fazer esse tipo de validação de forma praticamente transparente, ou seja, não vamos nos preocupar com isso. Vamos utilizar chaves primárias!

 

Chaves Primárias

Quando falamos em chaves primárias, é natural ficarmos meio confusos. Esse termo é muito usado por dba's – ou administradores de banco de dados. Ok, piorou mais ainda.

Tudo bem, de forma simples, chaves primárias podem ser entendidas no nosso caso como o conjunto de campos que define um registro como único. Se definimos o campo Date da nossa tabela como a chave primária, não teríamos muito sucesso. Logo de cara, o segundo registro teria essa mesma data, e pela regra da chave primária – não pode haver duplicadas – daria erro.

Praticamente o mesmo acontece se escolhermos a bsc como chave primária. E também se escolhermos cellname como chave primária – para um horário apenas, tudo bem. Mas quando importássemos dados de um outro horário, os cellname iriam se repetir, e violar a regra da chave primária, dando erro.

 

A solução então é criar uma chave primária de tla forma que uma tabela com vários registros, para vários dias e horários não tenha registros duplicados. E fazemos isso criando uma chave primária composta de todos os campos que definam um registro único. Certo, ficou complicado, mas não temos como ficar explicando muito sobre isso hoje. Apenas aceite que devemos criar uma chave primária com os campos datetime, bsc e cellname juntos, no caso da tabela tbl_kpi_cell.

Nota: lembre-se que na nossa metologia de aprendizado, às vezes mostramos algo bem rapidamente, porque sabemos que você vai acabar entendendo quando usar.

Nesse caso específico, só para demonstrar, faça o seguinte. Crie uma tabela, com um campo chamado 'test'. Não importa o tipo do campo, pode ser texto mesmo.

 

Defina esse campo como sendo uma chave primária. Para isso, acesse o Menu Design (1) da tabela que você criou. Em seguida selecione o campo que você criou (2) e clique no símbolo de Chave Primária (3).

 

Nota: observe que o Access criou um campo automaticamente nessa tabela, o campo ID, do tipo autonumeração, e já como chave primária - desconsidere esse campo e continue. Queremos a chave como sendo o campo que criamos.

Agora abra essa tabela, e digite um valor. No campo seguinte, digite o mesmo valor. Observe o que acontece.

 

O Access não permite que o campo seja duplicado! Para continuar, aperte a tecla ESC.

Pronto, é isso que vamos usar como validação de dados, para que nunca tenhamos dados duplicados em nossas tabelas.

Para definir as chaves primárias que garantirão que os nossos dados não ficarão duplicados, clique nos campos com a tecla CTRL pressionada, e por fim clique no ícone de Chave Primária.

 

Já falamos bastante por hoje, vamos agora um pouco para a prática, ou nosso mundo real.

 

Como esse módulo funciona?

O objetivo hoje, como já falamos, é aprender o processo de como o módulo funciona.

De forma simplificada, podemos representar o processo através dos passos abaixo.

  1. Baixar arquivos de saída da OSS com os contadores brutos;
  2. Salvar esses arquivos na pasta de entrada (Data) do módulo Hunter KPI, para que os mesmos possam ser encontrados e importados;
    • É claro que isso pode ser alterado futuramente, onde podemos por exemplo escolher que o módulo importe um ou mais arquivos de uma determinada pasta. Hoje, vamos ver o processo de forma genérica, sem muitas alternativas, só para não complicar o entendimento;
  3. Importar os arquivos para uma tabela base de contadores;
    • Aqui temos mais alguns detalhes que pulamos hoje, como o parser, ou tratamento de dados que porventura não estivessem no formato desejado. Futuramente veremos também.
  4. A partir dos dados da tabela base de contadores, adicionar os dados (acumular) em tabelas de performance.
    • Nesse ponto usamos as chaves primárias, que nos garantem que não teremos dados repetidos ou duplicados em nossa tabela, o que causuaria um erro em nossos relatórios.
  5. Renomear o arquivo importado para '.imported', e continuar o processo com o próximo arquivo do diretório de dados de entrada.
    • Continuar esse processo até acabarem os arquivos a serem importados.

Pronto. Os dados já estão disponíveis nas três tabelas:

  • CELL: com dados para cada setor (sem agrupamentos).

 

  • BSC: com dados agrupados por BSC.

 

  • NET: com dados agrupados para toda a rede.

 

 

Para rodar o processo, poderíamos ter criado uma interface – também vamos fazer isso no futuro. Hoje você já deve estar cansado de ouvir, mas queremos que você aprenda o processo. Somente isso estará muito bom. Então, para simplificar, para rodar o processo, simplesmente baixe os arquivos da OSS e coloque no formato como mostramos acima (counters_parsed) rode a macro KPI_Main_RUN.

Observação: Aqui temos uma sugestão interessante – duplique alguns arquivos, ou entre em alguns e duplique os dados. Veja que o resultado final – os dados acumulados nas tabelas – não muda, fica sempre correto, com dados não duplicados!

 

O Código

Basicamente todo o processo automatizado é realizado através do código VBA. Vamos apenas destacar os pontos novos.

O principal é a utilização doFileSystemObject. Essa opção é a melhor para trabalharmos com arquivos. Vamos falar agora de forma rápida, em outras utilização daremos maiores detalhes.

A sintaxe para utilização é:

 

Uma vez que tenhamos os nosso diretório carregado, podemos fazer um loop em suas propriedades. Usamos as propriedades arquivos do objeto Folder que criamos a partir do nosso diretório de entrada e pronto: podemos executar as ações necessárias (processar cada arquivo, importar, etc...)

 

Um dos processamentos interessantes que fazemos é o seguinte: após o arquivo ser tratado/importado, o mesmo não precisa nem deve ser importado e processado novamente. E como fazer isso?

Usamos o Comando Name, para renomear arquivos para uma extensão diferente daquela que procuramos no loop (no caso diferente de '.xls'). Após cada arquivo ser processado / importado, o arquivo é renomeado para '.imported', e assim o loop que procura arquivos do tipo '.xls' não encontrará mais esse arquivo (e sim o arquivo .xls.imported).

 

Não temos mais novidades no código por hoje. Como sempre, recomendamos a leitura, pois o mesmo encontra-se totalmente comentado.

 

Referências

Essas são as referências que você deve ter em seu projeto, para que funcione como mostrado hoje.

 

Caso alguma delas esteja faltando, aparecerá como Ausente, e você deverá procurar uma alternativa. Em caso de problemas, entre em contato conosco. Por exemplo, em vez de 12.0 pode ser que você tem a 11.0, se estiver usando o Office 2003 ao invés do 2007.

 

 

Conclusão

Aprendemos hoje o processo simplificado de importação automatizada de um ou mais arquivos com contadores de performance, e seu armazenamento em tabelas de performance.

Nesse processo estão envolvidos diversos outros conceitos, como granularidade (BSC, CELL, NET, etc...), periodicidade (hora, dia, etc...), pré tratamento de dados (parser), tabelas base de performance com chaves primárias, métricas de performance, etc. Além de alguns novos conceitos VBA como o FileSystemObject – usado para trabalhar com diretórios e arquivos, e o comando Name – usado para renomear.

Mas como não podia deixar de ser tudo isso foi visto de maneira rápida, devido ao limite de tempo, e temabém porque não podemos aprender tudo de uma só vez. Mas não se procupe, voltaremos a falar desses assuntos, a medida que formos evoluindo, e todos conseguirem acompanhar. De qualquer forma, perceba que estamos cada vez mais aprendendo coisas novas, e muito em breve estaremos usando as ferramentas de forma completamente profissional.

A nossa busca é continua pelo desenvolvimento de aplicações cada vez mais simples, e que nos permitam melhorar o nosso trabalho, de forma rápida e eficiente. Continue lendo todos os tutoriais, e praticando: não deixe de aquirir conhecimento – esse é o seu maior diferencial!

Esperamos que você tenha gostado. Tire suas eventuais dúvidas postando seus comentários no Blog ou através do nosso Suporte via Chat ou E-mail.

Até nosso próximo encontro, e lembre-se: O seu sucesso é o nosso sucesso!