Hunter KPI

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

Os KPI são uma das partes mais importantes em qualquer rede celular. E habilidades em analisar os mesmos, conseqüentemente, uma das principais tarefas de nós que trabalhamos nessa área. Assim, vamos ver hoje um pouco dos dois: mais alguns conceitos teóricos que vamos usar daqui pra frente em diversos módulos do Hunter que trabalham com KPI, e um pouco de banco de dados Access, mais especificamente aprender a trabalhar com os dados através de tabelas e consultas.

 

 

 

Objetivo

Começar a praticar os conceitos de análise da rede celular através de contadores estatísticos manipulando dados em tabelas e consultas.

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_015_Hunter_KPI.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

Hoje não criaremos nenhum novo diretório, pois já foram criados no tutorial anterior. Os novos arquivos devem ser armazenados seguindo a metodologia Hunter, ou seja, os arquivos com os dados brutos no diretório Data (1), e os bancos de dados no diretório Database (2). No diretório Scripts (3) teremos, como o nome sugere, os códigos de apoio do módulo.

Mais detalhes serão informados à medida que formos evoluindo.

 

Qual o pior setor da rede agora?

Responda sinceramente: Você sabe analisar os dados de performance de uma rede?

Em outras palavras, se alguém te apresentar uma tabela básica como a mostrada a seguir, com os dados de um determinado horário, e pelo menos os indicadores básicos – tráfego, quedas, bloqueio, você é capaz de dizer qual o pior setor da rede naquele momento?

 

Bom, a maioria vai dizer que sim. E realmente, não é tão difícil: por exemplo, utilizando a facilidade de ordenar de forma ascendente ou descendente, você já consegue alguma coisa. Tudo bem, correto, mas qual indicador você vai usar?

Vamos um pouco mais fundo... Suponha que você vai usar o indicador Quedas para definir qual o pior setor. Vai usar a quantidade absoluta (TOTAL_CALL_DROPS) ou a percentual (CALL_DROPS_%)?

Para mostrar que não é tão simples quanto parece, vamos ver exemplos...

Se você escolher o indicador percentual (CALL_DROPS_%), e ordenar de forma descendente (do maior para o menor), vai dizer que o pior setor da rede é o GCELL081 – que apresentou uma taxa de quedas de chamadas de 2.8%.

 

Mas se você ao invés disso escolher o indicador absoluto (TOTAL_CALL_DROPS), e também ordenar de forma descendente, vai dizer que o pior setor da rede na verdade são dois (houve um empate) – são os setores GCELL053 e GCELL111, ambos com 49 quedas no período.

 

E então: GCELL081, GCELL053 ou GCELL111?

A resposta a essa pergunta depende de vários fatores, por exemplo, qual desses sites atende a sala do diretor da nossa empresa! Brincadeiras a parte, a priorização baseada na importância do site deve sempre ser levada em conta, além de outros fatores que veremos com o tempo.

De qualquer forma, uma forma que podemos utilizar para definir qual é o pior setor da rede neste momento, é utilizar outros indicadores em conjunto.

Vamos continuar no nosso exemplo, escolher outro indicador (no caso, o bloqueio) e ordenar de forma descendente.

 

Veja que agora fica mais fácil, principalmente no nosso caso específico, onde o setor GCELL053 foi o único que apresentou bloqueio (tanto absoluto quanto conseqüentemente percentual).

Não levando em conta outros fatores não técnicos, podemos então responder que o setor que requer intervenção imediata é o setor GCELL053!

Veja que numa rede real, a quantidade de setores é muito maior. E também no mundo prático, são usados muito mais indicadores – embora como nós já falamos, os indicadores básicos quase sempre definem os problemas, e os demais são usados mais como auxílio para solução do problema.

 

Já identifiquei o pior setor, e agora, o que faço?

Encontrar os piores setores, ou os ofensores como nos referiremos a partir de agora, é razoavelmente simples. Mas é só o começo do trabalho...

