Hunter Audit - Check Parameters (Application)

sexta-feira, 5 de agosto de 2011 13:25:00 Categories: Access Hunter Parameters
Rate this Content 1 Votes

Uma das mais importantes tarefas para o controle eficiente de uma rede é garantir que todos os parâmetros de configuração da mesma (GSM, UMTS, LTE...) estejam corretamente ajustados.

 

 

Um parâmetro qualquer, fora do padrão, pode causar um verdadeiro estrago na performance, e consequentemente na satisfação dos clientes. E o tempo gasto para encontrar tal problema é desnecessário – já que o problema poderia fácil e rapidamente encontrado por um algorítmo eficiente e automático.

As causas para parâmetros incorretamente configurados são várias, como por exemplo uma base de dados inicial com erros, alterações de elementos (por exemplo TRX), aplicações de Patch nas BSC's/RNC's – que podem levar alguns parâmetros para um valor padrão – diferente do ideal, testes de otimização onde os parâmetros são 'esquecidos' na configuração de teste, etc.

Mas uma rede possui uma quantidade imensa de parâmetros, para as mais diversas situações (Acesso, Handover, Potência, etc...). E essa tarefa torna-se extremamente difícil de ser feita manualmente e ou por amostragem.

Como essa tarefa é imprescindível, vamos então conhecer hoje uma aplicação completa, que faz todos esses tratamentos rapida e automaticamente para nós: o Módulo 'Hunter Parameters Audit – Check Parameters'.

Embora possa parecer, essa aplicação é bem simples, mas o seus resultados são fantásticos. Você vai comprovar quando utilizar em sua rede.

Então, vamos lá.

 

Objetivo

Apresentar a solução do Módulo 'Hunter Parameters Audit – Check Parameters'.

Observação 1: esse módulo encontra-se bem completo, cumprindo bem o seu objetivo de fazer a auditoria de todos os parâmetros de todas as tabelas de nossa rede. De qualquer forma, pequenas melhorias podem ser feitas oportunamente. Você que já recebeu o código, dedique um tempo para entender o código – não se preocupe, como falamos, tudo é bem simples, e bem comentado. Como sempre, você ão deverá encontrar nenhum problema em continuar evoluindo em seu conhecimento.

Observação 2: se você não é colaborador, mas tem interesse em desenvolver aplicação similar, esse passo a passo, assim como os passo a passo de todos os módulos Hunter, vai encontrar aqui um excelente ponto de partida. Tutorial a tutorial, você poderá ir aprendendo cada vez mais.

Observação 3: como mencionamos antes, em breve estaremos entrando significativamente no mundo de Indicadores de Performance. Aplicações completas e muito interessantes – delta KPI, rank, reports completos por e-mail, entre outros algorítmos muito eficientes e importantes que você aprenderá aqui. Assim, prepare-se para o que vem por aí, não deixando de ler algum tutorial anterior, e principalmente, familiarizando-se com essas ferramentas simples, porém muito eficientes.

Certo, como sempre, vamos começar com a Interface do Usuário desse módulo.

 

Essa é uma interface bem simples, uma vez que não temos muito o que fazer: o algorítmo deve procurar TUDO o que estiver errado e pronto!

Nota: como sempre, as Interfaces do Usuário Hunter são simples e práticas. Nada impede que você faça mais alterações, seguindo como exemplo as interfaces prontas.

Essa interface interage com os dados do Módulo 'Hunter Parameters'. Basicamente este módulo é um banco de dados repositório, contendo todas as tabelas de configuração da nossa rede. Numa rede GSM/UMTS por exemplo, a quantidade de tabelas chega a centenas. Por esse motivo, esse é um módulo 'base', ou seja, serve de fonte de dados para diversos outros módulos Hunter, como esse que estamos vendo agora.

Voltando a falar da Interface do Usuário, também temos configurações apresentadas em outras abas.

Na primeira aba (Main) temos as opções simples de escolha. Aqui é possível por exemplo escolhermos se os setores deve ser criados como polígonos, linhas, ou ambos.

 