Uma análise eficiente da performance necessariamente deve levar em conta diversos outros relatórios, como por exemplo, o relatório de alarmes. Ou seja, aquele pior setor está com algum problema, por exemplo de hardware?

Ou dependendo do problema apresentado, está prevista alguma ação que resolverá o problema - como por exemplo uma expansão de TRX ou mesmo a adição de um novo site?.

Baseado nestas informações é que tomaremos as ações cabíveis. E é claro, tudo dependendo da nossa área de atuação, como O&M, Planejamento ou Otimização.

Se nossa área por exemplo for a Otimização, o indicador que mais nos importará neste caso de exemplo será a queda de chamadas; se atuarmos no planejamento da rede, vamos nos preocupar com o crescimento do tráfego e os bloqueios. E se trabalharmos por exemplo com a manutenção e operação, provavelmente utilizaremos um indicador mais específico para falhas – embora veremos no futuro como identificar falhas de manutenção e operação usando apenas os indicadores mostrados acima.

Já falamos bastante sobre o que fazer. Agora vamos aprender um pouco mais sobre tabelas e consultas em banco de dados, e como usá-las para analisar os dados.

 

Tabelas do Access

Já falamos sobre tabelas nos primeiros tutoriais, notadamente no tutorial Hunter Network, mas vamos relembrar. Tabelas são conjuntos de registros, mas fica mais fácil imaginar uma tabela lembrando de dados numa planilha do Excel. Os dados que usamos acima poderiam tranquilamente estar numa planilha do Excel como a mostrada abaixo.

 

Sim, podemos trabalhar com os dados no Excel! Mas existem algumas vantagens em aprendermos a trabalhar com banco de dados. No caso, vamos trabalhar com um dos banco de dados mais simples que existe, que é o Access – também da Microsoft, como o Excel. Isso significa que se você já usa o Excel, aprenderá mais facilmente a usar o Access, até porque muitos comandos são comuns do pacote Office. Veja por exemplo como fica a nossa planilha do Excel após ser “importada” para o banco de dados.

 

Uma das vantagens é a capacidade que o Access tem de trabalhar com mais dados que o Excel. Embora a versão mais nova do Office (2007 ou 2010) tenha melhorado bastante as limitações do Excel em termos de capacidade de dados, o Access continua sendo bem melhor para essa finalidade.

Tudo bem, ainda não consegue entender porque o Access é melhor...

Uma outra vantagem é a facilidade que temos de criar consultas SQL para acessar os dados.

Se você ainda não conhece, o SQL é uma linguagem para acesso a dados de banco de dados. Ela é ao mesmo tempo simples e poderosa. A sua sintaxe é bem intuitiva. Por exemplo, veja uma instrução SQL: Select * from myTable;. Essa é uma instrução SQL bem simples, e significa mais ou menos: Selecione tudo da tabela myTable.

A criação de consultas no Access é simples, e também já foi mostrada nos primeiros tutoriais. De qualquer forma, como estamos dando exemplos, vamos criar uma consulta.

Mas antes disso, vamos voltar a relembrar de um conceito que já apresentamos: o conceito de tabelas vinculadas. Poderíamos criar essa e outras consultas dentro do próprio banco de dados onde se encontra a nossa tabela de exemplo. Entretanto, como também já aprendemos nos primeiros tutoriais, é melhor separar a parte de acumulo de dados, da parte de consultas. Isso por diversos motivos já mostrados, um deles é que fica mais fácil separa o backup.

Assim, vamos partir do princípio que temos uma tabela disponível com os dados do tutorial anterior, no banco de dados Hunter_KPI_DB.mdb, localizado no diretório Database do módulo KPI.

Criamos um novo banco de dados do Access em branco, com o nome Hunter_KPI_View.mdb, também localizado no diretório Database. Esse banco de dados será usado como visualizador (VIEW) dos dados que temos no nosso repositório (DB).

Lembrando sempre: mesmo que esteja parecendo um pouco complicado, não é não! Quando você começar a praticar, vai perceber isso. A figura abaixo tenta explicar um pouco como é o processo, mas mesmo que você ainda assim não entenda, continue.

 

Vamos lá. Vamos criar uma primeira consulta qry_KPI no banco de dados de visualização (VIEW).

Só que este banco de dados está vazio, não tem nem ao menos uma tabela. Então vamos primeiro vincular a tabela – já vimos em outro tutorial como fazer isso também. Mas vamos lá, no Access Acesse o Menu Dados Externos (1).

 

Em seguida, clique no botão procurar (1), e selecione o banco de dados Hunter_KPI_DB.mdb (2), que é o nosso repositório de dados. Marque a opção de vincular a tabela (3), e clique no botão Ok dessa caixa de diálogo.

 

Aparecerá uma caixa de diálogo que pemite você então escolher quais as tabelas do banco repositório ficarão vinculadas neste novo banco de dados vazio. Ou seja, tabelas que você terá acesso aos dados, mas os dados propriamente ditos ficam armazenados fisicamente no outro banco – por isso falamos que esse banco de dados de visualização é mais leve. Marque então a (única) tabela disponível tbl_kpi_counters (1), com os nossos dados fictícios, e clique no botão OK (2). Pronto a nossa tabela foi vinculada com sucesso.

 

Observe que a tabela fica disponível. Dá para identificar que ela é uma tabela vinculada pela pequena seta que ele tem ao lado (1), e quando você coloca o mouse em cima, aparece qual o banco onde está tabela está fisicamente (2).

 

Ufa, nem começamos ainda, e já deu para cansar... Mas é bom porque vamos relembrando e fixando. Lembre-se sempre que o objetivo é que você aprenda totalmente tudo o que for mostrado.

 

Agora sim, vamos criar a consulta?

Para criar uma consulta, lembre-se que existem várias maneiras, uma delas é através do Menu Criar (1) -> Estrutura da Consulta (2).

 

A interface de estrutura de consultas do Access é muito amigável, e nos ajuda muito na construção do SQL. Assim que criamos uma nova consulta, ele já nos pergunta quais são as tabelas e/ou consultas que queremos utilizar. (Isso mesmo, podemos fazer consultas sobre consultas, mas depois falamos disso, para não perder o raciocínio agora). Para iniciar a edição da consulta através da interface, selecionamos a tabela que queremos acessar os dados – tbl_kpi_counters – e clicamos no botão Adicionar (2). Como vamos usar apenas essa tabela, clicamos também no botão fechar (3).

 

Essa é a interface de edição. Os campos da consulta (1) podem ser diretamente os campos da tabela, ou campos calculados. Vamos utilizar ambos. E para mostrar na consulta um campo da tabela, você pode clicar num campo qualquer (2) e arrastar até uma coluna em branco da consulta (3), ou escolher na caixa de listagem (4). Isso é bem superficial, todos os detalhes e possibilidades você vai aprendendo praticando.

 

E um campo calculado é definido por um nome do campo calculado, seguindo de “:” e da expressão. Novamente lembramos que falamos sobre isso nos primeiros tutoriais, e estamos revendo brevemente. Se você tiver alguma dúvida, por favor, leia os primeiros tutoriais, ou então, entre em contato com o suporte.

Os campos calculados podem ser resultados de matemática, ou expressões, entre outros. O universo é bem grande. Por exemplo, na nossa consulta, desejamos separar a data – que contém a data no formato data/hora em um campo com data apenas, e um campo com hora apenas. Podemos ter tudo: um campo com data e hora, outro com data e outro só com hora. Você é quem decide quais os campos deseja em sua consulta.