A aba 'Table/Field' contém os dados (informações) dos nomes das nossas tabelas e campos. É aqui que informamos à ferramenta quais as tabelas/campos que ela deve tratar (por essa razão o nome TABLE_FIELD). Falaremos um pouco mais sobre ela daqui a pouco.

 

Por fim, uma aba extra (Optimized), mas com uma finalidade interessante, que também veremos logo mais.

 

Assim como em outros módulos, temos a opção de abrir diretamente o local (diretório) onde os arquivos foram gerados, melhorando a experiência do usuário.

Uma pequena Ajuda pode ser acessada através do botão 'Help', com as principais informações de ajuda do módulo.

E o botão principal, com o símbolo '!', que gera os dados.

Você já deve estar acostumado, mas vai aí mais uma vez: Não se preocupe – embora a princípio possa parecer um pouco complicado, vamos explicar tudo e você vai ver que não é complicado. Principalmente depois que praticar com a ferramenta, que já vem completa e funcional com os nossos dados de exemplo.

Vamos prosseguir? Veremos com um pouco mais de detalhes os objetos (tabelas, consultas, etc.) do banco de dados, e o processo de forma global.

 

Cenário

Primeiramente, definimos o nosso cenário de hoje.

Embora você já deva ter percebido a idéia principal, vamos antes ver uns exemplos, com os nossos dados fictícios.

Nota: mencionamos que uma rede real possui centenas de tabelas, cada uma delas com dezenas de campos.

Mas para demonstrar, não precisamos de tantos dados. Duas tabelas, com 2 ou 3 parâmetros de exemplo são mais do que suficiente para tal.

Assim, suponha que tenhamos na nossa rede 2 tabelas de Parametros de Configuração.

Uma tabela 'GSMBASIC' com 3 parâmetros GSM, e outra tabela 'UMTSBASIC' com 2 parâmetros UMTS. (Também não precisamos repetir tabelas para mais tecnologias, a idéia é a mesma para 2 ou para 2 mil tabelas).

Na tabela GSM temos os parâmetros 'sample_GSM_parameter_1', 'sample_GSM_parameter_2' e 'sample_GSM_parameter_3'.

 

Na tabela UMTS temos os parâmetros 'sample_UMTS_parameter_1' e 'sample_UMTS_parameter_2'.

 

Agora vamos lá: simplesmente olhando para as tabelas, você consegue identificar quais parâmetros estão – pelo menos – fora de um padrão?

Fazendo uma inspeção visual para cada parâmetro, podemos identificar os que estão com valores 'suspeitos'. Por exemplo, o parâmetro 'sample_UMTS_parameter_2' está configurado como 'enabled' para todos os demais setores de nossa rede – com exceção apenas do setor 'UPROP21'.

 

Mas já sabemos que a quantidade de parâmetros é muito grande: não dá para fazer isso para todas as tabelas e campos, não é mesmo?

Que tal então, se um algorítmo fizesse esse trabalho para nós, e apresentasse tudo o que estiver 'diferente' numa tabela?

Bom, para saber que está diferente de um valor padrão, precisamos definir esse valor. E isso é o que informamos na tabela 'TABLE_FIELD' – aquela tabela que também temos acesso através da Interface do Usuário, lembra?

 

Veja por exemplo, que o valor do parâmetro 'sample_UMTS_parameter_2' em nossa rede deve estar configurado como 'enabled'!

Você também deve ter notado que esta tabela ainda tem um campo chamado 'ID_FIELD'. Esse é apenas um campo auxiliar. Serve para excluirmos do nosso algorítmo aqueles campos que não deve ser processados. Por exemplo, o campo com o nome do setor – com certeza um campo que vai estar diferente para todos.

Antecipando o resultado da ferramenta, após clicar no botão rodar, em segundos temos o resultado.

 

Veja que temos todos os registros que estão com parâmetros com valores diferentes daqueles que 'supostamente' deviam estar configurados.

O campo 'Is_Configured' apresenta o valor atual que está na BSC/RNC, enquanto o campo 'Should_Be_Configured' mostra o valor que o mesmo deveria ter.

Mas veja que falamos 'supostamente'. Isso porque um parâmetro diferente do valor esperado não necessariamente está errado.