A função para extrair a data é a DateValue (), assim temos o campo calculado strDate: DateValue([DateTime]). Da mesma forma, a função do Access para extrair Hora é a TimeValue(), e temos o campo calculado strTime: TimeValue([DateTime]). Com o tempo, aprenderemos inúmeras outras funções que nos ajudarão bastante na manipulação de dados através de consultas, não se preocupe que você aprenderá cada uma a medida que for precisando.

Os cálculos matemáticos são feitos utilizando os sinais de operação comuns. Para multiplicar, utilizamos ‘*’, e para dividir, usamos ‘/’.

Veja então como fica a nossa consulta final qry_KPI, num formato comum de apresentação. (A imagem foi dividida em duas, apenas para melhor visualização).

 

E o resultado dessa consuta, você pode ver pelo Menu Design (1) -> Rodar (2).

 

Nota: talvez você tenha percebido que a dica que aparece quando o mouse está em cima do botão Rodar informa que ao clicar ele vai executar a ação especificada na consulta. E porque isso? Bom, na verdade vamos falar disso mais tarde, e também já falamos nos primeiros tutoriais. As consultas SQL podem ter outras finalidades que apenas selecionar dados, como é o padrão, e é o que estamos vendo para começar a aprender.

Existem opções de SQL para criar uma nova tabela a partir dos dados especificados na instrução, para adicionar dados (acumular) em outras tabelas existentes, entre outras bem mais avançadas. Vamos usar bastante todas as opções, mas primeiro precisamos aprender com o básico, ou seja, consultas seleção. No próximo tutorial de KPI por exemplo você aprenderá como usar consultas que criam tabelas e acumulam dados para criar o nosso sistema!

Voltando ao nosso ponto, após clicar no botão rodar, temos o resultado da consulta.

 

Puxa, andamos tanto e chegamos a uma simples tabela?

Calma, isso foi só para mostrar como se cria e utiliza uma consulta. Essa consulta foi salva com o nome qry_KPI, e quando executada, mostra os dados tais quais estão na tabela tbl_kpi_counters.

Sö que no nosso exemplo, os dados são de apenas um período, e para poucos setores. E quando tiver um monte de dados acumulado?

 

Outras opções das consultas

Mesmo correndo o risco de estarmos sendo um pouco repetitivos – já que esses conceitos de consultas foram vistos nos primeiros tutoriais – vamos exemplificar algumas utilizações de filtros, condições, expressões, etc. em consultas.

As consultas SQL tem várias opções além do simples Select, que significa selecionar. Além das opções de substituição do Select por instruções como Update – que atualiza dados de uma tabela ao invés de selecionar, temos diversas outras como ORDER BY, que ordena os dados. Uma dessas opções, ou podemos chamar de argumentos do SQL, é a clausula WHERE, ou seja, uma ou mais condições a ser obedecida.

Ai, ai, ai... voltou a complicar... Certo, vamos exemplificar.

Veja a instrução que falamos acima, só que agora com uma clausula condicional: Select * from myTable Where Name like ‘telecomhall’; Agora, essa instrução significa mais ou menos isso: Selecione tudo da tabela myTable cujo campo Name tenha o valor telecomhall!

Na interface do Access, as condições são inseridas na linha critérios. Por exemplo, se na nossa consulta qry_kpi_counters inserimos o critério Like “*CELL08*”, o que significa?

 

Está certo, não fomos legais. Você talvez ainda não saiba que também podemos usar caracteres curinga em expressões de texto. O que é isso? Bom caracteres curinga funcionam mais ou menos como uma máscara para aceitar qualquer tipo de dados. Por exemplo, se você usa o ‘*’, significa que aceita qualquer coisa. No caso, queremos que o campo seja como *CELL08*, ou seja, queremos selecionar todos os dados da consulta cujo campo CELLNAME tenha o valor de texto com qualquer coisa, seguido de CELL08, por sua vez seguido de qualquer coisa! Está ficando meio abstrato ou maluco? Calma, é porque você ainda não praticou...

Executando a consulta com esse critério, temos o resultado a seguir.

 