Suponha que um Otimizador tenha propositalmente desabilitado o parâmetro para por exemplo atender uma reclamação específica. O que fazer nesse caso?

Provavelmente, você também notou que a tabela tem um campo chamado 'REASON'. Nos casos de exceção como o citado acima, basta informarmos que existe uma razão para o parâmetro estar configurado de tal forma. (Por exemplo, o parâmetro 'sample_UMTS_parameter_2' foi otimizado para 'disabled' para atender um cliente).

Certo, mas como fazemos essa realimentação?

Bom, na primeira vez que você rodar a ferramenta, vai encontrar um resultado parecido (só que provavelmente com muitas mais 'inconcistências').

 

Nessa mesma tabela (se preferir, pode copiar a tabela para o Excel e trabalhar lá) identifique os casos de otimização e quaisquer outros casos em que os parâmetros estejam nessa situação, e preencha o campo 'REASON'. (Por exemplo, nesse exemplo, o único caso de exceção, foi otimizado devido a reclamação de cliente X em 01/05/2010).

Copie essas linhas (aplique um filtro simples excluindo REASON em branco) e simplesmente cole na tabela 'OPTIMIZED'. Pronto, na próxima vez que você rodar, a ferramenta identificará que esse campo específico tem essa razão para estar configurado assim, e apresentará a tabela final da mesma forma como na figura acima.

 

Nota: Se você quiser ver apenas os campos que estão configurados de forma errada, pode fazer uma consulta simples, com o critério REASON = Null.

Mas você pode pensar: 'Mas que trabalho, tenho que identificar todos os parâmetros que estão otimizados em minha rede?'

Bom, o questionamento procede. É claro, que você terá um pequeno trabalho inicial. Mas você acabará sendo 'forçado' a utilizar uma outra prática altamente recomendada e valorizada: manter um controle dos parâmetros otimizados.

Se você ainda não tem esse controle, deveria ter!

De qualquer forma, já estamos falando da forma como você trabalha – e nesse ponto, quem decide o que fazer é você, não?

Fica aqui apenas a recomendação que você faça esse controle – com a grande ajuda desse módulo, que já te dá tudo pronto. Uma sugestão é transportar a tabela inicial gerada, e cruzar com os dados de seu controle. De qualquer forma, é apenas uma sugestão: respeitamos sua liberdade.

 

Estrutura de Arquivos

A estrutura básica do Hunter você já conhece dos demais tutoriais, e se vem acompanhando a evolução, já deve ter os diretórios desse módulo já criado.

IMPORTANTE: todos os arquivos que você recebe, para cada tutorial, já estão no formato esperado. Simplesmente clique em 'Extrair Aqui...' utilizando WinZIP ou WinRAR – com esse arquivo no diretório raiz 'C:\'.

 

Após extrair os arquivos desse módulo, você já tem tudo configurado corretamente como a seguir.

O diretório 'Parameters\Database' contém o banco de dados base com todas as nossas tabelas de parâmetros de configuração.

O diretório 'Audit' é o diretório principal do módulos de Audit como esse. Por exemplo, o diretório 'Audit\Help' contém todos os arquivos auxiliares e de ajuda referentes ao módulo 'Hunter Audit'.

Mas observe que aqui temos uma pequena diferença em relação ao que estamos acostumados: O diretório 'Scripts' não contém a aplicação desse módulo – na verdade contém um segundo diretório: 'Check_Parameters'. Esse sim, é o diretório que contém os subdiretórios desse módulo específico ('Help' com arquivos auxiliares exclusivos para 'Check_Parameters', e 'Scripts', com a Aplicação desse módulo).

Mas porque isso? Simples, porque 'Check_Parameters' não é o único módulo de audit que teremos, é apenas o primeiro. Tutorial a tutorial conheceremos novos e incríveis módulos de audit, como Audit Perfomance, Audit Network e até outras variações de Audit Parameters – o Delta Parameters. Mas a explicação deste e de outros módulos de audit virão em seu devido tempo.

 

Uma Pausa

Agora, vale a pena fazermos uma pequena pausa.

Gostaríamos de lembrar do objetivo principal do telecomHall, que é bem traduzido pela nosso slogan: 'O seu sucesso é o nosso sucesso'.