Também não tem muito sentido prático, mas serviu para mostrar como usar critérios e também curingas.

E o que acontece se especificarmos um critéiro que não existe na tabela? Simples, a consulta não retorna nada. Abaixo temos a saída da consulta com o critério #10:00:00#, ou seja um horário que sabemos que existe; e a saída para #11:00:00#, um horário – ou seja um critério - que não existe em nossos dados.

 

Nota: Se você estiver atento, já percebeu um outro identificador, o símbolo #. Esse símbolo é usado para informar que o valor que estamos usando é uma data ou hora.

Uma opção também muito importante e útil no SQL é a clausula GROUP BY, ou seja, agrupar. Ela é importante porque nos permite a utilização de diversas funções de agrupamento como soma, contagem, etc. Entretanto, é uma opção que muita gente tem dificuldade de entender, mas não tem motivo.

Usamos a opção de agrupar quando queremos um resultado – obviamente – agrupado em um ou mais campos. O que acontece é que as pessoas costumam usar a clausula agrupar, mas esquecem que precisam arrumar os campos de forma que seja possível esse agrupamento.

Por exemplo, se você deseja contar quantos setores temos na nossa consulta, o que faria? Claro usaria a clausula Agrupar.

Tudo bem, na interface de edição da consulta do Access, a forma de indicarmos que queremos que essa consulta tenha os dados agrupados é clicando no botão Totais (1).

 

Mas só isso? Não, aí é que está. A consulta vai agrupar todos os registros iguais, mas e daí? Para funcionar, e podermos por exemplo ter uma consulta que nos retorne a quantidade de registros, precisamos ter apenas os campos que serão agrupados.

Tudo bem, tudo bem... está confuso. Vamos ver numa forma mais gráfica e intuitiva. Suponha uma tabela simples com tipo de animal e nome.

 

Suponha agora que você deseja contar quantos animais existem em cada tipo, ou seja, contar os registros do campo name agrupando o animal (campo animal). Se estivermos usando uma consulta SQL, e você simplesmente inserir a clausula agrupar, o resultado será como o mostrado a seguir.

 

Perceba que você precisa excluir, ou em outras palavras, não pode mostrar também esse campo na consulta, senão cai no caso mostrado acima. Assim, se você agrupa apenas pelos campos corretos, pode então obter o resultado esperado.

 

Talvez ainda não tenha ficado totalmente claro, mas esperamos que você tenha entendido pelo menos o seguinte por enquanto: você deve escolher os campos adequados de acordo com o resultado que precisa.

No caso da nossa consulta, vamos usar a clausula Agrupar e alterar a nossa consulta de forma que o resultado seja a contagem de setores para o dia e horário disponíveis. Para isso, clicamos no botão Totais (1), apagamos os demais campos que não sejam Data, Hora e CELLNAME (2), e alteramos a opção Agrupar por da linhas totais (3) do campo CELLNAME para Contar (4). Apenas para ficar mais intuitivo, altere o nome CELLNAME para NumOfSectors.

 

Executando a consulta, temos o resultado esperado.

Ainda teríamos bastante o que mostrar, opções de consultas, entre outros. Porém, por hoje é suficiente que você tenha aprendido alguns conceitos, ou melhor, fixado o que já aprendemos anteriormente, e visto como a manipulação de dados pode ser feita com o Access.

 

Mas afinal, o que há de interessante nisso tudo?

Certo, não tem nada de prático no que vimos. Mas isso foi intencional. Estamos aqui ensinando, e tudo o que falamos precisa estar bem entendido por você. Um dos motivos é que porque vamos utilizar cada vez mais consultas, e estas por sua vez cada vez mais complexas.

Uma coisa que ainda não falamos, e é importante é o seguinte: toda vez que você estiver editando uma consulta na interface do Access, você pode rapidamente verificar qual a sintaxe SQL da mesma! Para isso, basta acessar o Menu Design (1) -> Visualizar (2) -> SQL View (3).

 