Isso significa, que mais importante do que receber aplicações e simplesmente utilizá-las, é você aprender. Só assim você alcançará o esperado sucesso.

Não deixe de praticar, estudar as idéias aplicadas e procedimentos utilizados. Leia todos os tutoriais, em sequência, e sem exceção. E não pule nenhum deles, principalmente os primeiros onde noções básicas são mais detalhadas. Por exemplo, mesmo que você nunca trabalhou com Drive Test, nem deverá trabalhar: não deixe de ler os módulos que envolvem Drive Test. O mesmo para qualquer outro tópico: mesmo que não seja sua área, leia os tutoriais, acompanhando com os arquivos recebidos.

O prazo médio de uma semana é intencional por isso – senão, bastaria publicar uma tonelada de tutoriais e aplicações. Mas não é esse nosso objetivo. Por isso, acompanhe, participe, e aprenda! Combinado? Se precisar, tire suas poste sua dúvida nos fóruns e ela será respondida.

IMPORTANTE: como sempre em cada tutorial, apresentaremos as formas criadas por nós para obtenção da solução. Isso inclui uma série de truques e considerações, que com criatividade nos permitem um resultado prático e funcional. É claro que sempre podem haver melhorias, algumas inclusive já previstas e em desenvolvimento. Você mesmo poderá estender a aplicação para um nível ainda maior e adequada para suas possíveis necessidades. De qualquer forma, certamente vale como aprendizado para se entender como tudo pode ser feito.

 

A Aplicação

Novamente, esta é uma aplicação totalmente feita em Microsoft Access com VBA. Vamos ver alguns detalhes importantes sobre o desenvolvimento.

 

Objetos do Banco de Dados (Tabelas, Consultas, Forms e Macros)

Iniciamos falando da tabela 'Audit_Check_Parameters'. Essa tabela contém o resultado final. Toda vez que a ferramenta roda, apaga os dados da mesma, e gera novamente.

 

A tabela 'TABLE_FIELD', como já sabemos, é a tabela que contém a informação das tabelas, campos e valores que a aplicação utiliza.

 

A tabela 'OPTIMIZED' também já teve sua finalidade explicada, e é a tabela onde inserimos os colamos as exceções que devem ser apresentadas/consideradas pela ferramenta.

 

A tabela 'tbl_Aux_CheckBoxes' tem exatamente a mesma finalidade de armazenar os valores da interface, como foi explicado no tutorial 'Hunter GE Network (Application)', assim não precisamos explicar novamente aqui.

 

Agora, vamos falar das tabelas com os parâmetros. As tabelas 'GSMBASIC' e 'UMTSBASIC' são as tabelas base com os parâmetros de configuração de nossa rede, vinculadas do módulo base 'Hunter Parameters'.

 

Aqui temos uma observação importante: para cada tabela que desejamos processar, precisamos identificar uma chave primária. Não se assuste, não é complicado assim. O que acontece é que temos tabelas em diversas granularidades.

Por exemplo, tabelas de CELL tem um campo CELLNAME, que podemos utilizar como ID. Mas e outros tipos de tabelas, por exemplo de TRX, que para cada CELL tem vários TRX? Nesse caso, para criar um ID exclusivo para cada linha, criamos o campo ID como concatenação dos campos CELLNAME e TRX.

As figuras a seguir explicam melhor.

Na nossa tabela 'GSMBASIC', o campo 'ID' corresponde ao CELLNAME, ou seja, nada de novo.

 

Agora, suponha uma nova tabela 'GSMTRXBASIC'.

 

O campo 'ID', deve conter a informação do CELLNAME e do TRX, assim o resultado é corretamente identificado na tabela final. (Se não fosse assim, o ID seria 'GPROP011' – não identificando o registro, ou melhor, o TRX específico com problema).

 

O campo ID não existe na tabela: então criamos as consultas de cada tabela com todos os campos originais da mesma, incluindo o campo 'ID', calculado de acordo com a chave primária, ou identificar único para cada tabela específica). O nome da consulta é 'qry_' + o nome da tabela.