Veja a sintaxe SQL da nossa consulta qry_KPI original. E o mais legal de tudo: você pode editar a consulta tanto usando a interface, quanto digitando no próprio SQL! Ou seja, se você é fera em SQL, pode simplesmente digitar seus comandos e executá-los. Particularmente, preferimos usar a interface do Access, e se necessário, fazer apenas ajustes no SQL via SQL View.

 

Nota: existem certos tipos de consultas – bem avançadas – que não possuem representação gráfica, através da interface do Access – nem qualquer outro programa, como as consultas UNION. No momento certo, usaremos cada tipo de consulta avançada, e explicaremos tudo com detalhes. Você se surpreenderá em ver como consultas SQL são realmente poderosas.

Uma utilização interessante do SQL View é a possibilidade que temos de editar o SQL, por exemplo, no Bloco de Notas ou até mesmo criando a sintaxe através de campos concatenados no Excel.

Outra coisa bem mais importante sobre tabelas e consultas é que todas podem ser acessadas via código VBA! Na verdade, elas podem até mesmo ser criadas via VBA!

Através da instrução Docmd.RunSQL(SQLStatement) podemos executar praticamente tudo o que precisarmos.

 

E os dados de consultas e tabelas também podem ser acessados através de RecordSets, outra poderosa funcionalidade dos bancos de dados. RecordSets podem ser entendidos como um conjunto de registros na memória, e já falamos sobre isso em outro tutorial – aliás, já usamos RecordSet em alguns módulos como por exemplo o que gera os dados da rede no Google Earth.

 

Utilizando manipulação de objetos do banco de dados Access, quer seja através de sua interface, quer seja através do código VBA, podemos e vamos criar aplicações surpreendentemente poderosas, e a reunião de todas essas aplicações resultam num sistema integrado, o Hunter.

Só para finalizar, criamos um módulo, com o código VBA que faz algumas manipulações simples com a consulta qry_KPI, e retorna como resultado o total de setores e a soma do tráfego em uma caixa de diálogo simples. É claro que no futuro nossos relatórios serão apresentados de forma muito melhor do que numa caixa de mensagem, mas serve para demonstrar o nosso propósito hoje.

 

Não se preocupe, este código está até mais comentado do que o normal – uma vez que é um código de exemplo. De qualquer forma, em caso de dúvidas, entre em contato com o suporte.

Também criamos uma macro - qry_KPI_VBA_RUN, como já ensinamos em outros tutoriais, simplesmente para rodar o código criado no módulo.

 

Assim, de forma bem rápida, rode essa macro e você verá o resultado instantaneamente.

 

Bom, por hoje é isso. Embora tenha sido um bom começo, ainda temos muita coisa para aprender. Mas acreditamos que por hoje esteja suficiente. Se você conseguir entender e praticar tudo o que foi apresentado, estará preparado para acompanhar os próximos módulos. Como você já notou, todos os códigos fornecidos são comentados, e fica muito fácil acompanhar o que está sendo feito.

 

Conclusão

Tivemos hoje a oportunidade de relembrar alguns conceitos, e aprender alguns novos utilizados na manipulação de tabelas e consultas no banco de dados Access. Em termos de análise de performance, ainda vimos bem pouco que possa ser usado na prática, mas tivemos uma visão geral das possibilidades que temos, ou o que vamos construir. A razão é bem simples: estamos mais preocupados em que você aprenda, e não tem como realizar quaisquer análises de forma bem feita se os conceitos aqui vistos não estiverem totalmente compreendidos.

O resultado final, embora ainda simples, já nos possibilitam ver que podemos criar ferramentas extremamente poderosas, porém de forma simples e eficiente, bastando para isso vontade e criatividade. Essa é a visão que temos no sistema Hunter, e você já deve estar começando a ver como ele é incrivelmente fantástico, não?

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!