Veja o exemplo para a consulta 'qry_GSMBASIC'.

 

E para finalizar, temos duas consultas auxiliares.

A consulta 'qry_AUX_TABLE_FIELD' é simples: faz um filtro nos dados da tabela 'TABLE_FIELD'. Ela exclui do processamento os campos com sem valores alvo (FIELD_VALUE is not null), e também os campos identificados como Identificadores (ID_FIELD is null).

 

E a consulta 'qry_AUX_OPTIMIZED' é uma consulta base, que é alterada pelo código VBA: no loop simples no campo 'ID' de cada consulta (tabela) processada, ele verifica se há valor correspondente na tabela 'OPTIMIZED'.

 

Código VBA

Como você já está acostumado, todo o nosso código fornecido* é sempre comentado. Isso torna a explicação novamente aqui redundante, extensa e desnecessária.

IMPORTANTE: O código completo, incluindo as linhas com os comentários, tem menos de 100 linhas! Mesmo assim, se você encontrar algum problema, ou tiver alguma dúvida em algum procedimento, entre em contato, postando sua dúvida no fórum.

 

Resultado

Bom, esse foi um módulo onde o resultado já foi mostrado e explicado.

De qualquer forma, o diagrama a seguir mostra o processo de forma genérica.

 

 

Bom pessoal, por hoje é isso. Esperamos que tenham gostado, e continue praticando. Assim você aprende de forma simples e fácil. E se prepara para os novos tutoriais preparados.

 

Desafio (Exercício)
Poderíamos estender o tutorial um pouco mais, com alguns assuntos relacionados: sim, ainda há coisas legais que podem ser feitas com esse módulo do jeito que ele está.

Mas dessa vez vamos fazer um pouco diferente. No próximo tutorial, independente do assunto abordado, vamos explicar uma forma de conseguir o valor 'padrão' de cada campo de cada tabela, utilizando nada mais que esse módulo (com apenas uma consulta GROUP BY – ops, falamos demais).

Brincadeiras a parte, fica aí o desafio para você até a próxima semana. Após praticar, encontre uma maneira de identificar o valor padrão de todos os campos de todas as tabelas – e aí preencher a tabela TABLE_FIELD com os mesmos.

Dica: entenda como valor padrão de cada campo aquele valor que tem mais contagens! Tudo bem que pode não ser o correto – na maioria das vezes é – mas é um bom começo.

Se conseguir descobrir como fazer isso, me envie um e-mail. Senão, aguarde o próximo tutorial que explicamos.

 

Download

Para baixar os arquivos* deste tutorial, clique aqui.

* Observação: O Hunter SDK é o conjunto de ferramentas criadas e demonstradas no telecomHall – incluindo as Macros e Códigos. O Hunter SDK somente é enviado para Colaboradores Doadores, como forma de agradecimento pela contribuição única feita, que reconhece o esforço realizado. Clique aqui se desejar saber mais. Os arquivos disponíveis servem apenas como exemplo para você que não é colaborador ter suas próprias idéias.

 

Conclusão

Vimos hoje como criar mais uma aplicação customizada utilizando o Microsoft Access.

A aplicação, embora simples, é uma fantástica ferramenta de Audit, e os seus resultados são impressionantes – além de ter um processamento muito rápido.

A aplicação está completa e funcional com dados fictícios, e nada impede que você utilize em sua rede imediatamente, e também que faça suas próprias melhorias/extensões.

 

Agradecemos a sua visita, e esperamos que as informações apresentadas possam servir de ponto de partida para suas soluções e macros.

Em especial, agradecemos aos colaboradores do telecomHall. Os arquivos desse tutorial já foram enviados, por favor verifiquem. Caso tenham tido algum problema no recebimento, por favor informem.

Continuamos com a preparação dos tutoriais para diversos outros módulos, que serão publicados gradativa e oportunamente. No momento, como também mencionamos no tutorial anterior, estamos com uma série sobre Performance, com algorítmos exclusivos e muito interessante para garantir a melhor qualidade na sua rede.

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: esse conhecimento adquirido pode ser o seu maior diferencial!

Obrigado, e não deixe de conhecer as novas Dicas publicadas essa semana!